Imported Upstream version 8.6.8 upstream/8.6.8
authorDongHun Kwak <dh0128.kwak@samsung.com>
Fri, 18 Dec 2020 03:17:35 +0000 (12:17 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Fri, 18 Dec 2020 03:17:35 +0000 (12:17 +0900)
480 files changed:
README
changes
doc/Object.3
doc/SaveResult.3
doc/ToUpper.3
doc/UniCharIsAlpha.3
doc/Utf.3
generic/tcl.decls
generic/tcl.h
generic/tclBasic.c
generic/tclBinary.c
generic/tclCmdIL.c
generic/tclCmdMZ.c
generic/tclCompExpr.c
generic/tclDictObj.c
generic/tclEncoding.c
generic/tclEnsemble.c
generic/tclEnv.c
generic/tclHash.c
generic/tclIO.c
generic/tclIORChan.c
generic/tclIOUtil.c
generic/tclIndexObj.c
generic/tclInt.h
generic/tclLink.c
generic/tclListObj.c
generic/tclLoad.c
generic/tclOO.c
generic/tclOOCall.c
generic/tclOOMethod.c
generic/tclPanic.c
generic/tclParse.c
generic/tclPathObj.c
generic/tclPipe.c
generic/tclPkg.c
generic/tclRegexp.c
generic/tclScan.c
generic/tclStringObj.c
generic/tclTest.c
generic/tclUtf.c
generic/tclUtil.c
library/clock.tcl [changed mode: 0755->0644]
library/http/http.tcl
library/http/pkgIndex.tcl
library/init.tcl
library/msgcat/pkgIndex.tcl
library/tzdata/Africa/Juba
library/tzdata/Africa/Khartoum
library/tzdata/Africa/Windhoek
library/tzdata/America/Adak
library/tzdata/America/Anchorage
library/tzdata/America/Detroit
library/tzdata/America/Grand_Turk
library/tzdata/America/Juneau
library/tzdata/America/Metlakatla
library/tzdata/America/Nome
library/tzdata/America/Sitka
library/tzdata/America/Yakutat
library/tzdata/Asia/Famagusta
library/tzdata/Asia/Kolkata
library/tzdata/Asia/Yangon
library/tzdata/Asia/Yerevan
library/tzdata/Europe/Dublin
library/tzdata/Pacific/Apia
library/tzdata/Pacific/Fiji
library/tzdata/Pacific/Pago_Pago
library/tzdata/Pacific/Tongatapu
macosx/configure
pkgs/itcl4.1.0/win/makefile.vc [deleted file]
pkgs/itcl4.1.0/win/rules.vc [deleted file]
pkgs/itcl4.1.1/ChangeLog [moved from pkgs/itcl4.1.0/ChangeLog with 100% similarity]
pkgs/itcl4.1.1/Makefile.in [moved from pkgs/itcl4.1.0/Makefile.in with 100% similarity]
pkgs/itcl4.1.1/README [moved from pkgs/itcl4.1.0/README with 96% similarity]
pkgs/itcl4.1.1/TODO [moved from pkgs/itcl4.1.0/TODO with 100% similarity]
pkgs/itcl4.1.1/aclocal.m4 [moved from pkgs/itcl4.1.0/aclocal.m4 with 100% similarity]
pkgs/itcl4.1.1/configure [moved from pkgs/itcl4.1.0/configure with 99% similarity]
pkgs/itcl4.1.1/configure.ac [moved from pkgs/itcl4.1.0/configure.ac with 98% similarity]
pkgs/itcl4.1.1/doc/Class.3 [moved from pkgs/itcl4.1.0/doc/Class.3 with 100% similarity]
pkgs/itcl4.1.1/doc/List.3 [moved from pkgs/itcl4.1.0/doc/List.3 with 100% similarity]
pkgs/itcl4.1.1/doc/Object.3 [moved from pkgs/itcl4.1.0/doc/Object.3 with 100% similarity]
pkgs/itcl4.1.1/doc/Preserve.3 [moved from pkgs/itcl4.1.0/doc/Preserve.3 with 100% similarity]
pkgs/itcl4.1.1/doc/RegisterC.3 [moved from pkgs/itcl4.1.0/doc/RegisterC.3 with 100% similarity]
pkgs/itcl4.1.1/doc/Stack.3 [moved from pkgs/itcl4.1.0/doc/Stack.3 with 100% similarity]
pkgs/itcl4.1.1/doc/body.n [moved from pkgs/itcl4.1.0/doc/body.n with 100% similarity]
pkgs/itcl4.1.1/doc/class.n [moved from pkgs/itcl4.1.0/doc/class.n with 100% similarity]
pkgs/itcl4.1.1/doc/code.n [moved from pkgs/itcl4.1.0/doc/code.n with 100% similarity]
pkgs/itcl4.1.1/doc/configbody.n [moved from pkgs/itcl4.1.0/doc/configbody.n with 100% similarity]
pkgs/itcl4.1.1/doc/delete.n [moved from pkgs/itcl4.1.0/doc/delete.n with 100% similarity]
pkgs/itcl4.1.1/doc/ensemble.n [moved from pkgs/itcl4.1.0/doc/ensemble.n with 100% similarity]
pkgs/itcl4.1.1/doc/find.n [moved from pkgs/itcl4.1.0/doc/find.n with 100% similarity]
pkgs/itcl4.1.1/doc/is.n [moved from pkgs/itcl4.1.0/doc/is.n with 100% similarity]
pkgs/itcl4.1.1/doc/itcl.n [moved from pkgs/itcl4.1.0/doc/itcl.n with 100% similarity]
pkgs/itcl4.1.1/doc/itclcomponent.n [moved from pkgs/itcl4.1.0/doc/itclcomponent.n with 100% similarity]
pkgs/itcl4.1.1/doc/itcldelegate.n [moved from pkgs/itcl4.1.0/doc/itcldelegate.n with 100% similarity]
pkgs/itcl4.1.1/doc/itclextendedclass.n [moved from pkgs/itcl4.1.0/doc/itclextendedclass.n with 100% similarity]
pkgs/itcl4.1.1/doc/itcloption.n [moved from pkgs/itcl4.1.0/doc/itcloption.n with 100% similarity]
pkgs/itcl4.1.1/doc/itclvars.n [moved from pkgs/itcl4.1.0/doc/itclvars.n with 100% similarity]
pkgs/itcl4.1.1/doc/itclwidget.n [moved from pkgs/itcl4.1.0/doc/itclwidget.n with 100% similarity]
pkgs/itcl4.1.1/doc/license.terms [moved from pkgs/itcl4.1.0/doc/license.terms with 100% similarity]
pkgs/itcl4.1.1/doc/local.n [moved from pkgs/itcl4.1.0/doc/local.n with 100% similarity]
pkgs/itcl4.1.1/doc/man.macros [moved from pkgs/itcl4.1.0/doc/man.macros with 100% similarity]
pkgs/itcl4.1.1/doc/scope.n [moved from pkgs/itcl4.1.0/doc/scope.n with 93% similarity]
pkgs/itcl4.1.1/generic/clientData [new file with mode: 0644]
pkgs/itcl4.1.1/generic/itcl.decls [moved from pkgs/itcl4.1.0/generic/itcl.decls with 100% similarity]
pkgs/itcl4.1.1/generic/itcl.h [moved from pkgs/itcl4.1.0/generic/itcl.h with 98% similarity]
pkgs/itcl4.1.1/generic/itcl2TclOO.c [moved from pkgs/itcl4.1.0/generic/itcl2TclOO.c with 100% similarity]
pkgs/itcl4.1.1/generic/itcl2TclOO.h [moved from pkgs/itcl4.1.0/generic/itcl2TclOO.h with 100% similarity]
pkgs/itcl4.1.1/generic/itclBase.c [moved from pkgs/itcl4.1.0/generic/itclBase.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclBuiltin.c [moved from pkgs/itcl4.1.0/generic/itclBuiltin.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclClass.c [moved from pkgs/itcl4.1.0/generic/itclClass.c with 99% similarity]
pkgs/itcl4.1.1/generic/itclCmd.c [moved from pkgs/itcl4.1.0/generic/itclCmd.c with 99% similarity]
pkgs/itcl4.1.1/generic/itclDecls.h [moved from pkgs/itcl4.1.0/generic/itclDecls.h with 100% similarity]
pkgs/itcl4.1.1/generic/itclEnsemble.c [moved from pkgs/itcl4.1.0/generic/itclEnsemble.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclHelpers.c [moved from pkgs/itcl4.1.0/generic/itclHelpers.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclInfo.c [moved from pkgs/itcl4.1.0/generic/itclInfo.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclInt.h [moved from pkgs/itcl4.1.0/generic/itclInt.h with 99% similarity]
pkgs/itcl4.1.1/generic/itclIntDecls.h [moved from pkgs/itcl4.1.0/generic/itclIntDecls.h with 100% similarity]
pkgs/itcl4.1.1/generic/itclLinkage.c [moved from pkgs/itcl4.1.0/generic/itclLinkage.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclMethod.c [moved from pkgs/itcl4.1.0/generic/itclMethod.c with 99% similarity]
pkgs/itcl4.1.1/generic/itclMigrate2TclCore.c [moved from pkgs/itcl4.1.0/generic/itclMigrate2TclCore.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclMigrate2TclCore.h [moved from pkgs/itcl4.1.0/generic/itclMigrate2TclCore.h with 100% similarity]
pkgs/itcl4.1.1/generic/itclObject.c [moved from pkgs/itcl4.1.0/generic/itclObject.c with 99% similarity]
pkgs/itcl4.1.1/generic/itclParse.c [moved from pkgs/itcl4.1.0/generic/itclParse.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclResolve.c [moved from pkgs/itcl4.1.0/generic/itclResolve.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclResolve2.c [moved from pkgs/itcl4.1.0/generic/itclResolve2.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclStubInit.c [moved from pkgs/itcl4.1.0/generic/itclStubInit.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclStubLib.c [moved from pkgs/itcl4.1.0/generic/itclStubLib.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclStubs.c [moved from pkgs/itcl4.1.0/generic/itclStubs.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclTclIntStubsFcn.c [moved from pkgs/itcl4.1.0/generic/itclTclIntStubsFcn.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclTclIntStubsFcn.h [moved from pkgs/itcl4.1.0/generic/itclTclIntStubsFcn.h with 100% similarity]
pkgs/itcl4.1.1/generic/itclTestRegisterC.c [moved from pkgs/itcl4.1.0/generic/itclTestRegisterC.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclUtil.c [moved from pkgs/itcl4.1.0/generic/itclUtil.c with 99% similarity]
pkgs/itcl4.1.1/generic/itclVCInt.h [moved from pkgs/itcl4.1.0/generic/itclVCInt.h with 100% similarity]
pkgs/itcl4.1.1/generic/itclVarsAndCmds.c [moved from pkgs/itcl4.1.0/generic/itclVarsAndCmds.c with 100% similarity]
pkgs/itcl4.1.1/generic/itclVarsAndCmds.h [moved from pkgs/itcl4.1.0/generic/itclVarsAndCmds.h with 100% similarity]
pkgs/itcl4.1.1/itclConfig.sh.in [moved from pkgs/itcl4.1.0/itclConfig.sh.in with 100% similarity]
pkgs/itcl4.1.1/library/itcl.tcl [moved from pkgs/itcl4.1.0/library/itcl.tcl with 100% similarity]
pkgs/itcl4.1.1/library/itclHullCmds.tcl [moved from pkgs/itcl4.1.0/library/itclHullCmds.tcl with 100% similarity]
pkgs/itcl4.1.1/library/itclWidget.tcl [moved from pkgs/itcl4.1.0/library/itclWidget.tcl with 100% similarity]
pkgs/itcl4.1.1/library/test_Itcl_CreateObject.tcl [moved from pkgs/itcl4.1.0/library/test_Itcl_CreateObject.tcl with 100% similarity]
pkgs/itcl4.1.1/license.terms [moved from pkgs/itcl4.1.0/license.terms with 100% similarity]
pkgs/itcl4.1.1/pkgIndex.tcl.in [moved from pkgs/itcl4.1.0/pkgIndex.tcl.in with 77% similarity]
pkgs/itcl4.1.1/releasenotes.txt [moved from pkgs/itcl4.1.0/releasenotes.txt with 92% similarity]
pkgs/itcl4.1.1/tclconfig/install-sh [moved from pkgs/thread2.8.1/tclconfig/install-sh with 100% similarity]
pkgs/itcl4.1.1/tclconfig/tcl.m4 [moved from pkgs/sqlite3.20.0/tclconfig/tcl.m4 with 97% similarity]
pkgs/itcl4.1.1/tests/all.tcl [moved from pkgs/itcl4.1.0/tests/all.tcl with 100% similarity]
pkgs/itcl4.1.1/tests/basic.test [moved from pkgs/itcl4.1.0/tests/basic.test with 100% similarity]
pkgs/itcl4.1.1/tests/body.test [moved from pkgs/itcl4.1.0/tests/body.test with 100% similarity]
pkgs/itcl4.1.1/tests/chain.test [moved from pkgs/itcl4.1.0/tests/chain.test with 100% similarity]
pkgs/itcl4.1.1/tests/delete.test [moved from pkgs/itcl4.1.0/tests/delete.test with 100% similarity]
pkgs/itcl4.1.1/tests/eclasscomponent.test [moved from pkgs/itcl4.1.0/tests/eclasscomponent.test with 96% similarity]
pkgs/itcl4.1.1/tests/ensemble.test [moved from pkgs/itcl4.1.0/tests/ensemble.test with 100% similarity]
pkgs/itcl4.1.1/tests/general1.test [moved from pkgs/itcl4.1.0/tests/general1.test with 100% similarity]
pkgs/itcl4.1.1/tests/import.test [moved from pkgs/itcl4.1.0/tests/import.test with 100% similarity]
pkgs/itcl4.1.1/tests/info.test [moved from pkgs/itcl4.1.0/tests/info.test with 100% similarity]
pkgs/itcl4.1.1/tests/inherit.test [moved from pkgs/itcl4.1.0/tests/inherit.test with 100% similarity]
pkgs/itcl4.1.1/tests/interp.test [moved from pkgs/itcl4.1.0/tests/interp.test with 100% similarity]
pkgs/itcl4.1.1/tests/local.test [moved from pkgs/itcl4.1.0/tests/local.test with 100% similarity]
pkgs/itcl4.1.1/tests/methods.test [moved from pkgs/itcl4.1.0/tests/methods.test with 100% similarity]
pkgs/itcl4.1.1/tests/mkindex.itcl [moved from pkgs/itcl4.1.0/tests/mkindex.itcl with 100% similarity]
pkgs/itcl4.1.1/tests/mkindex.test [moved from pkgs/itcl4.1.0/tests/mkindex.test with 100% similarity]
pkgs/itcl4.1.1/tests/namespace.test [moved from pkgs/itcl4.1.0/tests/namespace.test with 100% similarity]
pkgs/itcl4.1.1/tests/protection.test [moved from pkgs/itcl4.1.0/tests/protection.test with 100% similarity]
pkgs/itcl4.1.1/tests/scope.test [moved from pkgs/itcl4.1.0/tests/scope.test with 100% similarity]
pkgs/itcl4.1.1/tests/sfbugs.test [moved from pkgs/itcl4.1.0/tests/sfbugs.test with 100% similarity]
pkgs/itcl4.1.1/tests/tclIndex [moved from pkgs/itcl4.1.0/tests/tclIndex with 100% similarity]
pkgs/itcl4.1.1/tests/typeclass.test [moved from pkgs/itcl4.1.0/tests/typeclass.test with 100% similarity]
pkgs/itcl4.1.1/tests/typedelegation.test [moved from pkgs/itcl4.1.0/tests/typedelegation.test with 97% similarity]
pkgs/itcl4.1.1/tests/typefunction.test [moved from pkgs/itcl4.1.0/tests/typefunction.test with 100% similarity]
pkgs/itcl4.1.1/tests/typeinfo.test [moved from pkgs/itcl4.1.0/tests/typeinfo.test with 100% similarity]
pkgs/itcl4.1.1/tests/typeoption.test [moved from pkgs/itcl4.1.0/tests/typeoption.test with 100% similarity]
pkgs/itcl4.1.1/tests/typevariable.test [moved from pkgs/itcl4.1.0/tests/typevariable.test with 100% similarity]
pkgs/itcl4.1.1/tests/widgetadaptor.test [moved from pkgs/itcl4.1.0/tests/widgetadaptor.test with 99% similarity]
pkgs/itcl4.1.1/tests/widgetclass.test [moved from pkgs/itcl4.1.0/tests/widgetclass.test with 99% similarity]
pkgs/itcl4.1.1/tools/genStubs.tcl [moved from pkgs/itcl4.1.0/tools/genStubs.tcl with 100% similarity]
pkgs/itcl4.1.1/win/dllEntryPoint.c [moved from pkgs/itcl4.1.0/win/dllEntryPoint.c with 100% similarity]
pkgs/itcl4.1.1/win/itcl.rc [moved from pkgs/itcl4.1.0/win/itcl.rc with 100% similarity]
pkgs/itcl4.1.1/win/makefile.vc [new file with mode: 0644]
pkgs/itcl4.1.1/win/nmakehlp.c [moved from pkgs/sqlite3.20.0/win/nmakehlp.c with 83% similarity]
pkgs/itcl4.1.1/win/rules-ext.vc [new file with mode: 0644]
pkgs/itcl4.1.1/win/rules.vc [new file with mode: 0644]
pkgs/itcl4.1.1/win/targets.vc [new file with mode: 0644]
pkgs/itcl4.1.1/win/toaster.bmp [moved from pkgs/itcl4.1.0/win/toaster.bmp with 100% similarity]
pkgs/sqlite3.20.0/win/makefile.vc [deleted file]
pkgs/sqlite3.20.0/win/rules.vc [deleted file]
pkgs/sqlite3.21.0/Makefile.in [moved from pkgs/sqlite3.20.0/Makefile.in with 100% similarity]
pkgs/sqlite3.21.0/README [moved from pkgs/sqlite3.20.0/README with 100% similarity]
pkgs/sqlite3.21.0/aclocal.m4 [moved from pkgs/sqlite3.20.0/aclocal.m4 with 100% similarity]
pkgs/sqlite3.21.0/compat/sqlite3/shell.c [moved from pkgs/sqlite3.20.0/compat/sqlite3/shell.c with 99% similarity]
pkgs/sqlite3.21.0/compat/sqlite3/spaceanal.tcl [moved from pkgs/sqlite3.20.0/compat/sqlite3/spaceanal.tcl with 100% similarity]
pkgs/sqlite3.21.0/compat/sqlite3/sqlite3.c [moved from pkgs/sqlite3.20.0/compat/sqlite3/sqlite3.c with 97% similarity]
pkgs/sqlite3.21.0/compat/sqlite3/sqlite3.h [moved from pkgs/sqlite3.20.0/compat/sqlite3/sqlite3.h with 98% similarity]
pkgs/sqlite3.21.0/compat/sqlite3/sqlite3ext.h [moved from pkgs/sqlite3.20.0/compat/sqlite3/sqlite3ext.h with 99% similarity]
pkgs/sqlite3.21.0/configure [moved from pkgs/sqlite3.20.0/configure with 99% similarity]
pkgs/sqlite3.21.0/configure.ac [moved from pkgs/sqlite3.20.0/configure.ac with 99% similarity]
pkgs/sqlite3.21.0/doc/sqlite3.n [moved from pkgs/sqlite3.20.0/doc/sqlite3.n with 100% similarity]
pkgs/sqlite3.21.0/generic/tclsqlite3.c [moved from pkgs/sqlite3.20.0/generic/tclsqlite3.c with 81% similarity]
pkgs/sqlite3.21.0/license.terms [moved from pkgs/sqlite3.20.0/license.terms with 100% similarity]
pkgs/sqlite3.21.0/pkgIndex.tcl.in [moved from pkgs/sqlite3.20.0/pkgIndex.tcl.in with 100% similarity]
pkgs/sqlite3.21.0/tclconfig/install-sh [moved from pkgs/tdbcsqlite3-1.0.5/tclconfig/install-sh with 100% similarity]
pkgs/sqlite3.21.0/tclconfig/tcl.m4 [moved from pkgs/thread2.8.1/tclconfig/tcl.m4 with 100% similarity]
pkgs/sqlite3.21.0/tests/all.tcl [moved from pkgs/sqlite3.20.0/tests/all.tcl with 100% similarity]
pkgs/sqlite3.21.0/tests/leapsecond.test [moved from pkgs/sqlite3.20.0/tests/leapsecond.test with 100% similarity]
pkgs/sqlite3.21.0/win/makefile.vc [new file with mode: 0644]
pkgs/sqlite3.21.0/win/nmakehlp.c [moved from pkgs/thread2.8.1/win/nmakehlp.c with 81% similarity]
pkgs/sqlite3.21.0/win/rules-ext.vc [new file with mode: 0644]
pkgs/sqlite3.21.0/win/rules.vc [new file with mode: 0644]
pkgs/sqlite3.21.0/win/targets.vc [new file with mode: 0644]
pkgs/tdbc1.0.5/win/makefile.vc [deleted file]
pkgs/tdbc1.0.5/win/nmakehlp.c [deleted file]
pkgs/tdbc1.0.5/win/rules.vc [deleted file]
pkgs/tdbc1.0.6/ChangeLog [moved from pkgs/tdbc1.0.5/ChangeLog with 100% similarity]
pkgs/tdbc1.0.6/Makefile.in [moved from pkgs/tdbc1.0.5/Makefile.in with 98% similarity]
pkgs/tdbc1.0.6/README [moved from pkgs/tdbc1.0.5/README with 98% similarity]
pkgs/tdbc1.0.6/aclocal.m4 [moved from pkgs/tdbcsqlite3-1.0.5/aclocal.m4 with 100% similarity]
pkgs/tdbc1.0.6/configure [moved from pkgs/tdbc1.0.5/configure with 99% similarity]
pkgs/tdbc1.0.6/configure.ac [moved from pkgs/tdbc1.0.5/configure.ac with 99% similarity]
pkgs/tdbc1.0.6/doc/Tdbc_Init.3 [moved from pkgs/tdbc1.0.5/doc/Tdbc_Init.3 with 100% similarity]
pkgs/tdbc1.0.6/doc/tdbc.n [moved from pkgs/tdbc1.0.5/doc/tdbc.n with 100% similarity]
pkgs/tdbc1.0.6/doc/tdbc_connection.n [moved from pkgs/tdbc1.0.5/doc/tdbc_connection.n with 100% similarity]
pkgs/tdbc1.0.6/doc/tdbc_mapSqlState.n [moved from pkgs/tdbc1.0.5/doc/tdbc_mapSqlState.n with 100% similarity]
pkgs/tdbc1.0.6/doc/tdbc_resultset.n [moved from pkgs/tdbc1.0.5/doc/tdbc_resultset.n with 100% similarity]
pkgs/tdbc1.0.6/doc/tdbc_statement.n [moved from pkgs/tdbc1.0.5/doc/tdbc_statement.n with 100% similarity]
pkgs/tdbc1.0.6/doc/tdbc_tokenize.n [moved from pkgs/tdbc1.0.5/doc/tdbc_tokenize.n with 100% similarity]
pkgs/tdbc1.0.6/generic/tdbc.c [moved from pkgs/tdbc1.0.5/generic/tdbc.c with 100% similarity]
pkgs/tdbc1.0.6/generic/tdbc.decls [moved from pkgs/tdbc1.0.5/generic/tdbc.decls with 100% similarity]
pkgs/tdbc1.0.6/generic/tdbc.h [moved from pkgs/tdbc1.0.5/generic/tdbc.h with 96% similarity]
pkgs/tdbc1.0.6/generic/tdbcDecls.h [moved from pkgs/tdbc1.0.5/generic/tdbcDecls.h with 100% similarity]
pkgs/tdbc1.0.6/generic/tdbcInt.h [moved from pkgs/tdbc1.0.5/generic/tdbcInt.h with 100% similarity]
pkgs/tdbc1.0.6/generic/tdbcStubInit.c [moved from pkgs/tdbc1.0.5/generic/tdbcStubInit.c with 100% similarity]
pkgs/tdbc1.0.6/generic/tdbcStubLib.c [moved from pkgs/tdbc1.0.5/generic/tdbcStubLib.c with 100% similarity]
pkgs/tdbc1.0.6/generic/tdbcTokenize.c [moved from pkgs/tdbc1.0.5/generic/tdbcTokenize.c with 100% similarity]
pkgs/tdbc1.0.6/library/tdbc.tcl [moved from pkgs/tdbc1.0.5/library/tdbc.tcl with 99% similarity]
pkgs/tdbc1.0.6/license.terms [moved from pkgs/tdbc1.0.5/license.terms with 100% similarity]
pkgs/tdbc1.0.6/pkgIndex.tcl.in [moved from pkgs/tdbc1.0.5/pkgIndex.tcl.in with 100% similarity]
pkgs/tdbc1.0.6/tclconfig/ChangeLog [moved from pkgs/tdbcpostgres1.0.5/tclconfig/ChangeLog with 100% similarity]
pkgs/tdbc1.0.6/tclconfig/README.txt [moved from pkgs/tdbcpostgres1.0.5/tclconfig/README.txt with 100% similarity]
pkgs/tdbc1.0.6/tclconfig/install-sh [moved from pkgs/tdbcpostgres1.0.5/tclconfig/install-sh with 100% similarity, mode: 0755]
pkgs/tdbc1.0.6/tclconfig/tcl.m4 [moved from pkgs/tdbc1.0.5/tclconfig/tcl.m4 with 97% similarity]
pkgs/tdbc1.0.6/tdbcConfig.sh.in [moved from pkgs/tdbc1.0.5/tdbcConfig.sh.in with 100% similarity]
pkgs/tdbc1.0.6/tests/all.tcl [moved from pkgs/tdbc1.0.5/tests/all.tcl with 100% similarity]
pkgs/tdbc1.0.6/tests/tdbc.test [moved from pkgs/tdbc1.0.5/tests/tdbc.test with 100% similarity]
pkgs/tdbc1.0.6/tests/tokenize.test [moved from pkgs/tdbc1.0.5/tests/tokenize.test with 100% similarity]
pkgs/tdbc1.0.6/tools/genExtStubs.tcl [moved from pkgs/tdbc1.0.5/tools/genExtStubs.tcl with 100% similarity]
pkgs/tdbc1.0.6/tools/genStubs.tcl [moved from pkgs/tdbc1.0.5/tools/genStubs.tcl with 100% similarity]
pkgs/tdbc1.0.6/tools/tdbc-man2html.tcl [moved from pkgs/tdbc1.0.5/tools/tdbc-man2html.tcl with 100% similarity]
pkgs/tdbc1.0.6/win/makefile.vc [new file with mode: 0644]
pkgs/tdbc1.0.6/win/nmakehlp.c [moved from pkgs/itcl4.1.0/win/nmakehlp.c with 80% similarity]
pkgs/tdbc1.0.6/win/rules-ext.vc [new file with mode: 0644]
pkgs/tdbc1.0.6/win/rules.vc [new file with mode: 0644]
pkgs/tdbc1.0.6/win/targets.vc [new file with mode: 0644]
pkgs/tdbc1.0.6/win/tdbc.rc [moved from pkgs/tdbc1.0.5/win/tdbc.rc with 88% similarity]
pkgs/tdbcmysql1.0.5/win/makefile.vc [deleted file]
pkgs/tdbcmysql1.0.5/win/nmakehlp.c [deleted file]
pkgs/tdbcmysql1.0.5/win/rules.vc [deleted file]
pkgs/tdbcmysql1.0.6/ChangeLog [moved from pkgs/tdbcmysql1.0.5/ChangeLog with 100% similarity]
pkgs/tdbcmysql1.0.6/Makefile.in [moved from pkgs/tdbcmysql1.0.5/Makefile.in with 99% similarity]
pkgs/tdbcmysql1.0.6/README [moved from pkgs/tdbcmysql1.0.5/README with 97% similarity]
pkgs/tdbcmysql1.0.6/aclocal.m4 [moved from pkgs/tdbcpostgres1.0.5/aclocal.m4 with 100% similarity]
pkgs/tdbcmysql1.0.6/configure [moved from pkgs/tdbcmysql1.0.5/configure with 99% similarity]
pkgs/tdbcmysql1.0.6/configure.ac [moved from pkgs/tdbcmysql1.0.5/configure.ac with 98% similarity]
pkgs/tdbcmysql1.0.6/doc/tdbc_mysql.n [moved from pkgs/tdbcmysql1.0.5/doc/tdbc_mysql.n with 100% similarity]
pkgs/tdbcmysql1.0.6/generic/fakemysql.h [moved from pkgs/tdbcmysql1.0.5/generic/fakemysql.h with 100% similarity]
pkgs/tdbcmysql1.0.6/generic/int2ptr_ptr2int.h [moved from pkgs/tdbcpostgres1.0.5/generic/int2ptr_ptr2int.h with 100% similarity]
pkgs/tdbcmysql1.0.6/generic/mysqlStubDefs.txt [moved from pkgs/tdbcmysql1.0.5/generic/mysqlStubDefs.txt with 100% similarity]
pkgs/tdbcmysql1.0.6/generic/mysqlStubInit.c [moved from pkgs/tdbcmysql1.0.5/generic/mysqlStubInit.c with 100% similarity]
pkgs/tdbcmysql1.0.6/generic/mysqlStubs.h [moved from pkgs/tdbcmysql1.0.5/generic/mysqlStubs.h with 100% similarity]
pkgs/tdbcmysql1.0.6/generic/tdbcmysql.c [moved from pkgs/tdbcmysql1.0.5/generic/tdbcmysql.c with 100% similarity]
pkgs/tdbcmysql1.0.6/library/tdbcmysql.tcl [moved from pkgs/tdbcmysql1.0.5/library/tdbcmysql.tcl with 100% similarity]
pkgs/tdbcmysql1.0.6/license.terms [moved from pkgs/tdbcodbc1.0.5/license.terms with 100% similarity]
pkgs/tdbcmysql1.0.6/pkgIndex.tcl.in [moved from pkgs/tdbcmysql1.0.5/pkgIndex.tcl.in with 100% similarity]
pkgs/tdbcmysql1.0.6/tclconfig/install-sh [moved from pkgs/tdbcodbc1.0.5/tclconfig/install-sh with 100% similarity]
pkgs/tdbcmysql1.0.6/tclconfig/tcl.m4 [moved from pkgs/itcl4.1.0/tclconfig/tcl.m4 with 97% similarity]
pkgs/tdbcmysql1.0.6/tests/all.tcl [moved from pkgs/tdbcodbc1.0.5/tests/all.tcl with 100% similarity]
pkgs/tdbcmysql1.0.6/tests/tdbcmysql.test [moved from pkgs/tdbcmysql1.0.5/tests/tdbcmysql.test with 100% similarity]
pkgs/tdbcmysql1.0.6/win/makefile.vc [new file with mode: 0644]
pkgs/tdbcmysql1.0.6/win/nmakehlp.c [moved from pkgs/tdbcodbc1.0.5/win/nmakehlp.c with 80% similarity]
pkgs/tdbcmysql1.0.6/win/rules-ext.vc [new file with mode: 0644]
pkgs/tdbcmysql1.0.6/win/rules.vc [new file with mode: 0644]
pkgs/tdbcmysql1.0.6/win/targets.vc [new file with mode: 0644]
pkgs/tdbcodbc1.0.5/tclconfig/tcl.m4 [deleted file]
pkgs/tdbcodbc1.0.5/win/makefile.vc [deleted file]
pkgs/tdbcodbc1.0.5/win/rules.vc [deleted file]
pkgs/tdbcodbc1.0.6/ChangeLog [moved from pkgs/tdbcodbc1.0.5/ChangeLog with 100% similarity]
pkgs/tdbcodbc1.0.6/Makefile.in [moved from pkgs/tdbcodbc1.0.5/Makefile.in with 99% similarity]
pkgs/tdbcodbc1.0.6/README [moved from pkgs/tdbcodbc1.0.5/README with 95% similarity]
pkgs/tdbcodbc1.0.6/aclocal.m4 [moved from pkgs/tdbcodbc1.0.5/aclocal.m4 with 100% similarity]
pkgs/tdbcodbc1.0.6/configure [moved from pkgs/tdbcodbc1.0.5/configure with 99% similarity]
pkgs/tdbcodbc1.0.6/configure.ac [moved from pkgs/tdbcodbc1.0.5/configure.ac with 98% similarity]
pkgs/tdbcodbc1.0.6/doc/tdbc_odbc.n [moved from pkgs/tdbcodbc1.0.5/doc/tdbc_odbc.n with 100% similarity]
pkgs/tdbcodbc1.0.6/generic/fakesql.h [moved from pkgs/tdbcodbc1.0.5/generic/fakesql.h with 100% similarity]
pkgs/tdbcodbc1.0.6/generic/int2ptr_ptr2int.h [moved from pkgs/tdbcodbc1.0.5/generic/int2ptr_ptr2int.h with 100% similarity]
pkgs/tdbcodbc1.0.6/generic/odbcStubDefs.txt [moved from pkgs/tdbcodbc1.0.5/generic/odbcStubDefs.txt with 100% similarity]
pkgs/tdbcodbc1.0.6/generic/odbcStubInit.c [moved from pkgs/tdbcodbc1.0.5/generic/odbcStubInit.c with 100% similarity]
pkgs/tdbcodbc1.0.6/generic/odbcStubs.h [moved from pkgs/tdbcodbc1.0.5/generic/odbcStubs.h with 100% similarity]
pkgs/tdbcodbc1.0.6/generic/tdbcodbc.c [moved from pkgs/tdbcodbc1.0.5/generic/tdbcodbc.c with 100% similarity]
pkgs/tdbcodbc1.0.6/library/tdbcodbc.tcl [moved from pkgs/tdbcodbc1.0.5/library/tdbcodbc.tcl with 100% similarity]
pkgs/tdbcodbc1.0.6/license.terms [moved from pkgs/tdbcmysql1.0.5/license.terms with 100% similarity]
pkgs/tdbcodbc1.0.6/pkgIndex.tcl.in [moved from pkgs/tdbcodbc1.0.5/pkgIndex.tcl.in with 100% similarity]
pkgs/tdbcodbc1.0.6/tclconfig/install-sh [moved from pkgs/tdbcmysql1.0.5/tclconfig/install-sh with 100% similarity]
pkgs/tdbcodbc1.0.6/tclconfig/tcl.m4 [moved from pkgs/tdbcmysql1.0.5/tclconfig/tcl.m4 with 97% similarity]
pkgs/tdbcodbc1.0.6/tests/all.tcl [moved from pkgs/tdbcmysql1.0.5/tests/all.tcl with 100% similarity]
pkgs/tdbcodbc1.0.6/tests/tdbcodbc.test [moved from pkgs/tdbcodbc1.0.5/tests/tdbcodbc.test with 100% similarity]
pkgs/tdbcodbc1.0.6/tests/test.mdb [moved from pkgs/tdbcodbc1.0.5/tests/test.mdb with 100% similarity]
pkgs/tdbcodbc1.0.6/win/makefile.vc [new file with mode: 0644]
pkgs/tdbcodbc1.0.6/win/nmakehlp.c [new file with mode: 0644]
pkgs/tdbcodbc1.0.6/win/rules-ext.vc [new file with mode: 0644]
pkgs/tdbcodbc1.0.6/win/rules.vc [new file with mode: 0644]
pkgs/tdbcodbc1.0.6/win/targets.vc [new file with mode: 0644]
pkgs/tdbcpostgres1.0.5/tclconfig/tcl.m4 [deleted file]
pkgs/tdbcpostgres1.0.5/win/makefile.vc [deleted file]
pkgs/tdbcpostgres1.0.5/win/nmakehlp.c [deleted file]
pkgs/tdbcpostgres1.0.5/win/rules.vc [deleted file]
pkgs/tdbcpostgres1.0.6/ChangeLog [moved from pkgs/tdbcpostgres1.0.5/ChangeLog with 100% similarity]
pkgs/tdbcpostgres1.0.6/Makefile.in [moved from pkgs/tdbcpostgres1.0.5/Makefile.in with 99% similarity]
pkgs/tdbcpostgres1.0.6/README [moved from pkgs/tdbcpostgres1.0.5/README with 96% similarity]
pkgs/tdbcpostgres1.0.6/TODO [moved from pkgs/tdbcpostgres1.0.5/TODO with 100% similarity]
pkgs/tdbcpostgres1.0.6/aclocal.m4 [moved from pkgs/tdbcmysql1.0.5/aclocal.m4 with 100% similarity]
pkgs/tdbcpostgres1.0.6/configure [moved from pkgs/tdbcpostgres1.0.5/configure with 99% similarity]
pkgs/tdbcpostgres1.0.6/configure.ac [moved from pkgs/tdbcpostgres1.0.5/configure.ac with 98% similarity]
pkgs/tdbcpostgres1.0.6/doc/tdbc_postgres.n [moved from pkgs/tdbcpostgres1.0.5/doc/tdbc_postgres.n with 100% similarity]
pkgs/tdbcpostgres1.0.6/generic/fakepq.h [moved from pkgs/tdbcpostgres1.0.5/generic/fakepq.h with 100% similarity]
pkgs/tdbcpostgres1.0.6/generic/int2ptr_ptr2int.h [moved from pkgs/tdbcmysql1.0.5/generic/int2ptr_ptr2int.h with 100% similarity]
pkgs/tdbcpostgres1.0.6/generic/pqStubDefs.txt [moved from pkgs/tdbcpostgres1.0.5/generic/pqStubDefs.txt with 100% similarity]
pkgs/tdbcpostgres1.0.6/generic/pqStubInit.c [moved from pkgs/tdbcpostgres1.0.5/generic/pqStubInit.c with 100% similarity]
pkgs/tdbcpostgres1.0.6/generic/pqStubs.h [moved from pkgs/tdbcpostgres1.0.5/generic/pqStubs.h with 100% similarity]
pkgs/tdbcpostgres1.0.6/generic/tdbcpostgres.c [moved from pkgs/tdbcpostgres1.0.5/generic/tdbcpostgres.c with 100% similarity]
pkgs/tdbcpostgres1.0.6/library/tdbcpostgres.tcl [moved from pkgs/tdbcpostgres1.0.5/library/tdbcpostgres.tcl with 100% similarity]
pkgs/tdbcpostgres1.0.6/license.terms [moved from pkgs/tdbcpostgres1.0.5/license.terms with 100% similarity]
pkgs/tdbcpostgres1.0.6/pkgIndex.tcl.in [moved from pkgs/tdbcpostgres1.0.5/pkgIndex.tcl.in with 100% similarity]
pkgs/tdbcpostgres1.0.6/tclconfig/ChangeLog [moved from pkgs/tdbc1.0.5/tclconfig/ChangeLog with 100% similarity]
pkgs/tdbcpostgres1.0.6/tclconfig/README.txt [moved from pkgs/tdbc1.0.5/tclconfig/README.txt with 100% similarity]
pkgs/tdbcpostgres1.0.6/tclconfig/install-sh [moved from pkgs/tdbc1.0.5/tclconfig/install-sh with 100% similarity, mode: 0644]
pkgs/tdbcpostgres1.0.6/tclconfig/tcl.m4 [new file with mode: 0644]
pkgs/tdbcpostgres1.0.6/tests/all.tcl [moved from pkgs/tdbcpostgres1.0.5/tests/all.tcl with 100% similarity]
pkgs/tdbcpostgres1.0.6/tests/future/tdbcpostgre.test.tcl [moved from pkgs/tdbcpostgres1.0.5/tests/future/tdbcpostgre.test.tcl with 100% similarity]
pkgs/tdbcpostgres1.0.6/tests/tdbcpostgres.test [moved from pkgs/tdbcpostgres1.0.5/tests/tdbcpostgres.test with 100% similarity]
pkgs/tdbcpostgres1.0.6/win/makefile.vc [new file with mode: 0644]
pkgs/tdbcpostgres1.0.6/win/nmakehlp.c [new file with mode: 0644]
pkgs/tdbcpostgres1.0.6/win/rules-ext.vc [new file with mode: 0644]
pkgs/tdbcpostgres1.0.6/win/rules.vc [new file with mode: 0644]
pkgs/tdbcpostgres1.0.6/win/targets.vc [new file with mode: 0644]
pkgs/tdbcsqlite3-1.0.5/tclconfig/tcl.m4 [deleted file]
pkgs/tdbcsqlite3-1.0.5/win/makefile.vc [deleted file]
pkgs/tdbcsqlite3-1.0.5/win/nmakehlp.c [deleted file]
pkgs/tdbcsqlite3-1.0.5/win/rules.vc [deleted file]
pkgs/tdbcsqlite3-1.0.6/ChangeLog [moved from pkgs/tdbcsqlite3-1.0.5/ChangeLog with 100% similarity]
pkgs/tdbcsqlite3-1.0.6/Makefile.in [moved from pkgs/tdbcsqlite3-1.0.5/Makefile.in with 97% similarity]
pkgs/tdbcsqlite3-1.0.6/README [moved from pkgs/tdbcsqlite3-1.0.5/README with 96% similarity]
pkgs/tdbcsqlite3-1.0.6/aclocal.m4 [moved from pkgs/tdbc1.0.5/aclocal.m4 with 100% similarity]
pkgs/tdbcsqlite3-1.0.6/configure [moved from pkgs/tdbcsqlite3-1.0.5/configure with 99% similarity]
pkgs/tdbcsqlite3-1.0.6/configure.ac [moved from pkgs/tdbcsqlite3-1.0.5/configure.ac with 92% similarity]
pkgs/tdbcsqlite3-1.0.6/doc/tdbc_sqlite3.n [moved from pkgs/tdbcsqlite3-1.0.5/doc/tdbc_sqlite3.n with 100% similarity]
pkgs/tdbcsqlite3-1.0.6/library/tdbcsqlite3.tcl [moved from pkgs/tdbcsqlite3-1.0.5/library/tdbcsqlite3.tcl with 99% similarity]
pkgs/tdbcsqlite3-1.0.6/license.terms [moved from pkgs/tdbcsqlite3-1.0.5/license.terms with 100% similarity]
pkgs/tdbcsqlite3-1.0.6/pkgIndex.tcl.in [moved from pkgs/tdbcsqlite3-1.0.5/pkgIndex.tcl.in with 100% similarity]
pkgs/tdbcsqlite3-1.0.6/tclconfig/install-sh [moved from pkgs/sqlite3.20.0/tclconfig/install-sh with 100% similarity]
pkgs/tdbcsqlite3-1.0.6/tclconfig/tcl.m4 [new file with mode: 0644]
pkgs/tdbcsqlite3-1.0.6/tests/all.tcl [moved from pkgs/tdbcsqlite3-1.0.5/tests/all.tcl with 100% similarity]
pkgs/tdbcsqlite3-1.0.6/tests/tdbcsqlite3.test [moved from pkgs/tdbcsqlite3-1.0.5/tests/tdbcsqlite3.test with 100% similarity]
pkgs/tdbcsqlite3-1.0.6/win/makefile.vc [new file with mode: 0644]
pkgs/tdbcsqlite3-1.0.6/win/nmakehlp.c [new file with mode: 0644]
pkgs/tdbcsqlite3-1.0.6/win/rules-ext.vc [new file with mode: 0644]
pkgs/tdbcsqlite3-1.0.6/win/rules.vc [new file with mode: 0644]
pkgs/tdbcsqlite3-1.0.6/win/targets.vc [new file with mode: 0644]
pkgs/thread2.8.1/win/makefile.vc [deleted file]
pkgs/thread2.8.1/win/rules.vc [deleted file]
pkgs/thread2.8.2/ChangeLog [moved from pkgs/thread2.8.1/ChangeLog with 100% similarity]
pkgs/thread2.8.2/Makefile.in [moved from pkgs/thread2.8.1/Makefile.in with 99% similarity]
pkgs/thread2.8.2/README [moved from pkgs/thread2.8.1/README with 100% similarity]
pkgs/thread2.8.2/aclocal.m4 [moved from pkgs/thread2.8.1/aclocal.m4 with 100% similarity]
pkgs/thread2.8.2/configure [moved from pkgs/thread2.8.1/configure with 99% similarity]
pkgs/thread2.8.2/configure.ac [moved from pkgs/thread2.8.1/configure.ac with 99% similarity]
pkgs/thread2.8.2/doc/format.tcl [moved from pkgs/thread2.8.1/doc/format.tcl with 100% similarity]
pkgs/thread2.8.2/doc/html/thread.html [moved from pkgs/thread2.8.1/doc/html/thread.html with 100% similarity]
pkgs/thread2.8.2/doc/html/tpool.html [moved from pkgs/thread2.8.1/doc/html/tpool.html with 100% similarity]
pkgs/thread2.8.2/doc/html/tsv.html [moved from pkgs/thread2.8.1/doc/html/tsv.html with 100% similarity]
pkgs/thread2.8.2/doc/html/ttrace.html [moved from pkgs/thread2.8.1/doc/html/ttrace.html with 99% similarity]
pkgs/thread2.8.2/doc/man.macros [moved from pkgs/thread2.8.1/doc/man.macros with 100% similarity]
pkgs/thread2.8.2/doc/man/thread.n [moved from pkgs/thread2.8.1/doc/man/thread.n with 100% similarity]
pkgs/thread2.8.2/doc/man/tpool.n [moved from pkgs/thread2.8.1/doc/man/tpool.n with 100% similarity]
pkgs/thread2.8.2/doc/man/tsv.n [moved from pkgs/thread2.8.1/doc/man/tsv.n with 100% similarity]
pkgs/thread2.8.2/doc/man/ttrace.n [moved from pkgs/thread2.8.1/doc/man/ttrace.n with 100% similarity]
pkgs/thread2.8.2/doc/thread.man [moved from pkgs/thread2.8.1/doc/thread.man with 100% similarity]
pkgs/thread2.8.2/doc/tpool.man [moved from pkgs/thread2.8.1/doc/tpool.man with 100% similarity]
pkgs/thread2.8.2/doc/tsv.man [moved from pkgs/thread2.8.1/doc/tsv.man with 100% similarity]
pkgs/thread2.8.2/doc/ttrace.man [moved from pkgs/thread2.8.1/doc/ttrace.man with 99% similarity]
pkgs/thread2.8.2/generic/psGdbm.c [moved from pkgs/thread2.8.1/generic/psGdbm.c with 100% similarity]
pkgs/thread2.8.2/generic/psGdbm.h [moved from pkgs/thread2.8.1/generic/psGdbm.h with 100% similarity]
pkgs/thread2.8.2/generic/psLmdb.c [moved from pkgs/thread2.8.1/generic/psLmdb.c with 100% similarity]
pkgs/thread2.8.2/generic/psLmdb.h [moved from pkgs/thread2.8.1/generic/psLmdb.h with 100% similarity]
pkgs/thread2.8.2/generic/tclThread.h [moved from pkgs/thread2.8.1/generic/tclThread.h with 100% similarity]
pkgs/thread2.8.2/generic/tclThreadInt.h [moved from pkgs/thread2.8.1/generic/tclThreadInt.h with 100% similarity]
pkgs/thread2.8.2/generic/tclXkeylist.c [moved from pkgs/thread2.8.1/generic/tclXkeylist.c with 99% similarity]
pkgs/thread2.8.2/generic/tclXkeylist.h [moved from pkgs/thread2.8.1/generic/tclXkeylist.h with 100% similarity]
pkgs/thread2.8.2/generic/threadCmd.c [moved from pkgs/thread2.8.1/generic/threadCmd.c with 99% similarity]
pkgs/thread2.8.2/generic/threadNs.c [moved from pkgs/thread2.8.1/generic/threadNs.c with 100% similarity]
pkgs/thread2.8.2/generic/threadPoolCmd.c [moved from pkgs/thread2.8.1/generic/threadPoolCmd.c with 100% similarity]
pkgs/thread2.8.2/generic/threadSpCmd.c [moved from pkgs/thread2.8.1/generic/threadSpCmd.c with 100% similarity]
pkgs/thread2.8.2/generic/threadSpCmd.h [moved from pkgs/thread2.8.1/generic/threadSpCmd.h with 100% similarity]
pkgs/thread2.8.2/generic/threadSvCmd.c [moved from pkgs/thread2.8.1/generic/threadSvCmd.c with 98% similarity]
pkgs/thread2.8.2/generic/threadSvCmd.h [moved from pkgs/thread2.8.1/generic/threadSvCmd.h with 100% similarity]
pkgs/thread2.8.2/generic/threadSvKeylistCmd.c [moved from pkgs/thread2.8.1/generic/threadSvKeylistCmd.c with 100% similarity]
pkgs/thread2.8.2/generic/threadSvKeylistCmd.h [moved from pkgs/thread2.8.1/generic/threadSvKeylistCmd.h with 100% similarity]
pkgs/thread2.8.2/generic/threadSvListCmd.c [moved from pkgs/thread2.8.1/generic/threadSvListCmd.c with 100% similarity]
pkgs/thread2.8.2/generic/threadSvListCmd.h [moved from pkgs/thread2.8.1/generic/threadSvListCmd.h with 100% similarity]
pkgs/thread2.8.2/lib/ttrace.tcl [moved from pkgs/thread2.8.1/lib/ttrace.tcl with 99% similarity]
pkgs/thread2.8.2/license.terms [moved from pkgs/thread2.8.1/license.terms with 100% similarity]
pkgs/thread2.8.2/naviserver.m4 [moved from pkgs/thread2.8.1/naviserver.m4 with 100% similarity]
pkgs/thread2.8.2/pkgIndex.tcl.in [moved from pkgs/thread2.8.1/pkgIndex.tcl.in with 100% similarity]
pkgs/thread2.8.2/tcl/README [moved from pkgs/thread2.8.1/tcl/README with 100% similarity]
pkgs/thread2.8.2/tcl/cmdsrv/cmdsrv.tcl [moved from pkgs/thread2.8.1/tcl/cmdsrv/cmdsrv.tcl with 100% similarity]
pkgs/thread2.8.2/tcl/phttpd/index.htm [moved from pkgs/thread2.8.1/tcl/phttpd/index.htm with 100% similarity]
pkgs/thread2.8.2/tcl/phttpd/phttpd.tcl [moved from pkgs/thread2.8.1/tcl/phttpd/phttpd.tcl with 100% similarity]
pkgs/thread2.8.2/tcl/phttpd/uhttpd.tcl [moved from pkgs/thread2.8.1/tcl/phttpd/uhttpd.tcl with 100% similarity]
pkgs/thread2.8.2/tcl/tpool/tpool.tcl [moved from pkgs/thread2.8.1/tcl/tpool/tpool.tcl with 100% similarity]
pkgs/thread2.8.2/tclconfig/install-sh [moved from pkgs/itcl4.1.0/tclconfig/install-sh with 100% similarity]
pkgs/thread2.8.2/tclconfig/tcl.m4 [new file with mode: 0644]
pkgs/thread2.8.2/tests/French.txt [moved from pkgs/thread2.8.1/tests/French.txt with 100% similarity]
pkgs/thread2.8.2/tests/all.tcl [moved from pkgs/thread2.8.1/tests/all.tcl with 100% similarity]
pkgs/thread2.8.2/tests/store-load.tcl [moved from pkgs/thread2.8.1/tests/store-load.tcl with 100% similarity]
pkgs/thread2.8.2/tests/thread.test [moved from pkgs/thread2.8.1/tests/thread.test with 100% similarity]
pkgs/thread2.8.2/tests/tkt-84be1b5a73.test [moved from pkgs/thread2.8.1/tests/tkt-84be1b5a73.test with 100% similarity]
pkgs/thread2.8.2/tests/tpool.test [moved from pkgs/thread2.8.1/tests/tpool.test with 100% similarity]
pkgs/thread2.8.2/tests/tsv.test [moved from pkgs/thread2.8.1/tests/tsv.test with 100% similarity]
pkgs/thread2.8.2/tests/ttrace.test [moved from pkgs/thread2.8.1/tests/ttrace.test with 100% similarity]
pkgs/thread2.8.2/unix/CONFIG [moved from pkgs/thread2.8.1/unix/CONFIG with 100% similarity]
pkgs/thread2.8.2/unix/README [moved from pkgs/thread2.8.1/unix/README with 100% similarity]
pkgs/thread2.8.2/unix/threadUnix.c [moved from pkgs/thread2.8.1/unix/threadUnix.c with 100% similarity]
pkgs/thread2.8.2/win/CONFIG [moved from pkgs/thread2.8.1/win/CONFIG with 100% similarity]
pkgs/thread2.8.2/win/README.txt [moved from pkgs/thread2.8.1/win/README.txt with 80% similarity]
pkgs/thread2.8.2/win/makefile.vc [new file with mode: 0644]
pkgs/thread2.8.2/win/nmakehlp.c [new file with mode: 0644]
pkgs/thread2.8.2/win/pkg.vc [moved from pkgs/thread2.8.1/win/pkg.vc with 78% similarity]
pkgs/thread2.8.2/win/rules-ext.vc [new file with mode: 0644]
pkgs/thread2.8.2/win/rules.vc [new file with mode: 0644]
pkgs/thread2.8.2/win/targets.vc [new file with mode: 0644]
pkgs/thread2.8.2/win/thread.rc [moved from pkgs/thread2.8.1/win/thread.rc with 59% similarity]
pkgs/thread2.8.2/win/threadWin.c [moved from pkgs/thread2.8.1/win/threadWin.c with 100% similarity]
pkgs/thread2.8.2/win/thread_win.dsp [moved from pkgs/thread2.8.1/win/thread_win.dsp with 100% similarity]
pkgs/thread2.8.2/win/thread_win.dsw [moved from pkgs/thread2.8.1/win/thread_win.dsw with 100% similarity]
tests/assemble.test
tests/basic.test
tests/clock.test
tests/cmdAH.test
tests/encoding.test
tests/exec.test
tests/execute.test
tests/fileSystem.test
tests/namespace.test
tests/oo.test
tests/package.test
tests/platform.test
tests/resolver.test
tests/scan.test
tests/set-old.test
tests/split.test
tests/string.test
tests/utf.test
unix/Makefile.in
unix/configure
unix/configure.in
unix/tcl.m4
unix/tcl.spec
unix/tclLoadDyld.c
unix/tclUnixPort.h
unix/tclUnixSock.c
win/Makefile.in
win/configure
win/configure.in
win/makefile.vc
win/nmakehlp.c
win/rules-ext.vc [new file with mode: 0644]
win/rules.vc
win/targets.vc [new file with mode: 0644]
win/tclWin32Dll.c
win/tclWinError.c
win/tclWinFile.c [changed mode: 0755->0644]
win/tclWinLoad.c
win/tclWinPipe.c

diff --git a/README b/README
index 57985d3..adfdf97 100644 (file)
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
 README:  Tcl
-    This is the Tcl 8.6.7 source distribution.
+    This is the Tcl 8.6.8 source distribution.
        http://sourceforge.net/projects/tcl/files/Tcl/
     You can get any source release of Tcl from the URL above.
 
diff --git a/changes b/changes
index f98eafc..040f360 100644 (file)
--- a/changes
+++ b/changes
@@ -8795,3 +8795,38 @@ improvements to regexp engine from Postgres (lane,porter,fellows,seltenreich)
 2017-07-17 (bug)[fb2208] Repeatable tclIndex generation (wiedemann,nijtmans)
 
 --- Released 8.6.7, August 9, 2017 --- http://core.tcl.tk/tcl/ for details
+
+2017-08-10 [array names -regexp] supports backrefs (goth)
+
+2017-08-10 Fix gcc build failures due to #pragma placement (cassoff,fellows)
+
+2017-08-29 (bug)[b50fb2] exec redir append stdout and stderr to file (coulter)
+
+2017-08-31 (bug)[2a9465] http state 100 continue handling broken (oehlmann)
+=> http 2.8.12
+
+2017-09-02 (bug)[0e4d88] replace command, delete trace kills namespace (porter)
+
+2017-10-19 (bug)[1a5655] [info * methods] includes mixins (fellows)
+
+2017-10-23 tzdata updated to Olson's tzdata2017c (jima)
+
+2017-10-24 (bug)[fc1409] segfault in method cloning, oo-15.15 (coulter,fellows)
+
+2017-11-03 (bug)[6f2f83] More robust [load] for ReactOS (werner)
+
+2017-11-08 (bug)[3298012] Stop crash when hash tables overflow 32 bits (porter)
+
+2017-11-14 (bug)[5d6de6] Close failing case of [package prefer stable] (kupries)
+
+2017-11-17 (bug)[fab924] Fix misleading [load] message on Windows (oehlmann)
+
+2017-12-05 (bug)[4f6a1e] Crash when ensemble map and list are same (sebres)
+
+2017-12-06 (bug)[ce3a21] file normalize failure when tail is empty (porter)
+
+2017-12-08 (new)[TIP 477] nmake build system reform (nadkarni)
+
+2017-12-19 (bug)[586e71] EvalObjv exception handling at level #0 (sebres,porter)
+
+--- Released 8.6.8, December 22, 2017 --- http://core.tcl.tk/tcl/ for details
index bf80fe2..eadd041 100644 (file)
@@ -257,7 +257,7 @@ The \fBincr\fR command first gets an integer from \fIx\fR's value
 by calling \fBTcl_GetIntFromObj\fR.
 This procedure checks whether the value is already an integer value.
 Since it is not, it converts the value
-by setting the value's \fIinternalRep.longValue\fR member
+by setting the value's internal representation
 to the integer \fB123\fR
 and setting the value's \fItypePtr\fR
 to point to the integer Tcl_ObjType structure.
index b2270a2..6dd6cb6 100644 (file)
@@ -54,9 +54,9 @@ is called, Tcl will take care of memory management.
 .PP
 The second triplet stores the snapshot of only the interpreter
 result (not its complete state) in memory allocated by the caller.
-These routines are passed a pointer to a \fBTcl_SavedResult\fR structure
+These routines are passed a pointer to \fBTcl_SavedResult\fR
 that is used to store enough information to restore the interpreter result.
-This structure can be allocated on the stack of the calling
+\fBTcl_SavedResult\fR can be allocated on the stack of the calling
 procedure.  These routines do not save the state of any error
 information in the interpreter (e.g. the \fB\-errorcode\fR or
 \fB\-errorinfo\fR return options, when an error is in progress).
index b933e9c..be614e7 100644 (file)
@@ -33,7 +33,7 @@ int
 .SH ARGUMENTS
 .AS char *str in/out
 .AP int ch in
-The Tcl_UniChar to be converted.
+The Unicode character to be converted.
 .AP char *str in/out
 Pointer to UTF-8 string to be converted in place.
 .BE
index 2336c34..5ba3fc9 100644 (file)
@@ -53,14 +53,11 @@ The Tcl_UniChar to be examined.
 
 .SH DESCRIPTION
 .PP
-All of the routines described examine Tcl_UniChars and return a
+All of the routines described examine Unicode characters and return a
 boolean value. A non-zero return value means that the character does
 belong to the character class associated with the called routine. The
 rest of this document just describes the character classes associated
 with the various routines.
-.PP
-Note: A Tcl_UniChar is a Unicode character represented as an unsigned,
-fixed-size quantity.
 
 .SH "CHARACTER CLASSES"
 .PP
index 378c806..9d0c617 100644 (file)
--- a/doc/Utf.3
+++ b/doc/Utf.3
@@ -77,7 +77,7 @@ int
 Buffer in which the UTF-8 representation of the Tcl_UniChar is stored.  At most
 \fBTCL_UTF_MAX\fR bytes are stored in the buffer.
 .AP int ch in
-The Tcl_UniChar to be converted or examined.
+The Unicode character to be converted or examined.
 .AP Tcl_UniChar *chPtr out
 Filled with the Tcl_UniChar represented by the head of the UTF-8 string.
 .AP "const char" *src in
index 574b49b..db1f892 100644 (file)
@@ -469,7 +469,6 @@ declare 128 {
 declare 129 {
     int Tcl_Eval(Tcl_Interp *interp, const char *script)
 }
-# This is obsolete, use Tcl_FSEvalFile
 declare 130 {
     int Tcl_EvalFile(Tcl_Interp *interp, const char *fileName)
 }
index a35dd5d..b43b2d7 100644 (file)
@@ -55,10 +55,10 @@ extern "C" {
 #define TCL_MAJOR_VERSION   8
 #define TCL_MINOR_VERSION   6
 #define TCL_RELEASE_LEVEL   TCL_FINAL_RELEASE
-#define TCL_RELEASE_SERIAL  7
+#define TCL_RELEASE_SERIAL  8
 
 #define TCL_VERSION        "8.6"
-#define TCL_PATCH_LEVEL            "8.6.7"
+#define TCL_PATCH_LEVEL            "8.6.8"
 \f
 /*
  *----------------------------------------------------------------------------
index 14d67f6..ddc828a 100644 (file)
@@ -2042,11 +2042,11 @@ Tcl_CreateCommand(
 {
     Interp *iPtr = (Interp *) interp;
     ImportRef *oldRefPtr = NULL;
-    Namespace *nsPtr, *dummy1, *dummy2;
-    Command *cmdPtr, *refCmdPtr;
+    Namespace *nsPtr;
+    Command *cmdPtr;
     Tcl_HashEntry *hPtr;
     const char *tail;
-    int isNew;
+    int isNew = 0, deleted = 0;
     ImportedCmdData *dataPtr;
 
     if (iPtr->flags & DELETED) {
@@ -2059,32 +2059,52 @@ Tcl_CreateCommand(
     }
 
     /*
-     * Determine where the command should reside. If its name contains
-     * namespace qualifiers, we put it in the specified namespace; otherwise,
-     * we always put it in the global namespace.
+     * If the command name we seek to create already exists, we need to
+     * delete that first.  That can be tricky in the presence of traces.
+     * Loop until we no longer find an existing command in the way, or
+     * until we've deleted one command and that didn't finish the job.
      */
 
-    if (strstr(cmdName, "::") != NULL) {
-       TclGetNamespaceForQualName(interp, cmdName, NULL,
-               TCL_CREATE_NS_IF_UNKNOWN, &nsPtr, &dummy1, &dummy2, &tail);
-       if ((nsPtr == NULL) || (tail == NULL)) {
-           return (Tcl_Command) NULL;
-       }
-    } else {
-       nsPtr = iPtr->globalNsPtr;
-       tail = cmdName;
-    }
+    while (1) {
+        /*
+         * Determine where the command should reside. If its name contains
+         * namespace qualifiers, we put it in the specified namespace;
+        * otherwise, we always put it in the global namespace.
+         */
+
+        if (strstr(cmdName, "::") != NULL) {
+           Namespace *dummy1, *dummy2;
+
+           TclGetNamespaceForQualName(interp, cmdName, NULL,
+                   TCL_CREATE_NS_IF_UNKNOWN, &nsPtr, &dummy1, &dummy2, &tail);
+           if ((nsPtr == NULL) || (tail == NULL)) {
+               return (Tcl_Command) NULL;
+           }
+        } else {
+           nsPtr = iPtr->globalNsPtr;
+           tail = cmdName;
+        }
+
+        hPtr = Tcl_CreateHashEntry(&nsPtr->cmdTable, tail, &isNew);
+
+        if (isNew || deleted) {
+           /*
+            * isNew - No conflict with existing command.
+            * deleted - We've already deleted a conflicting command
+            */
+           break;
+        }
+
+       /* An existing command conflicts. Try to delete it.. */
+       cmdPtr = Tcl_GetHashValue(hPtr);
 
-    hPtr = Tcl_CreateHashEntry(&nsPtr->cmdTable, tail, &isNew);
-    if (!isNew) {
        /*
-        * Command already exists. Delete the old one. Be careful to preserve
+        * Be careful to preserve
         * any existing import links so we can restore them down below. That
         * way, you can redefine a command and its import status will remain
         * intact.
         */
 
-       cmdPtr = Tcl_GetHashValue(hPtr);
        cmdPtr->refCount++;
        if (cmdPtr->importRefPtr) {
            cmdPtr->flags |= CMD_REDEF_IN_PROGRESS;
@@ -2097,18 +2117,21 @@ Tcl_CreateCommand(
            cmdPtr->importRefPtr = NULL;
        }
        TclCleanupCommandMacro(cmdPtr);
+       deleted = 1;
+    }
 
-       hPtr = Tcl_CreateHashEntry(&nsPtr->cmdTable, tail, &isNew);
-       if (!isNew) {
-           /*
-            * If the deletion callback recreated the command, just throw away
-            * the new command (if we try to delete it again, we could get
-            * stuck in an infinite loop).
-            */
+    if (!isNew) {
+       /*
+        * If the deletion callback recreated the command, just throw away
+        * the new command (if we try to delete it again, we could get
+        * stuck in an infinite loop).
+        */
+
+       ckfree(Tcl_GetHashValue(hPtr));
+    }
+
+    if (!deleted) {
 
-           ckfree(Tcl_GetHashValue(hPtr));
-       }
-    } else {
        /*
         * Command resolvers (per-interp, per-namespace) might have resolved
         * to a command for the given namespace scope with this command not
@@ -2156,7 +2179,7 @@ Tcl_CreateCommand(
     if (oldRefPtr != NULL) {
        cmdPtr->importRefPtr = oldRefPtr;
        while (oldRefPtr != NULL) {
-           refCmdPtr = oldRefPtr->importedCmdPtr;
+           Command *refCmdPtr = oldRefPtr->importedCmdPtr;
            dataPtr = refCmdPtr->objClientData;
            dataPtr->realCmdPtr = cmdPtr;
            oldRefPtr = oldRefPtr->nextPtr;
@@ -2217,11 +2240,11 @@ Tcl_CreateObjCommand(
 {
     Interp *iPtr = (Interp *) interp;
     ImportRef *oldRefPtr = NULL;
-    Namespace *nsPtr, *dummy1, *dummy2;
-    Command *cmdPtr, *refCmdPtr;
+    Namespace *nsPtr;
+    Command *cmdPtr;
     Tcl_HashEntry *hPtr;
     const char *tail;
-    int isNew;
+    int isNew = 0, deleted = 0;
     ImportedCmdData *dataPtr;
 
     if (iPtr->flags & DELETED) {
@@ -2234,28 +2257,44 @@ Tcl_CreateObjCommand(
     }
 
     /*
-     * Determine where the command should reside. If its name contains
-     * namespace qualifiers, we put it in the specified namespace; otherwise,
-     * we always put it in the global namespace.
+     * If the command name we seek to create already exists, we need to
+     * delete that first.  That can be tricky in the presence of traces.
+     * Loop until we no longer find an existing command in the way, or
+     * until we've deleted one command and that didn't finish the job.
      */
 
-    if (strstr(cmdName, "::") != NULL) {
-       TclGetNamespaceForQualName(interp, cmdName, NULL,
+    while (1) {
+        /*
+         * Determine where the command should reside. If its name contains
+         * namespace qualifiers, we put it in the specified namespace;
+        * otherwise, we always put it in the global namespace.
+         */
+
+        if (strstr(cmdName, "::") != NULL) {
+           Namespace *dummy1, *dummy2;
+
+           TclGetNamespaceForQualName(interp, cmdName, NULL,
                TCL_CREATE_NS_IF_UNKNOWN, &nsPtr, &dummy1, &dummy2, &tail);
-       if ((nsPtr == NULL) || (tail == NULL)) {
-           return (Tcl_Command) NULL;
-       }
-    } else {
-       nsPtr = iPtr->globalNsPtr;
-       tail = cmdName;
-    }
+           if ((nsPtr == NULL) || (tail == NULL)) {
+               return (Tcl_Command) NULL;
+           }
+        } else {
+           nsPtr = iPtr->globalNsPtr;
+           tail = cmdName;
+        }
 
-    hPtr = Tcl_CreateHashEntry(&nsPtr->cmdTable, tail, &isNew);
-    TclInvalidateNsPath(nsPtr);
-    if (!isNew) {
-       cmdPtr = Tcl_GetHashValue(hPtr);
+        hPtr = Tcl_CreateHashEntry(&nsPtr->cmdTable, tail, &isNew);
 
-       /* Command already exists. */
+        if (isNew || deleted) {
+           /*
+            * isNew - No conflict with existing command.
+            * deleted - We've already deleted a conflicting command
+            */
+           break;
+        }
+
+       /* An existing command conflicts. Try to delete it.. */
+       cmdPtr = Tcl_GetHashValue(hPtr);
 
        /*
         * [***] This is wrong.  See Tcl Bug a16752c252.
@@ -2293,18 +2332,20 @@ Tcl_CreateObjCommand(
            cmdPtr->importRefPtr = NULL;
        }
        TclCleanupCommandMacro(cmdPtr);
+       deleted = 1;
+    }
 
-       hPtr = Tcl_CreateHashEntry(&nsPtr->cmdTable, tail, &isNew);
-       if (!isNew) {
-           /*
-            * If the deletion callback recreated the command, just throw away
-            * the new command (if we try to delete it again, we could get
-            * stuck in an infinite loop).
-            */
+    if (!isNew) {
+       /*
+        * If the deletion callback recreated the command, just throw away
+        * the new command (if we try to delete it again, we could get
+        * stuck in an infinite loop).
+        */
 
-           ckfree(Tcl_GetHashValue(hPtr));
-       }
-    } else {
+       ckfree(Tcl_GetHashValue(hPtr));
+    }
+
+    if (!deleted) {
        /*
         * Command resolvers (per-interp, per-namespace) might have resolved
         * to a command for the given namespace scope with this command not
@@ -2324,6 +2365,7 @@ Tcl_CreateObjCommand(
         */
 
        TclInvalidateNsCmdLookup(nsPtr);
+       TclInvalidateNsPath(nsPtr);
     }
     cmdPtr = ckalloc(sizeof(Command));
     Tcl_SetHashValue(hPtr, cmdPtr);
@@ -2351,7 +2393,7 @@ Tcl_CreateObjCommand(
     if (oldRefPtr != NULL) {
        cmdPtr->importRefPtr = oldRefPtr;
        while (oldRefPtr != NULL) {
-           refCmdPtr = oldRefPtr->importedCmdPtr;
+           Command *refCmdPtr = oldRefPtr->importedCmdPtr;
            dataPtr = refCmdPtr->objClientData;
            dataPtr->realCmdPtr = cmdPtr;
            oldRefPtr = oldRefPtr->nextPtr;
@@ -3070,6 +3112,7 @@ Tcl_DeleteCommandFromToken(
      * traces.
      */
 
+    cmdPtr->nsPtr->refCount++;
     if (cmdPtr->tracePtr != NULL) {
        CommandTrace *tracePtr;
        CallCommandTraces(iPtr,cmdPtr,NULL,NULL,TCL_TRACE_DELETE);
@@ -3097,6 +3140,7 @@ Tcl_DeleteCommandFromToken(
      */
 
     TclInvalidateNsCmdLookup(cmdPtr->nsPtr);
+    TclNsDecrRefCount(cmdPtr->nsPtr);
 
     /*
      * If the command being deleted has a compile function, increment the
@@ -4517,7 +4561,7 @@ TEOV_Exception(
        if (result == TCL_RETURN) {
            result = TclUpdateReturnInfo(iPtr);
        }
-       if ((result != TCL_ERROR) && !allowExceptions) {
+       if ((result != TCL_OK) && (result != TCL_ERROR) && !allowExceptions) {
            ProcessUnexpectedResult(interp, result);
            result = TCL_ERROR;
        }
index d0d9d5e..bb918f2 100644 (file)
@@ -454,7 +454,7 @@ SetByteArrayFromAny(
     const char *src, *srcEnd;
     unsigned char *dst;
     ByteArray *byteArrayPtr;
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
 
     if (objPtr->typePtr != &tclByteArrayType) {
        src = TclGetStringFromObj(objPtr, &length);
@@ -1210,7 +1210,7 @@ BinaryFormatCmd(
 
  badField:
     {
-       Tcl_UniChar ch;
+       Tcl_UniChar ch = 0;
        char buf[TCL_UTF_MAX + 1];
 
        TclUtfToUniChar(errorString, &ch);
@@ -1580,7 +1580,7 @@ BinaryScanCmd(
 
  badField:
     {
-       Tcl_UniChar ch;
+       Tcl_UniChar ch = 0;
        char buf[TCL_UTF_MAX + 1];
 
        TclUtfToUniChar(errorString, &ch);
index ba9e1cf..e3c5f10 100644 (file)
@@ -4345,7 +4345,7 @@ static int
 DictionaryCompare(
     const char *left, const char *right)       /* The strings to compare. */
 {
-    Tcl_UniChar uniLeft, uniRight, uniLeftLower, uniRightLower;
+    Tcl_UniChar uniLeft = 0, uniRight = 0, uniLeftLower, uniRightLower;
     int diff, zeros;
     int secondaryDiff = 0;
 
index 3f79ca4..d63a985 100644 (file)
@@ -309,7 +309,7 @@ Tcl_RegexpObjCmd(
            eflags = 0;
        } else if (offset > stringLength) {
            eflags = TCL_REG_NOTBOL;
-       } else if (Tcl_GetUniChar(objPtr, offset-1) == (Tcl_UniChar)'\n') {
+       } else if (Tcl_GetUniChar(objPtr, offset-1) == '\n') {
            eflags = 0;
        } else {
            eflags = TCL_REG_NOTBOL;
@@ -1037,7 +1037,7 @@ Tcl_SplitObjCmd(
     int objc,                  /* Number of arguments. */
     Tcl_Obj *const objv[])     /* Argument objects. */
 {
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
     int len;
     const char *splitChars;
     const char *stringPtr;
@@ -1080,13 +1080,22 @@ Tcl_SplitObjCmd(
        Tcl_InitHashTable(&charReuseTable, TCL_ONE_WORD_KEYS);
 
        for ( ; stringPtr < end; stringPtr += len) {
+               int fullchar;
            len = TclUtfToUniChar(stringPtr, &ch);
+           fullchar = ch;
+
+#if TCL_UTF_MAX == 4
+           if (!len) {
+               len += TclUtfToUniChar(stringPtr, &ch);
+               fullchar = (((fullchar & 0x3ff) << 10) | (ch & 0x3ff)) + 0x10000;
+           }
+#endif
 
            /*
             * Assume Tcl_UniChar is an integral type...
             */
 
-           hPtr = Tcl_CreateHashEntry(&charReuseTable, INT2PTR((int) ch),
+           hPtr = Tcl_CreateHashEntry(&charReuseTable, INT2PTR(fullchar),
                    &isNew);
            if (isNew) {
                TclNewStringObj(objPtr, stringPtr, len);
@@ -1122,7 +1131,7 @@ Tcl_SplitObjCmd(
     } else {
        const char *element, *p, *splitEnd;
        int splitLen;
-       Tcl_UniChar splitChar;
+       Tcl_UniChar splitChar = 0;
 
        /*
         * Normal case: split on any of a given set of characters. Discard
@@ -1451,7 +1460,7 @@ StringIsCmd(
     Tcl_Obj *const objv[])     /* Argument objects. */
 {
     const char *string1, *end, *stop;
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
     int (*chcomp)(int) = NULL; /* The UniChar comparison function. */
     int i, failat = 0, result = 1, strict = 0, index, length1, length2;
     Tcl_Obj *objPtr, *failVarObj = NULL;
@@ -1783,8 +1792,16 @@ StringIsCmd(
        }
        end = string1 + length1;
        for (; string1 < end; string1 += length2, failat++) {
+           int fullchar;
            length2 = TclUtfToUniChar(string1, &ch);
-           if (!chcomp(ch)) {
+           fullchar = ch;
+#if TCL_UTF_MAX == 4
+           if (!length2) {
+               length2 = TclUtfToUniChar(string1, &ch);
+               fullchar = (((fullchar & 0x3ff) << 10) | (ch & 0x3ff)) + 0x10000;
+           }
+#endif
+           if (!chcomp(fullchar)) {
                result = 0;
                break;
            }
@@ -2436,7 +2453,7 @@ StringStartCmd(
     int objc,                  /* Number of arguments. */
     Tcl_Obj *const objv[])     /* Argument objects. */
 {
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
     const char *p, *string;
     int cur, index, length, numChars;
 
@@ -2497,7 +2514,7 @@ StringEndCmd(
     int objc,                  /* Number of arguments. */
     Tcl_Obj *const objv[])     /* Argument objects. */
 {
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
     const char *p, *end, *string;
     int cur, index, length, numChars;
 
index 59eecf9..9c7ab8d 100644 (file)
@@ -1885,7 +1885,7 @@ ParseLexeme(
 {
     const char *end;
     int scanned;
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
     Tcl_Obj *literal = NULL;
     unsigned char byte;
 
index d15255f..2eff1ff 100644 (file)
@@ -487,15 +487,14 @@ static void
 UpdateStringOfDict(
     Tcl_Obj *dictPtr)
 {
-#define LOCAL_SIZE 20
-    int localFlags[LOCAL_SIZE], *flagPtr = NULL;
+#define LOCAL_SIZE 64
+    char localFlags[LOCAL_SIZE], *flagPtr = NULL;
     Dict *dict = DICT(dictPtr);
     ChainEntry *cPtr;
     Tcl_Obj *keyPtr, *valuePtr;
     int i, length, bytesNeeded = 0;
     const char *elem;
     char *dst;
-    const int maxFlags = UINT_MAX / sizeof(int);
 
     /*
      * This field is the most useful one in the whole hash structure, and it
@@ -517,10 +516,8 @@ UpdateStringOfDict(
 
     if (numElems <= LOCAL_SIZE) {
        flagPtr = localFlags;
-    } else if (numElems > maxFlags) {
-       Tcl_Panic("max size for a Tcl value (%d bytes) exceeded", INT_MAX);
     } else {
-       flagPtr = ckalloc(numElems * sizeof(int));
+       flagPtr = ckalloc(numElems);
     }
     for (i=0,cPtr=dict->entryChainHead; i<numElems; i+=2,cPtr=cPtr->nextPtr) {
        /*
index b4acb5f..2548b73 100644 (file)
@@ -2296,7 +2296,7 @@ UtfToUtfProc(
     const char *srcStart, *srcEnd, *srcClose;
     const char *dstStart, *dstEnd;
     int result, numChars, charLimit = INT_MAX;
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
 
     result = TCL_OK;
 
@@ -2329,7 +2329,7 @@ UtfToUtfProc(
        }
        if (UCHAR(*src) < 0x80 && !(UCHAR(*src) == 0 && pureNullMode == 0)) {
            /*
-            * Copy 7bit chatacters, but skip null-bytes when we are in input
+            * Copy 7bit characters, but skip null-bytes when we are in input
             * mode, so that they get converted to 0xc080.
             */
 
@@ -2345,8 +2345,8 @@ UtfToUtfProc(
        } else if (!Tcl_UtfCharComplete(src, srcEnd - src)) {
            /*
             * Always check before using TclUtfToUniChar. Not doing can so
-            * cause it run beyond the endof the buffer! If we happen such an
-            * incomplete char its byts are made to represent themselves.
+            * cause it run beyond the end of the buffer! If we happen such an
+            * incomplete char its bytes are made to represent themselves.
             */
 
            ch = (unsigned char) *src;
@@ -2410,7 +2410,7 @@ UnicodeToUtfProc(
     const char *srcStart, *srcEnd;
     const char *dstEnd, *dstStart;
     int result, numChars, charLimit = INT_MAX;
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
 
     if (flags & TCL_ENCODING_CHAR_LIMIT) {
        charLimit = *dstCharsPtr;
@@ -2500,7 +2500,7 @@ UtfToUnicodeProc(
 {
     const char *srcStart, *srcEnd, *srcClose, *dstStart, *dstEnd;
     int result, numChars;
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
 
     srcStart = src;
     srcEnd = src + srcLen;
@@ -2610,7 +2610,7 @@ TableToUtfProc(
     const char *srcStart, *srcEnd;
     const char *dstEnd, *dstStart, *prefixBytes;
     int result, byte, numChars, charLimit = INT_MAX;
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
     const unsigned short *const *toUnicode;
     const unsigned short *pageZero;
     TableEncodingData *dataPtr = clientData;
@@ -2722,7 +2722,7 @@ TableFromUtfProc(
 {
     const char *srcStart, *srcEnd, *srcClose;
     const char *dstStart, *dstEnd, *prefixBytes;
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
     int result, len, word, numChars;
     TableEncodingData *dataPtr = clientData;
     const unsigned short *const *fromUnicode;
@@ -2856,7 +2856,7 @@ Iso88591ToUtfProc(
 
     result = TCL_OK;
     for (numChars = 0; src < srcEnd && numChars <= charLimit; numChars++) {
-       Tcl_UniChar ch;
+       Tcl_UniChar ch = 0;
 
        if (dst > dstEnd) {
            result = TCL_CONVERT_NOSPACE;
@@ -2942,7 +2942,7 @@ Iso88591FromUtfProc(
     dstEnd = dst + dstLen - 1;
 
     for (numChars = 0; src < srcEnd; numChars++) {
-       Tcl_UniChar ch;
+       Tcl_UniChar ch = 0;
        int len;
 
        if ((src > srcClose) && (!Tcl_UtfCharComplete(src, srcEnd - src))) {
@@ -3329,7 +3329,7 @@ EscapeFromUtfProc(
     for (numChars = 0; src < srcEnd; numChars++) {
        unsigned len;
        int word;
-       Tcl_UniChar ch;
+       Tcl_UniChar ch = 0;
 
        if ((src > srcClose) && (!Tcl_UtfCharComplete(src, srcEnd - src))) {
            /*
@@ -3374,7 +3374,7 @@ EscapeFromUtfProc(
 
            /*
             * The state variable has the value of oldState when word is 0.
-            * In this case, the escape sequense should not be copied to dst
+            * In this case, the escape sequence should not be copied to dst
             * because the current character set is not changed.
             */
 
index c1b0890..b79eaa3 100644 (file)
@@ -2399,13 +2399,31 @@ MakeCachedEnsembleCommand(
  */
 
 static void
+ClearTable(
+    EnsembleConfig *ensemblePtr)
+{
+    Tcl_HashTable *hash = &ensemblePtr->subcommandTable;
+
+    if (hash->numEntries != 0) {
+        Tcl_HashSearch search;
+        Tcl_HashEntry *hPtr = Tcl_FirstHashEntry(hash, &search);
+
+        while (hPtr != NULL) {
+            Tcl_Obj *prefixObj = Tcl_GetHashValue(hPtr);
+            Tcl_DecrRefCount(prefixObj);
+            hPtr = Tcl_NextHashEntry(&search);
+        }
+        ckfree((char *) ensemblePtr->subcommandArrayPtr);
+    }
+    Tcl_DeleteHashTable(hash);
+}
+
+static void
 DeleteEnsembleConfig(
     ClientData clientData)
 {
     EnsembleConfig *ensemblePtr = clientData;
     Namespace *nsPtr = ensemblePtr->nsPtr;
-    Tcl_HashSearch search;
-    Tcl_HashEntry *hEnt;
 
     /*
      * Unlink from the ensemble chain if it has not been marked as having been
@@ -2439,17 +2457,7 @@ DeleteEnsembleConfig(
      * Kill the pointer-containing fields.
      */
 
-    if (ensemblePtr->subcommandTable.numEntries != 0) {
-       ckfree(ensemblePtr->subcommandArrayPtr);
-    }
-    hEnt = Tcl_FirstHashEntry(&ensemblePtr->subcommandTable, &search);
-    while (hEnt != NULL) {
-       Tcl_Obj *prefixObj = Tcl_GetHashValue(hEnt);
-
-       Tcl_DecrRefCount(prefixObj);
-       hEnt = Tcl_NextHashEntry(&search);
-    }
-    Tcl_DeleteHashTable(&ensemblePtr->subcommandTable);
+    ClearTable(ensemblePtr);
     if (ensemblePtr->subcmdList != NULL) {
        Tcl_DecrRefCount(ensemblePtr->subcmdList);
     }
@@ -2505,148 +2513,159 @@ BuildEnsembleConfig(
     int i, j, isNew;
     Tcl_HashTable *hash = &ensemblePtr->subcommandTable;
     Tcl_HashEntry *hPtr;
-
-    if (hash->numEntries != 0) {
-       /*
-        * Remove pre-existing table.
-        */
-
-       ckfree(ensemblePtr->subcommandArrayPtr);
-       hPtr = Tcl_FirstHashEntry(hash, &search);
-       while (hPtr != NULL) {
-           Tcl_Obj *prefixObj = Tcl_GetHashValue(hPtr);
-
-           Tcl_DecrRefCount(prefixObj);
-           hPtr = Tcl_NextHashEntry(&search);
-       }
-       Tcl_DeleteHashTable(hash);
-       Tcl_InitHashTable(hash, TCL_STRING_KEYS);
-    }
-
-    /*
-     * See if we've got an export list. If so, we will only export exactly
-     * those commands, which may be either implemented by the prefix in the
-     * subcommandDict or mapped directly onto the namespace's commands.
-     */
-
-    if (ensemblePtr->subcmdList != NULL) {
-       Tcl_Obj **subcmdv, *target, *cmdObj, *cmdPrefixObj;
-       int subcmdc;
-
-       TclListObjGetElements(NULL, ensemblePtr->subcmdList, &subcmdc,
-               &subcmdv);
-       for (i=0 ; i<subcmdc ; i++) {
-           const char *name = TclGetString(subcmdv[i]);
-
-           hPtr = Tcl_CreateHashEntry(hash, name, &isNew);
-
-           /*
-            * Skip non-unique cases.
-            */
-
-           if (!isNew) {
-               continue;
-           }
-
-           /*
-            * Look in our dictionary (if present) for the command.
-            */
-
-           if (ensemblePtr->subcommandDict != NULL) {
-               Tcl_DictObjGet(NULL, ensemblePtr->subcommandDict, subcmdv[i],
-                       &target);
-               if (target != NULL) {
-                   Tcl_SetHashValue(hPtr, target);
-                   Tcl_IncrRefCount(target);
-                   continue;
-               }
-           }
-
-           /*
-            * Not there, so map onto the namespace. Note in this case that we
-            * do not guarantee that the command is actually there; that is
-            * the programmer's responsibility (or [::unknown] of course).
-            */
-
-           cmdObj = NewNsObj((Tcl_Namespace *) ensemblePtr->nsPtr);
-           if (ensemblePtr->nsPtr->parentPtr != NULL) {
-               Tcl_AppendStringsToObj(cmdObj, "::", name, NULL);
-           } else {
-               Tcl_AppendStringsToObj(cmdObj, name, NULL);
-           }
-           cmdPrefixObj = Tcl_NewListObj(1, &cmdObj);
-           Tcl_SetHashValue(hPtr, cmdPrefixObj);
-           Tcl_IncrRefCount(cmdPrefixObj);
-       }
-    } else if (ensemblePtr->subcommandDict != NULL) {
-       /*
-        * No subcmd list, but we do have a mapping dictionary so we should
-        * use the keys of that. Convert the dictionary's contents into the
-        * form required for the ensemble's internal hashtable.
-        */
-
-       Tcl_DictSearch dictSearch;
-       Tcl_Obj *keyObj, *valueObj;
-       int done;
-
-       Tcl_DictObjFirst(NULL, ensemblePtr->subcommandDict, &dictSearch,
-               &keyObj, &valueObj, &done);
-       while (!done) {
-           const char *name = TclGetString(keyObj);
-
-           hPtr = Tcl_CreateHashEntry(hash, name, &isNew);
-           Tcl_SetHashValue(hPtr, valueObj);
-           Tcl_IncrRefCount(valueObj);
-           Tcl_DictObjNext(&dictSearch, &keyObj, &valueObj, &done);
-       }
+    Tcl_Obj *mapDict = ensemblePtr->subcommandDict;
+    Tcl_Obj *subList = ensemblePtr->subcmdList;
+
+    ClearTable(ensemblePtr);
+    Tcl_InitHashTable(hash, TCL_STRING_KEYS);
+
+    if (subList) {
+        int subc;
+        Tcl_Obj **subv, *target, *cmdObj, *cmdPrefixObj;
+        char *name;
+
+        /*
+         * There is a list of exactly what subcommands go in the table.
+         * Must determine the target for each.
+         */
+
+        Tcl_ListObjGetElements(NULL, subList, &subc, &subv);
+        if (subList == mapDict) {
+            /*
+             * Strange case where explicit list of subcommands is same value
+             * as the dict mapping to targets.
+             */
+
+            for (i = 0; i < subc; i += 2) {
+                name = TclGetString(subv[i]);
+                hPtr = Tcl_CreateHashEntry(hash, name, &isNew);
+                if (!isNew) {
+                    cmdObj = (Tcl_Obj *)Tcl_GetHashValue(hPtr);
+                    Tcl_DecrRefCount(cmdObj);
+                }
+                Tcl_SetHashValue(hPtr, subv[i+1]);
+                Tcl_IncrRefCount(subv[i+1]);
+
+                name = TclGetString(subv[i+1]);
+                hPtr = Tcl_CreateHashEntry(hash, name, &isNew);
+                if (isNew) {
+                    cmdObj = Tcl_NewStringObj(ensemblePtr->nsPtr->fullName, -1);
+                    if (ensemblePtr->nsPtr->parentPtr != NULL) {
+                        Tcl_AppendStringsToObj(cmdObj, "::", name, NULL);
+                    } else {
+                        Tcl_AppendStringsToObj(cmdObj, name, NULL);
+                    }
+                    cmdPrefixObj = Tcl_NewListObj(1, &cmdObj);
+                    Tcl_SetHashValue(hPtr, cmdPrefixObj);
+                    Tcl_IncrRefCount(cmdPrefixObj);
+                }
+            }
+        } else {
+            /* Usual case where we can freely act on the list and dict. */
+
+            for (i = 0; i < subc; i++) {
+                name = TclGetString(subv[i]);
+                hPtr = Tcl_CreateHashEntry(hash, name, &isNew);
+                if (!isNew) {
+                    continue;
+                }
+
+                /* Lookup target in the dictionary */
+                if (mapDict) {
+                    Tcl_DictObjGet(NULL, mapDict, subv[i], &target);
+                    if (target) {
+                        Tcl_SetHashValue(hPtr, target);
+                        Tcl_IncrRefCount(target);
+                        continue;
+                    }
+                }
+
+                /*
+                 * target was not in the dictionary so map onto the namespace.
+                 * Note in this case that we do not guarantee that the
+                 * command is actually there; that is the programmer's
+                 * responsibility (or [::unknown] of course).
+                 */
+                cmdObj = Tcl_NewStringObj(ensemblePtr->nsPtr->fullName, -1);
+                if (ensemblePtr->nsPtr->parentPtr != NULL) {
+                    Tcl_AppendStringsToObj(cmdObj, "::", name, NULL);
+                } else {
+                    Tcl_AppendStringsToObj(cmdObj, name, NULL);
+                }
+                cmdPrefixObj = Tcl_NewListObj(1, &cmdObj);
+                Tcl_SetHashValue(hPtr, cmdPrefixObj);
+                Tcl_IncrRefCount(cmdPrefixObj);
+            }
+        }
+    } else if (mapDict) {
+        /*
+         * No subcmd list, but we do have a mapping dictionary so we should
+         * use the keys of that. Convert the dictionary's contents into the
+         * form required for the ensemble's internal hashtable.
+         */
+
+        Tcl_DictSearch dictSearch;
+        Tcl_Obj *keyObj, *valueObj;
+        int done;
+
+        Tcl_DictObjFirst(NULL, ensemblePtr->subcommandDict, &dictSearch,
+                &keyObj, &valueObj, &done);
+        while (!done) {
+            char *name = TclGetString(keyObj);
+
+            hPtr = Tcl_CreateHashEntry(hash, name, &isNew);
+            Tcl_SetHashValue(hPtr, valueObj);
+            Tcl_IncrRefCount(valueObj);
+            Tcl_DictObjNext(&dictSearch, &keyObj, &valueObj, &done);
+        }
     } else {
-       /*
-        * Discover what commands are actually exported by the namespace.
-        * What we have is an array of patterns and a hash table whose keys
-        * are the command names exported by the namespace (the contents do
-        * not matter here.) We must find out what commands are actually
-        * exported by filtering each command in the namespace against each of
-        * the patterns in the export list. Note that we use an intermediate
-        * hash table to make memory management easier, and because that makes
-        * exact matching far easier too.
-        *
-        * Suggestion for future enhancement: compute the unique prefixes and
-        * place them in the hash too, which should make for even faster
-        * matching.
-        */
-
-       hPtr = Tcl_FirstHashEntry(&ensemblePtr->nsPtr->cmdTable, &search);
-       for (; hPtr!= NULL ; hPtr=Tcl_NextHashEntry(&search)) {
-           char *nsCmdName =           /* Name of command in namespace. */
-                   Tcl_GetHashKey(&ensemblePtr->nsPtr->cmdTable, hPtr);
-
-           for (i=0 ; i<ensemblePtr->nsPtr->numExportPatterns ; i++) {
-               if (Tcl_StringMatch(nsCmdName,
-                       ensemblePtr->nsPtr->exportArrayPtr[i])) {
-                   hPtr = Tcl_CreateHashEntry(hash, nsCmdName, &isNew);
-
-                   /*
-                    * Remember, hash entries have a full reference to the
-                    * substituted part of the command (as a list) as their
-                    * content!
-                    */
-
-                   if (isNew) {
-                       Tcl_Obj *cmdObj, *cmdPrefixObj;
-
-                       TclNewObj(cmdObj);
-                       Tcl_AppendStringsToObj(cmdObj,
-                               ensemblePtr->nsPtr->fullName,
-                               (ensemblePtr->nsPtr->parentPtr ? "::" : ""),
-                               nsCmdName, NULL);
-                       cmdPrefixObj = Tcl_NewListObj(1, &cmdObj);
-                       Tcl_SetHashValue(hPtr, cmdPrefixObj);
-                       Tcl_IncrRefCount(cmdPrefixObj);
-                   }
-                   break;
-               }
-           }
-       }
+        /*
+         * Discover what commands are actually exported by the namespace.
+         * What we have is an array of patterns and a hash table whose keys
+         * are the command names exported by the namespace (the contents do
+         * not matter here.) We must find out what commands are actually
+         * exported by filtering each command in the namespace against each of
+         * the patterns in the export list. Note that we use an intermediate
+         * hash table to make memory management easier, and because that makes
+         * exact matching far easier too.
+         *
+         * Suggestion for future enhancement: compute the unique prefixes and
+         * place them in the hash too, which should make for even faster
+         * matching.
+         */
+
+        hPtr = Tcl_FirstHashEntry(&ensemblePtr->nsPtr->cmdTable, &search);
+        for (; hPtr!= NULL ; hPtr=Tcl_NextHashEntry(&search)) {
+            char *nsCmdName =           /* Name of command in namespace. */
+                    Tcl_GetHashKey(&ensemblePtr->nsPtr->cmdTable, hPtr);
+
+            for (i=0 ; i<ensemblePtr->nsPtr->numExportPatterns ; i++) {
+                if (Tcl_StringMatch(nsCmdName,
+                        ensemblePtr->nsPtr->exportArrayPtr[i])) {
+                    hPtr = Tcl_CreateHashEntry(hash, nsCmdName, &isNew);
+
+                    /*
+                     * Remember, hash entries have a full reference to the
+                     * substituted part of the command (as a list) as their
+                     * content!
+                     */
+
+                    if (isNew) {
+                        Tcl_Obj *cmdObj, *cmdPrefixObj;
+
+                        TclNewObj(cmdObj);
+                        Tcl_AppendStringsToObj(cmdObj,
+                                ensemblePtr->nsPtr->fullName,
+                                (ensemblePtr->nsPtr->parentPtr ? "::" : ""),
+                                nsCmdName, NULL);
+                        cmdPrefixObj = Tcl_NewListObj(1, &cmdObj);
+                        Tcl_SetHashValue(hPtr, cmdPrefixObj);
+                        Tcl_IncrRefCount(cmdPrefixObj);
+                    }
+                    break;
+                }
+            }
+        }
     }
 
     if (hash->numEntries == 0) {
index 66ddb57..8cc4b74 100644 (file)
@@ -130,6 +130,7 @@ TclSetupEnv(
                 * '='; ignore the entry.
                 */
 
+               Tcl_DStringFree(&envString);
                continue;
            }
            p2++;
index 1991aea..7e8961d 100644 (file)
@@ -1014,12 +1014,18 @@ static void
 RebuildTable(
     register Tcl_HashTable *tablePtr)  /* Table to enlarge. */
 {
-    int oldSize, count, index;
-    Tcl_HashEntry **oldBuckets;
+    int count, index, oldSize = tablePtr->numBuckets;
+    Tcl_HashEntry **oldBuckets = tablePtr->buckets;
     register Tcl_HashEntry **oldChainPtr, **newChainPtr;
     register Tcl_HashEntry *hPtr;
     const Tcl_HashKeyType *typePtr;
 
+    /* Avoid outgrowing capability of the memory allocators */
+    if (oldSize > (int)(UINT_MAX / (4 * sizeof(Tcl_HashEntry *)))) {
+       tablePtr->rebuildSize = INT_MAX;
+       return;
+    }
+
     if (tablePtr->keyType == TCL_STRING_KEYS) {
        typePtr = &tclStringHashKeyType;
     } else if (tablePtr->keyType == TCL_ONE_WORD_KEYS) {
@@ -1031,9 +1037,6 @@ RebuildTable(
        typePtr = &tclArrayHashKeyType;
     }
 
-    oldSize = tablePtr->numBuckets;
-    oldBuckets = tablePtr->buckets;
-
     /*
      * Allocate and initialize the new bucket array, and set up hashing
      * constants for new array size.
index 64501fd..e74624f 100644 (file)
@@ -6660,7 +6660,7 @@ Tcl_Flush(
     chanPtr = statePtr->topChanPtr;
 
     if (CheckChannelErrors(statePtr, TCL_WRITABLE) != 0) {
-       return -1;
+       return TCL_ERROR;
     }
 
     result = FlushChannel(NULL, chanPtr, 0);
index f476a1a..e862761 100644 (file)
@@ -41,6 +41,8 @@ static void           ReflectWatch(ClientData clientData, int mask);
 static int             ReflectBlock(ClientData clientData, int mode);
 #ifdef TCL_THREADS
 static void            ReflectThread(ClientData clientData, int action);
+static int             ReflectEventRun(Tcl_Event *ev, int flags);
+static int             ReflectEventDelete(Tcl_Event *ev, ClientData cd);
 #endif
 static Tcl_WideInt     ReflectSeekWide(ClientData clientData,
                            Tcl_WideInt offset, int mode, int *errorCodePtr);
@@ -748,6 +750,7 @@ TclChanCreateObjCmd(
  *----------------------------------------------------------------------
  */
 
+#ifdef TCL_THREADS
 typedef struct ReflectEvent {
     Tcl_Event header;
     ReflectedChannel *rcPtr;
@@ -791,6 +794,7 @@ ReflectEventDelete(
     }
     return 1;
 }
+#endif
 
 int
 TclChanPostEventObjCmd(
index 41e218f..19620e7 100644 (file)
@@ -412,7 +412,6 @@ Tcl_GetCwd(
     return Tcl_DStringValue(cwdPtr);
 }
 \f
-/* Obsolete */
 int
 Tcl_EvalFile(
     Tcl_Interp *interp,                /* Interpreter in which to process file. */
index 0e0ddc9..30c33f1 100644 (file)
@@ -878,7 +878,8 @@ Tcl_WrongNumArgs(
                                 * NULL. */
 {
     Tcl_Obj *objPtr;
-    int i, len, elemLen, flags;
+    int i, len, elemLen;
+    char flags;
     Interp *iPtr = (Interp *) interp;
     const char *elementStr;
 
index 2f830cc..91c8b96 100644 (file)
@@ -2422,8 +2422,8 @@ typedef struct List {
 #define TCL_EACH_COLLECT    1  /* Collect iteration result like [lmap] */
 
 /*
- * Macros providing a faster path to integers: Tcl_GetLongFromObj everywhere,
- * Tcl_GetIntFromObj and TclGetIntForIndex on platforms where longs are ints.
+ * Macros providing a faster path to integers: Tcl_GetLongFromObj,
+ * Tcl_GetIntFromObj and TclGetIntForIndex.
  *
  * WARNING: these macros eval their args more than once.
  */
@@ -2444,9 +2444,17 @@ typedef struct List {
            : TclGetIntForIndex((interp), (objPtr), (endValue), (idxPtr)))
 #else
 #define TclGetIntFromObj(interp, objPtr, intPtr) \
-    Tcl_GetIntFromObj((interp), (objPtr), (intPtr))
-#define TclGetIntForIndexM(interp, objPtr, ignore, idxPtr)     \
-    TclGetIntForIndex(interp, objPtr, ignore, idxPtr)
+    (((objPtr)->typePtr == &tclIntType \
+           && (objPtr)->internalRep.longValue >= -(Tcl_WideInt)(UINT_MAX) \
+           && (objPtr)->internalRep.longValue <= (Tcl_WideInt)(UINT_MAX))      \
+           ? ((*(intPtr) = (objPtr)->internalRep.longValue), TCL_OK) \
+           : Tcl_GetIntFromObj((interp), (objPtr), (intPtr)))
+#define TclGetIntForIndexM(interp, objPtr, endValue, idxPtr) \
+    (((objPtr)->typePtr == &tclIntType \
+           && (objPtr)->internalRep.longValue >= INT_MIN \
+           && (objPtr)->internalRep.longValue <= INT_MAX)      \
+           ? ((*(idxPtr) = (objPtr)->internalRep.longValue), TCL_OK) \
+           : TclGetIntForIndex((interp), (objPtr), (endValue), (idxPtr)))
 #endif
 
 /*
@@ -3098,7 +3106,7 @@ MODULE_SCOPE int  TclReToGlob(Tcl_Interp *interp, const char *reStr,
                            int reStrLen, Tcl_DString *dsPtr, int *flagsPtr,
                            int *quantifiersFoundPtr);
 MODULE_SCOPE int       TclScanElement(const char *string, int length,
-                           int *flagPtr);
+                           char *flagPtr);
 MODULE_SCOPE void      TclSetBgErrorHandler(Tcl_Interp *interp,
                            Tcl_Obj *cmdPrefix);
 MODULE_SCOPE void      TclSetBignumIntRep(Tcl_Obj *objPtr,
index 7d1e3a8..6f75849 100644 (file)
@@ -638,7 +638,7 @@ static Tcl_ObjType invalidRealType = {
     NULL,                              /* freeIntRepProc */
     NULL,                              /* dupIntRepProc */
     NULL,                              /* updateStringProc */
-    SetInvalidRealFromAny              /* setFromAnyProc */
+    NULL                               /* setFromAnyProc */
 };
 
 static int
index 344d0fd..3a1555d 100644 (file)
@@ -1957,8 +1957,8 @@ static void
 UpdateStringOfList(
     Tcl_Obj *listPtr)          /* List object with string rep to update. */
 {
-#   define LOCAL_SIZE 20
-    int localFlags[LOCAL_SIZE], *flagPtr = NULL;
+#   define LOCAL_SIZE 64
+    char localFlags[LOCAL_SIZE], *flagPtr = NULL;
     List *listRepPtr = ListRepPtr(listPtr);
     int numElems = listRepPtr->elemCount;
     int i, length, bytesNeeded = 0;
@@ -1995,7 +1995,7 @@ UpdateStringOfList(
         * We know numElems <= LIST_MAX, so this is safe.
         */
 
-       flagPtr = ckalloc(numElems * sizeof(int));
+       flagPtr = ckalloc(numElems);
     }
     elemPtrs = &listRepPtr->elements;
     for (i = 0; i < numElems; i++) {
index 942e6b4..f1bd248 100644 (file)
@@ -130,7 +130,7 @@ Tcl_LoadObjCmd(
     Tcl_PackageInitProc *initProc;
     const char *p, *fullFileName, *packageName;
     Tcl_LoadHandle loadHandle;
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
     unsigned len;
     int index, flags = 0;
     Tcl_Obj *const *savedobjv = objv;
index ec666ee..f236ac9 100644 (file)
@@ -537,7 +537,8 @@ KillFoundation(
  * AllocObject --
  *
  *     Allocate an object of basic type. Does not splice the object into its
- *     class's instance list.
+ *     class's instance list.  The caller must set the classPtr on the object,
+ *     either to a class or to NULL.
  *
  * ----------------------------------------------------------------------
  */
@@ -1672,6 +1673,8 @@ Tcl_NewObjectInstance(
        AllocClass(interp, oPtr);
        oPtr->selfCls = classPtr;
        TclOOAddToSubclasses(oPtr->classPtr, fPtr->objectCls);
+    } else {
+       oPtr->classPtr = NULL;
     }
 
     /*
index ac0b94d..3e4f561 100644 (file)
@@ -53,7 +53,8 @@ static void           AddClassFiltersToCallContext(Object *const oPtr,
                            Class *clsPtr, struct ChainBuilder *const cbPtr,
                            Tcl_HashTable *const doneFilters, int flags);
 static void            AddClassMethodNames(Class *clsPtr, const int flags,
-                           Tcl_HashTable *const namesPtr);
+                           Tcl_HashTable *const namesPtr,
+                           Tcl_HashTable *const examinedClassesPtr);
 static inline void     AddMethodToCallChain(Method *const mPtr,
                            struct ChainBuilder *const cbPtr,
                            Tcl_HashTable *const doneFilters,
@@ -367,6 +368,10 @@ TclOOGetSortedMethodList(
 {
     Tcl_HashTable names;       /* Tcl_Obj* method name to "wanted in list"
                                 * mapping. */
+    Tcl_HashTable examinedClasses;
+                               /* Used to track what classes have been looked
+                                * at. Is set-like in nature and keyed by
+                                * pointer to class. */
     FOREACH_HASH_DECLS;
     int i;
     Class *mixinPtr;
@@ -376,6 +381,7 @@ TclOOGetSortedMethodList(
     void *isWanted;
 
     Tcl_InitObjHashTable(&names);
+    Tcl_InitHashTable(&examinedClasses, TCL_ONE_WORD_KEYS);
 
     /*
      * Name the bits used in the names table values.
@@ -436,11 +442,14 @@ TclOOGetSortedMethodList(
      * hierarchy.
      */
 
-    AddClassMethodNames(oPtr->selfCls, flags, &names);
+    AddClassMethodNames(oPtr->selfCls, flags, &names, &examinedClasses);
     FOREACH(mixinPtr, oPtr->mixins) {
-       AddClassMethodNames(mixinPtr, flags|TRAVERSED_MIXIN, &names);
+       AddClassMethodNames(mixinPtr, flags|TRAVERSED_MIXIN, &names,
+               &examinedClasses);
     }
 
+    Tcl_DeleteHashTable(&examinedClasses);
+
     /*
      * See how many (visible) method names there are. If none, we do not (and
      * should not) try to sort the list of them.
@@ -495,18 +504,24 @@ TclOOGetSortedClassMethodList(
 {
     Tcl_HashTable names;       /* Tcl_Obj* method name to "wanted in list"
                                 * mapping. */
+    Tcl_HashTable examinedClasses;
+                               /* Used to track what classes have been looked
+                                * at. Is set-like in nature and keyed by
+                                * pointer to class. */
     FOREACH_HASH_DECLS;
     int i;
     Tcl_Obj *namePtr;
     void *isWanted;
 
     Tcl_InitObjHashTable(&names);
+    Tcl_InitHashTable(&examinedClasses, TCL_ONE_WORD_KEYS);
 
     /*
      * Process method names from the class hierarchy and the mixin hierarchy.
      */
 
-    AddClassMethodNames(clsPtr, flags, &names);
+    AddClassMethodNames(clsPtr, flags, &names, &examinedClasses);
+    Tcl_DeleteHashTable(&examinedClasses);
 
     /*
      * See how many (visible) method names there are. If none, we do not (and
@@ -581,39 +596,60 @@ AddClassMethodNames(
     Class *clsPtr,             /* Class to get method names from. */
     const int flags,           /* Whether we are interested in just the
                                 * public method names. */
-    Tcl_HashTable *const namesPtr)
+    Tcl_HashTable *const namesPtr,
                                /* Reference to the hash table to put the
                                 * information in. The hash table maps the
                                 * Tcl_Obj * method name to an integral value
                                 * describing whether the method is wanted.
                                 * This ensures that public/private override
-                                * semantics are handled correctly.*/
+                                * semantics are handled correctly. */
+    Tcl_HashTable *const examinedClassesPtr)
+                               /* Hash table that tracks what classes have
+                                * already been looked at. The keys are the
+                                * pointers to the classes, and the values are
+                                * immaterial. */
 {
     /*
+     * If we've already started looking at this class, stop working on it now
+     * to prevent repeated work.
+     */
+
+    if (Tcl_FindHashEntry(examinedClassesPtr, (char *) clsPtr)) {
+       return;
+    }
+
+    /*
      * Scope all declarations so that the compiler can stand a good chance of
      * making the recursive step highly efficient. We also hand-implement the
      * tail-recursive case using a while loop; C compilers typically cannot do
      * tail-recursion optimization usefully.
      */
 
-    if (clsPtr->mixins.num != 0) {
-       Class *mixinPtr;
-       int i;
-
-       /* TODO: Beware of infinite loops! */
-       FOREACH(mixinPtr, clsPtr->mixins) {
-           AddClassMethodNames(mixinPtr, flags|TRAVERSED_MIXIN, namesPtr);
-       }
-    }
-
     while (1) {
        FOREACH_HASH_DECLS;
        Tcl_Obj *namePtr;
        Method *mPtr;
+       int isNew;
 
-       FOREACH_HASH(namePtr, mPtr, &clsPtr->classMethods) {
-           int isNew;
+       (void) Tcl_CreateHashEntry(examinedClassesPtr, (char *) clsPtr,
+               &isNew);
+       if (!isNew) {
+           break;
+       }
+
+       if (clsPtr->mixins.num != 0) {
+           Class *mixinPtr;
+           int i;
 
+           FOREACH(mixinPtr, clsPtr->mixins) {
+               if (mixinPtr != clsPtr) {
+                   AddClassMethodNames(mixinPtr, flags|TRAVERSED_MIXIN,
+                           namesPtr, examinedClassesPtr);
+               }
+           }
+       }
+
+       FOREACH_HASH(namePtr, mPtr, &clsPtr->classMethods) {
            hPtr = Tcl_CreateHashEntry(namesPtr, (char *) namePtr, &isNew);
            if (isNew) {
                int isWanted = (!(flags & PUBLIC_METHOD)
@@ -640,7 +676,8 @@ AddClassMethodNames(
        int i;
 
        FOREACH(superPtr, clsPtr->superclasses) {
-           AddClassMethodNames(superPtr, flags, namesPtr);
+           AddClassMethodNames(superPtr, flags, namesPtr,
+                   examinedClassesPtr);
        }
     }
 }
index 99a8bfc..8da0fb3 100644 (file)
@@ -1314,6 +1314,7 @@ CloneProcedureMethod(
      */
 
     bodyObj = Tcl_DuplicateObj(pmPtr->procPtr->bodyPtr);
+    Tcl_GetString(bodyObj);
     TclFreeIntRep(bodyObj);
 
     /*
index b032449..b03ad41 100644 (file)
@@ -111,7 +111,7 @@ Tcl_PanicVA(
        __builtin_trap();
 #   elif defined(_WIN64)
        __debugbreak();
-#   elif defined(_MSC_VER)
+#   elif defined(_MSC_VER) && defined (_M_IX86)
        _asm {int 3}
 #   else
        DebugBreak();
index 3ecf4a5..f2cf322 100644 (file)
@@ -841,7 +841,7 @@ TclParseBackslash(
                                 * written there. */
 {
     register const char *p = src+1;
-    Tcl_UniChar unichar;
+    Tcl_UniChar unichar = 0;
     int result;
     int count;
     char buf[TCL_UTF_MAX];
index 8ee4869..29d6f96 100644 (file)
@@ -1811,7 +1811,6 @@ Tcl_FSGetNormalizedPath(
         */
 
        (void) Tcl_GetStringFromObj(dir, &cwdLen);
-       cwdLen += (Tcl_GetString(copy)[cwdLen] == '/');
 
        /* Normalize the combined string. */
 
@@ -1833,12 +1832,12 @@ Tcl_FSGetNormalizedPath(
             * normalized head, we can more efficiently normalize the combined
             * path by passing over only the unnormalized tail portion. When
             * this is sufficient, prior developers claim this should be much
-            * faster. We use 'cwdLen-1' so that we are already pointing at
+            * faster. We use 'cwdLen' so that we are already pointing at
             * the dir-separator that we know about. The normalization code
             * will actually start off directly after that separator.
             */
 
-           TclFSNormalizeToUniquePath(interp, copy, cwdLen-1);
+           TclFSNormalizeToUniquePath(interp, copy, cwdLen);
        }
 
        /* Now we need to construct the new path object. */
index 83fb818..2ecc5a6 100644 (file)
@@ -668,7 +668,13 @@ TclCreatePipeline(
            if (*p == '>') {
                p++;
                atOK = 0;
-               flags = O_WRONLY | O_CREAT;
+
+               /*
+                * Note that the O_APPEND flag only has an effect on POSIX
+                * platforms. On Windows, we just have to carry on regardless.
+                */
+
+               flags = O_WRONLY | O_CREAT | O_APPEND;
            }
            if (errorClose != 0) {
                errorClose = 0;
index f6e8b20..4f6faa8 100644 (file)
@@ -352,7 +352,7 @@ PkgRequireCore(
     Interp *iPtr = (Interp *) interp;
     Package *pkgPtr;
     PkgAvail *availPtr, *bestPtr, *bestStablePtr;
-    char *availVersion, *bestVersion;
+    char *availVersion, *bestVersion, *bestStableVersion;
                                /* Internal rep. of versions */
     int availStable, code, satisfies, pass;
     char *script, *pkgVersionI;
@@ -400,6 +400,7 @@ PkgRequireCore(
        bestPtr = NULL;
        bestStablePtr = NULL;
        bestVersion = NULL;
+       bestStableVersion = NULL;
 
        for (availPtr = pkgPtr->availPtr; availPtr != NULL;
                availPtr = availPtr->nextPtr) {
@@ -413,60 +414,86 @@ PkgRequireCore(
 
                continue;
            }
-
+           
+           /* Check satisfaction of requirements before considering the current version further. */
+           if (reqc > 0) {
+               satisfies = SomeRequirementSatisfied(availVersion, reqc, reqv);
+               if (!satisfies) {
+                   ckfree(availVersion);
+                   availVersion = NULL;
+                   continue;
+               }
+           }
+           
            if (bestPtr != NULL) {
                int res = CompareVersions(availVersion, bestVersion, NULL);
 
                /*
-                * Note: Use internal reps!
+                * Note: Used internal reps in the comparison!
                 */
 
-               if (res <= 0) {
+               if (res > 0) {
                    /*
-                    * The version of the package sought is not as good as the
-                    * currently selected version. Ignore it.
+                    * The version of the package sought is better than the
+                    * currently selected version.
                     */
-
-                   ckfree(availVersion);
-                   availVersion = NULL;
-                   continue;
+                   ckfree(bestVersion);
+                   bestVersion = NULL;
+                   goto newbest;
                }
-           }
-
-           /*
-            * We have found a version which is better than our max.
-            */
-
-           if (reqc > 0) {
-               /* Check satisfaction of requirements. */
+           } else {
+           newbest:
+               /* We have found a version which is better than our max. */
 
-               satisfies = SomeRequirementSatisfied(availVersion, reqc, reqv);
-               if (!satisfies) {
-                   ckfree(availVersion);
-                   availVersion = NULL;
-                   continue;
-               }
+               bestPtr = availPtr;
+               CheckVersionAndConvert(interp, bestPtr->version, &bestVersion, NULL);
            }
 
-           bestPtr = availPtr;
-
-           if (bestVersion != NULL) {
-               ckfree(bestVersion);
+           if (!availStable) {
+               ckfree(availVersion);
+               availVersion = NULL;
+               continue;
            }
-           bestVersion = availVersion;
 
-           /*
-            * If this new best version is stable then it also has to be
-            * better than the max stable version found so far.
-            */
+           if (bestStablePtr != NULL) {
+               int res = CompareVersions(availVersion, bestStableVersion, NULL);
+
+               /*
+                * Note: Used internal reps in the comparison!
+                */
 
-           if (availStable) {
+               if (res > 0) {
+                   /*
+                    * This stable version of the package sought is better
+                    * than the currently selected stable version.
+                    */
+                   ckfree(bestStableVersion);
+                   bestStableVersion = NULL;
+                   goto newstable;
+               }
+           } else {
+           newstable:
+               /* We have found a stable version which is better than our max stable. */
                bestStablePtr = availPtr;
+               CheckVersionAndConvert(interp, bestStablePtr->version, &bestStableVersion, NULL);
            }
-       }
 
+           ckfree(availVersion);
+           availVersion = NULL;
+       } /* end for */
+
+       /*
+        * Clean up memorized internal reps, if any.
+        */
+       
        if (bestVersion != NULL) {
            ckfree(bestVersion);
+           bestVersion = NULL;
+       }
+
+       if (bestStableVersion != NULL) {
+           ckfree(bestStableVersion);
+           bestStableVersion = NULL;
        }
 
        /*
index ea25d4b..cfe6388 100644 (file)
@@ -502,10 +502,17 @@ Tcl_RegExpMatchObj(
 {
     Tcl_RegExp re;
 
-    re = Tcl_GetRegExpFromObj(interp, patternObj,
-           TCL_REG_ADVANCED | TCL_REG_NOSUB);
-    if (re == NULL) {
-       return -1;
+    /*
+     * For performance reasons, first try compiling the RE without support for
+     * subexpressions. On failure, try again without TCL_REG_NOSUB in case the
+     * RE has backreferences in it. Closely related to [Bug 1366683]. If this
+     * still fails, an error message will be left in the interpreter.
+     */
+
+    if (!(re = Tcl_GetRegExpFromObj(interp, patternObj,
+            TCL_REG_ADVANCED | TCL_REG_NOSUB))
+     && !(re = Tcl_GetRegExpFromObj(interp, patternObj, TCL_REG_ADVANCED))) {
+        return -1;
     }
     return Tcl_RegExpExecObj(interp, re, textObj, 0 /* offset */,
            0 /* nmatches */, 0 /* flags */);
index 17069eb..7f71262 100644 (file)
@@ -72,7 +72,7 @@ BuildCharSet(
     CharSet *cset,
     const char *format)                /* Points to first char of set. */
 {
-    Tcl_UniChar ch, start;
+    Tcl_UniChar ch = 0, start;
     int offset, nranges;
     const char *end;
 
@@ -257,7 +257,7 @@ ValidateFormat(
 {
     int gotXpg, gotSequential, value, i, flags;
     char *end;
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
     int objIndex, xpgSize, nspace = numVars;
     int *nassign = TclStackAlloc(interp, nspace * sizeof(int));
     char buf[TCL_UTF_MAX+1];
@@ -582,7 +582,7 @@ Tcl_ScanObjCmd(
     char op = 0;
     int width, underflow = 0;
     Tcl_WideInt wideValue;
-    Tcl_UniChar ch, sch;
+    Tcl_UniChar ch = 0, sch = 0;
     Tcl_Obj **objs = NULL, *objPtr = NULL;
     int flags;
     char buf[513];             /* Temporary buffer to hold scanned number
@@ -885,9 +885,17 @@ Tcl_ScanObjCmd(
             * Scan a single Unicode character.
             */
 
-           string += TclUtfToUniChar(string, &sch);
+           offset = TclUtfToUniChar(string, &sch);
+           i = (int)sch;
+#if TCL_UTF_MAX == 4
+           if (!offset) {
+               offset = Tcl_UtfToUniChar(string, &sch);
+               i = (((i<<10) & 0x0FFC00) + 0x10000) + (sch & 0x3FF);
+           }
+#endif
+           string += offset;
            if (!(flags & SCAN_SUPPRESS)) {
-               objPtr = Tcl_NewIntObj((int)sch);
+               objPtr = Tcl_NewIntObj(i);
                Tcl_IncrRefCount(objPtr);
                CLANG_ASSERT(objs);
                objs[objIndex++] = objPtr;
index c84b500..0f238cf 100644 (file)
@@ -418,12 +418,16 @@ Tcl_GetCharLength(
     int numChars;
 
     /*
-     * Optimize the case where we're really dealing with a bytearray object
-     * without string representation; we don't need to convert to a string to
-     * perform the get-length operation.
+     * Optimize the case where we're really dealing with a bytearray object;
+     * we don't need to convert to a string to perform the get-length operation.
+     *
+     * NOTE that we do not need the bytearray to be "pure".  A ByteArray value
+     * with a string rep cannot be trusted to represent the same value as the
+     * string rep, but it *can* be trusted to have the same character length
+     * as the string rep, which is all this routine cares about.
      */
 
-    if (TclIsPureByteArray(objPtr)) {
+    if (objPtr->typePtr == &tclByteArrayType) {
        int length;
 
        (void) Tcl_GetByteArrayFromObj(objPtr, &length);
@@ -1682,6 +1686,7 @@ Tcl_AppendFormatToObj(
     const char *span = format, *msg, *errCode;
     int numBytes = 0, objIndex = 0, gotXpg = 0, gotSequential = 0;
     int originalLength, limit;
+    Tcl_UniChar ch = 0;
     static const char *mixedXPG =
            "cannot mix \"%\" and \"%n$\" conversion specifiers";
     static const char *const badIndex[2] = {
@@ -1709,7 +1714,6 @@ Tcl_AppendFormatToObj(
 #endif
        int newXpg, numChars, allocSegment = 0, segmentLimit, segmentNumBytes;
        Tcl_Obj *segment;
-       Tcl_UniChar ch;
        int step = TclUtfToUniChar(format, &ch);
 
        format += step;
@@ -2692,7 +2696,7 @@ TclStringObjReverse(
     Tcl_Obj *objPtr)
 {
     String *stringPtr;
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
 
     if (TclIsPureByteArray(objPtr)) {
        int numBytes;
@@ -2720,7 +2724,6 @@ TclStringObjReverse(
             * Tcl_SetObjLength into growing the unicode rep buffer.
             */
 
-           ch = 0;
            objPtr = Tcl_NewUnicodeObj(&ch, 1);
            Tcl_SetObjLength(objPtr, stringPtr->numChars);
            to = Tcl_GetUnicode(objPtr);
@@ -2823,7 +2826,7 @@ ExtendUnicodeRepWithString(
 {
     String *stringPtr = GET_STRING(objPtr);
     int needed, numOrigChars = 0;
-    Tcl_UniChar *dst;
+    Tcl_UniChar *dst, unichar = 0;
 
     if (stringPtr->hasUnicode) {
        numOrigChars = stringPtr->numChars;
@@ -2846,7 +2849,8 @@ ExtendUnicodeRepWithString(
        numAppendChars = 0;
     }
     for (dst=stringPtr->unicode + numOrigChars; numAppendChars-- > 0; dst++) {
-       bytes += TclUtfToUniChar(bytes, dst);
+       bytes += TclUtfToUniChar(bytes, &unichar);
+       *dst = unichar;
     }
     *dst = 0;
 }
index e8539e8..8a59b83 100644 (file)
@@ -407,6 +407,12 @@ static Tcl_FSMatchInDirectoryProc SimpleMatchInDirectory;
 static int             TestNumUtfCharsCmd(ClientData clientData,
                            Tcl_Interp *interp, int objc,
                            Tcl_Obj *const objv[]);
+static int             TestFindFirstCmd(ClientData clientData,
+                           Tcl_Interp *interp, int objc,
+                           Tcl_Obj *const objv[]);
+static int             TestFindLastCmd(ClientData clientData,
+                           Tcl_Interp *interp, int objc,
+                           Tcl_Obj *const objv[]);
 static int             TestHashSystemHashCmd(ClientData clientData,
                            Tcl_Interp *interp, int objc,
                            Tcl_Obj *const objv[]);
@@ -668,6 +674,10 @@ Tcltest_Init(
            TestsetobjerrorcodeCmd, NULL, NULL);
     Tcl_CreateObjCommand(interp, "testnumutfchars",
            TestNumUtfCharsCmd, NULL, NULL);
+    Tcl_CreateObjCommand(interp, "testfindfirst",
+           TestFindFirstCmd, NULL, NULL);
+    Tcl_CreateObjCommand(interp, "testfindlast",
+           TestFindLastCmd, NULL, NULL);
     Tcl_CreateCommand(interp, "testsetplatform", TestsetplatformCmd,
            NULL, NULL);
     Tcl_CreateCommand(interp, "teststaticpkg", TeststaticpkgCmd,
@@ -6680,6 +6690,50 @@ TestNumUtfCharsCmd(
     return TCL_OK;
 }
 
+/*
+ * Used to check correct operation of Tcl_UtfFindFirst
+ */
+
+static int
+TestFindFirstCmd(
+    ClientData clientData,
+    Tcl_Interp *interp,
+    int objc,
+    Tcl_Obj *const objv[])
+{
+    if (objc > 1) {
+       int len = -1;
+
+       if (objc > 2) {
+           (void) Tcl_GetIntFromObj(interp, objv[2], &len);
+       }
+       Tcl_SetObjResult(interp, Tcl_NewStringObj(Tcl_UtfFindFirst(Tcl_GetString(objv[1]), len), -1));
+    }
+    return TCL_OK;
+}
+
+/*
+ * Used to check correct operation of Tcl_UtfFindLast
+ */
+
+static int
+TestFindLastCmd(
+    ClientData clientData,
+    Tcl_Interp *interp,
+    int objc,
+    Tcl_Obj *const objv[])
+{
+    if (objc > 1) {
+       int len = -1;
+
+       if (objc > 2) {
+           (void) Tcl_GetIntFromObj(interp, objv[2], &len);
+       }
+       Tcl_SetObjResult(interp, Tcl_NewStringObj(Tcl_UtfFindLast(Tcl_GetString(objv[1]), len), -1));
+    }
+    return TCL_OK;
+}
+
 #if defined(HAVE_CPUID) || defined(_WIN32)
 /*
  *----------------------------------------------------------------------
index b8b867c..c60e99e 100644 (file)
@@ -100,7 +100,7 @@ static int          UtfCount(int ch);
 
 static inline int
 UtfCount(
-    int ch)                    /* The Tcl_UniChar whose size is returned. */
+    int ch)                    /* The Unicode character whose size is returned. */
 {
     if ((unsigned)(ch - 1) < (UNICODE_SELF - 1)) {
        return 1;
@@ -259,6 +259,15 @@ Tcl_UniCharToUtfDString(
  *     Tcl_UtfCharComplete() before calling this routine to ensure that
  *     enough bytes remain in the string.
  *
+ *     If TCL_UTF_MAX == 4, special handling of Surrogate pairs is done:
+ *     For any UTF-8 string containing a character outside of the BMP, the
+ *     first call to this function will fill *chPtr with the high surrogate
+ *     and generate a return value of 0. Calling Tcl_UtfToUniChar again
+ *     will produce the low surrogate and a return value of 4. Because *chPtr
+ *     is used to remember whether the high surrogate is already produced, it
+ *     is recommended to initialize the variable it points to as 0 before
+ *     the first call to Tcl_UtfToUniChar is done.
+ *
  * Results:
  *     *chPtr is filled with the Tcl_UniChar, and the return value is the
  *     number of bytes from the UTF-8 string that were consumed.
@@ -278,7 +287,7 @@ Tcl_UtfToUniChar(
     register int byte;
 
     /*
-     * Unroll 1 to 3 byte UTF-8 sequences, use loop to handle longer ones.
+     * Unroll 1 to 3 (or 4) byte UTF-8 sequences.
      */
 
     byte = *((unsigned char *) src);
@@ -331,12 +340,30 @@ Tcl_UtfToUniChar(
            /*
             * Four-byte-character lead byte followed by three trail bytes.
             */
-
+#if TCL_UTF_MAX == 4
+           Tcl_UniChar surrogate;
+
+           byte = (((byte & 0x07) << 18) | ((src[1] & 0x3F) << 12)
+                   | ((src[2] & 0x3F) << 6) | (src[3] & 0x3F)) - 0x10000;
+           surrogate = (Tcl_UniChar) (0xD800 + (byte >> 10));
+           if (byte & 0x100000) {
+               /* out of range, < 0x10000 or > 0x10ffff */
+           } else if (*chPtr != surrogate) {
+               /* produce high surrogate, but don't advance source pointer */
+               *chPtr = surrogate;
+               return 0;
+           } else {
+               /* produce low surrogate, and advance source pointer */
+               *chPtr = (Tcl_UniChar) (0xDC00 | (byte & 0x3FF));
+               return 4;
+           }
+#else
            *chPtr = (Tcl_UniChar) (((byte & 0x07) << 18) | ((src[1] & 0x3F) << 12)
                    | ((src[2] & 0x3F) << 6) | (src[3] & 0x3F));
            if ((unsigned)(*chPtr - 0x10000) <= 0xFFFFF) {
                return 4;
            }
+#endif
        }
 
        /*
@@ -377,7 +404,7 @@ Tcl_UtfToUniCharDString(
                                 * appended to this previously initialized
                                 * DString. */
 {
-    Tcl_UniChar *w, *wString;
+    Tcl_UniChar ch = 0, *w, *wString;
     const char *p, *end;
     int oldLength;
 
@@ -399,8 +426,8 @@ Tcl_UtfToUniCharDString(
     w = wString;
     end = src + length;
     for (p = src; p < end; ) {
-       p += TclUtfToUniChar(p, w);
-       w++;
+       p += TclUtfToUniChar(p, &ch);
+       *w++ = ch;
     }
     *w = '\0';
     Tcl_DStringSetLength(dsPtr,
@@ -434,10 +461,7 @@ Tcl_UtfCharComplete(
                                 * a complete UTF-8 character. */
     int length)                        /* Length of above string in bytes. */
 {
-    int ch;
-
-    ch = *((unsigned char *) src);
-    return length >= totalBytes[ch];
+    return length >= totalBytes[(unsigned char)*src];
 }
 \f
 /*
@@ -464,8 +488,8 @@ Tcl_NumUtfChars(
     int length)                        /* The length of the string in bytes, or -1
                                 * for strlen(string). */
 {
-    Tcl_UniChar ch;
-    register int i;
+    Tcl_UniChar ch = 0;
+    register int i = 0;
 
     /*
      * The separate implementations are faster.
@@ -474,7 +498,6 @@ Tcl_NumUtfChars(
      * single-byte char case specially.
      */
 
-    i = 0;
     if (length < 0) {
        while (*src != '\0') {
            src += TclUtfToUniChar(src, &ch);
@@ -505,13 +528,13 @@ Tcl_NumUtfChars(
  *
  * Tcl_UtfFindFirst --
  *
- *     Returns a pointer to the first occurance of the given Tcl_UniChar in
- *     the NULL-terminated UTF-8 string. The NULL terminator is considered
+ *     Returns a pointer to the first occurance of the given Unicode character
+ *     in the NULL-terminated UTF-8 string. The NULL terminator is considered
  *     part of the UTF-8 string. Equivalent to Plan 9 utfrune().
  *
  * Results:
- *     As above. If the Tcl_UniChar does not exist in the given string, the
- *     return value is NULL.
+ *     As above. If the Unicode character does not exist in the given string,
+ *     the return value is NULL.
  *
  * Side effects:
  *     None.
@@ -522,14 +545,21 @@ Tcl_NumUtfChars(
 const char *
 Tcl_UtfFindFirst(
     const char *src,           /* The UTF-8 string to be searched. */
-    int ch)                    /* The Tcl_UniChar to search for. */
+    int ch)                    /* The Unicode character to search for. */
 {
-    int len;
-    Tcl_UniChar find;
+    int len, fullchar;
+    Tcl_UniChar find = 0;
 
     while (1) {
        len = TclUtfToUniChar(src, &find);
-       if (find == ch) {
+       fullchar = find;
+#if TCL_UTF_MAX == 4
+       if (!len) {
+           len += TclUtfToUniChar(src, &find);
+           fullchar = (((fullchar & 0x3ff) << 10) | (find & 0x3ff)) + 0x10000;
+       }
+#endif
+       if (fullchar == ch) {
            return src;
        }
        if (*src == '\0') {
@@ -544,12 +574,12 @@ Tcl_UtfFindFirst(
  *
  * Tcl_UtfFindLast --
  *
- *     Returns a pointer to the last occurance of the given Tcl_UniChar in
- *     the NULL-terminated UTF-8 string. The NULL terminator is considered
+ *     Returns a pointer to the last occurance of the given Unicode character
+ *     in the NULL-terminated UTF-8 string. The NULL terminator is considered
  *     part of the UTF-8 string. Equivalent to Plan 9 utfrrune().
  *
  * Results:
- *     As above. If the Tcl_UniChar does not exist in the given string, the
+ *     As above. If the Unicode character does not exist in the given string, the
  *     return value is NULL.
  *
  * Side effects:
@@ -561,16 +591,23 @@ Tcl_UtfFindFirst(
 const char *
 Tcl_UtfFindLast(
     const char *src,           /* The UTF-8 string to be searched. */
-    int ch)                    /* The Tcl_UniChar to search for. */
+    int ch)                    /* The Unicode character to search for. */
 {
-    int len;
-    Tcl_UniChar find;
+    int len, fullchar;
+    Tcl_UniChar find = 0;
     const char *last;
 
     last = NULL;
     while (1) {
        len = TclUtfToUniChar(src, &find);
-       if (find == ch) {
+       fullchar = find;
+#if TCL_UTF_MAX == 4
+       if (!len) {
+           len += TclUtfToUniChar(src, &find);
+           fullchar = (((fullchar & 0x3ff) << 10) | (find & 0x3ff)) + 0x10000;
+       }
+#endif
+       if (fullchar == ch) {
            last = src;
        }
        if (*src == '\0') {
@@ -604,9 +641,15 @@ const char *
 Tcl_UtfNext(
     const char *src)           /* The current location in the string. */
 {
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
+    int len = TclUtfToUniChar(src, &ch);
 
-    return src + TclUtfToUniChar(src, &ch);
+#if TCL_UTF_MAX == 4
+    if (len == 0) {
+      len = TclUtfToUniChar(src, &ch);
+    }
+#endif
+    return src + len;
 }
 \f
 /*
@@ -639,8 +682,7 @@ Tcl_UtfPrev(
     const char *look;
     int i, byte;
 
-    src--;
-    look = src;
+    look = --src;
     for (i = 0; i < TCL_UTF_MAX; i++) {
        if (look < start) {
            if (src < start) {
@@ -665,7 +707,7 @@ Tcl_UtfPrev(
  *
  * Tcl_UniCharAtIndex --
  *
- *     Returns the Unicode character represented at the specified character
+ *     Returns the Tcl_UniChar represented at the specified character
  *     (not byte) position in the UTF-8 string.
  *
  * Results:
@@ -713,7 +755,7 @@ Tcl_UtfAtIndex(
     register const char *src,  /* The UTF-8 string. */
     register int index)                /* The position of the desired character. */
 {
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
 
     while (index > 0) {
        index--;
@@ -797,7 +839,7 @@ int
 Tcl_UtfToUpper(
     char *str)                 /* String to convert in place. */
 {
-    Tcl_UniChar ch, upChar;
+    Tcl_UniChar ch = 0, upChar;
     char *src, *dst;
     int bytes;
 
@@ -850,7 +892,7 @@ int
 Tcl_UtfToLower(
     char *str)                 /* String to convert in place. */
 {
-    Tcl_UniChar ch, lowChar;
+    Tcl_UniChar ch = 0, lowChar;
     char *src, *dst;
     int bytes;
 
@@ -904,7 +946,7 @@ int
 Tcl_UtfToTitle(
     char *str)                 /* String to convert in place. */
 {
-    Tcl_UniChar ch, titleChar, lowChar;
+    Tcl_UniChar ch = 0, titleChar, lowChar;
     char *src, *dst;
     int bytes;
 
@@ -1013,7 +1055,7 @@ Tcl_UtfNcmp(
     const char *ct,            /* UTF string cs is compared to. */
     unsigned long numChars)    /* Number of UTF chars to compare. */
 {
-    Tcl_UniChar ch1, ch2;
+    Tcl_UniChar ch1 = 0, ch2 = 0;
 
     /*
      * Cannot use 'memcmp(cs, ct, n);' as byte representation of \u0000 (the
@@ -1030,6 +1072,15 @@ Tcl_UtfNcmp(
 
        cs += TclUtfToUniChar(cs, &ch1);
        ct += TclUtfToUniChar(ct, &ch2);
+#if TCL_UTF_MAX == 4
+    /* map high surrogate characters to values > 0xffff */
+    if ((ch1 & 0xFC00) == 0xD800) {
+       ch1 += 0x4000;
+    }
+    if ((ch2 & 0xFC00) == 0xD800) {
+       ch2 += 0x4000;
+    }
+#endif
        if (ch1 != ch2) {
            return (ch1 - ch2);
        }
@@ -1061,7 +1112,8 @@ Tcl_UtfNcasecmp(
     const char *ct,            /* UTF string cs is compared to. */
     unsigned long numChars)    /* Number of UTF chars to compare. */
 {
-    Tcl_UniChar ch1, ch2;
+    Tcl_UniChar ch1 = 0, ch2 = 0;
+
     while (numChars-- > 0) {
        /*
         * n must be interpreted as chars, not bytes.
@@ -1070,6 +1122,15 @@ Tcl_UtfNcasecmp(
         */
        cs += TclUtfToUniChar(cs, &ch1);
        ct += TclUtfToUniChar(ct, &ch2);
+#if TCL_UTF_MAX == 4
+    /* map high surrogate characters to values > 0xffff */
+    if ((ch1 & 0xFC00) == 0xD800) {
+       ch1 += 0x4000;
+    }
+    if ((ch2 & 0xFC00) == 0xD800) {
+       ch2 += 0x4000;
+    }
+#endif
        if (ch1 != ch2) {
            ch1 = Tcl_UniCharToLower(ch1);
            ch2 = Tcl_UniCharToLower(ch2);
@@ -1084,7 +1145,7 @@ Tcl_UtfNcasecmp(
 /*
  *----------------------------------------------------------------------
  *
- * Tcl_UtfNcasecmp --
+ * TclUtfCasecmp --
  *
  *     Compare UTF chars of string cs to string ct case insensitively.
  *     Replacement for strcasecmp in Tcl core, in places where UTF-8 should
@@ -1104,11 +1165,20 @@ TclUtfCasecmp(
     const char *cs,            /* UTF string to compare to ct. */
     const char *ct)            /* UTF string cs is compared to. */
 {
-    while (*cs && *ct) {
-       Tcl_UniChar ch1, ch2;
+    Tcl_UniChar ch1 = 0, ch2 = 0;
 
+    while (*cs && *ct) {
        cs += TclUtfToUniChar(cs, &ch1);
        ct += TclUtfToUniChar(ct, &ch2);
+#if TCL_UTF_MAX == 4
+    /* map high surrogate characters to values > 0xffff */
+    if ((ch1 & 0xFC00) == 0xD800) {
+       ch1 += 0x4000;
+    }
+    if ((ch2 & 0xFC00) == 0xD800) {
+       ch2 += 0x4000;
+    }
+#endif
        if (ch1 != ch2) {
            ch1 = Tcl_UniCharToLower(ch1);
            ch2 = Tcl_UniCharToLower(ch2);
@@ -1690,7 +1760,7 @@ Tcl_UniCharCaseMatch(
                                 * characters. */
     int nocase)                        /* 0 for case sensitive, 1 for insensitive */
 {
-    Tcl_UniChar ch1, p;
+    Tcl_UniChar ch1 = 0, p;
 
     while (1) {
        p = *uniPattern;
index 553593c..feee9c5 100644 (file)
@@ -974,7 +974,7 @@ Tcl_ScanCountedElement(
     int *flagPtr)              /* Where to store information to guide
                                 * Tcl_ConvertElement. */
 {
-    int flags = CONVERT_ANY;
+    char flags = CONVERT_ANY;
     int numBytes = TclScanElement(src, length, &flags);
 
     *flagPtr = flags;
@@ -1015,7 +1015,7 @@ int
 TclScanElement(
     const char *src,           /* String to convert to Tcl list element. */
     int length,                        /* Number of bytes in src, or -1. */
-    int *flagPtr)              /* Where to store information to guide
+    char *flagPtr)             /* Where to store information to guide
                                 * Tcl_ConvertElement. */
 {
     const char *p = src;
@@ -1547,11 +1547,10 @@ Tcl_Merge(
     int argc,                  /* How many strings to merge. */
     const char *const *argv)   /* Array of string values. */
 {
-#define LOCAL_SIZE 20
-    int localFlags[LOCAL_SIZE], *flagPtr = NULL;
+#define LOCAL_SIZE 64
+    char localFlags[LOCAL_SIZE], *flagPtr = NULL;
     int i, bytesNeeded = 0;
     char *result, *dst;
-    const int maxFlags = UINT_MAX / sizeof(int);
 
     /*
      * Handle empty list case first, so logic of the general case can be
@@ -1570,22 +1569,8 @@ Tcl_Merge(
 
     if (argc <= LOCAL_SIZE) {
        flagPtr = localFlags;
-    } else if (argc > maxFlags) {
-       /*
-        * We cannot allocate a large enough flag array to format this list in
-        * one pass.  We could imagine converting this routine to a multi-pass
-        * implementation, but for sizeof(int) == 4, the limit is a max of
-        * 2^30 list elements and since each element is at least one byte
-        * formatted, and requires one byte space between it and the next one,
-        * that a minimum space requirement of 2^31 bytes, which is already
-        * INT_MAX. If we tried to format a list of > maxFlags elements, we're
-        * just going to overflow the size limits on the formatted string
-        * anyway, so just issue that same panic early.
-        */
-
-       Tcl_Panic("max size for a Tcl value (%d bytes) exceeded", INT_MAX);
     } else {
-       flagPtr = ckalloc(argc * sizeof(int));
+       flagPtr = ckalloc(argc);
     }
     for (i = 0; i < argc; i++) {
        flagPtr[i] = ( i ? TCL_DONT_QUOTE_HASH : 0 );
@@ -1646,7 +1631,7 @@ Tcl_Backslash(
                                 * src, unless NULL. */
 {
     char buf[TCL_UTF_MAX];
-    Tcl_UniChar ch;
+    Tcl_UniChar ch = 0;
 
     Tcl_UtfBackslash(src, readPtr, buf);
     TclUtfToUniChar(buf, &ch);
@@ -2717,7 +2702,7 @@ Tcl_DStringAppendElement(
 {
     char *dst = dsPtr->string + dsPtr->length;
     int needSpace = TclNeedSpace(dsPtr->string, dst);
-    int flags = needSpace ? TCL_DONT_QUOTE_HASH : 0;
+    char flags = needSpace ? TCL_DONT_QUOTE_HASH : 0;
     int newSize = dsPtr->length + needSpace
            + TclScanElement(element, -1, &flags);
 
old mode 100755 (executable)
new mode 100644 (file)
index 0350808..9f5310b 100644 (file)
@@ -11,7 +11,7 @@
 package require Tcl 8.6-
 # Keep this in sync with pkgIndex.tcl and with the install directories in
 # Makefiles
-package provide http 2.8.11
+package provide http 2.8.12
 
 namespace eval http {
     # Allow resourcing to not clobber existing data
@@ -1027,6 +1027,7 @@ proc http::Event {sock token} {
            # We have now read all headers
            # We ignore HTTP/1.1 100 Continue returns. RFC2616 sec 8.2.3
            if {$state(http) == "" || ([regexp {^\S+\s(\d+)} $state(http) {} x] && $x == 100)} {
+               set state(state) "connecting"
                return
            }
 
index a0d28f1..d3fc7af 100644 (file)
@@ -1,2 +1,2 @@
 if {![package vsatisfies [package provide Tcl] 8.6-]} {return}
-package ifneeded http 2.8.11 [list tclPkgSetup $dir http 2.8.11 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister ::http::mapReply}}}]
+package ifneeded http 2.8.12 [list tclPkgSetup $dir http 2.8.12 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister ::http::mapReply}}}]
index 3684258..b3990df 100644 (file)
@@ -16,7 +16,7 @@
 if {[info commands package] == ""} {
     error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]"
 }
-package require -exact Tcl 8.6.7
+package require -exact Tcl 8.6.8
 
 # Compute the auto path to use in this interpreter.
 # The values on the path come from several locations:
@@ -624,7 +624,7 @@ proc auto_import {pattern} {
 if {$tcl_platform(platform) eq "windows"} {
 # Windows version.
 #
-# Note that info executable doesn't work under Windows, so we have to
+# Note that file executable doesn't work under Windows, so we have to
 # look for files with .exe, .com, or .bat extensions.  Also, the path
 # may be in the Path or PATH environment variables, and path
 # components are separated with semicolons, not colons as under Unix.
@@ -637,8 +637,8 @@ proc auto_execok name {
     }
     set auto_execs($name) ""
 
-    set shellBuiltins [list cls copy date del dir echo erase md mkdir \
-           mklink rd ren rename rmdir start time type ver vol]
+    set shellBuiltins [list assoc cls copy date del dir echo erase ftype \
+           md mkdir mklink move rd ren rename rmdir start time type ver vol]
     if {[info exists env(PATHEXT)]} {
        # Add an initial ; to have the {} extension check first.
        set execExtensions [split ";$env(PATHEXT)" ";"]
index 7cdb703..72c5dc0 100644 (file)
@@ -1,2 +1,2 @@
-if {![package vsatisfies [package provide Tcl] 8.5]} {return}
+if {![package vsatisfies [package provide Tcl] 8.5-]} {return}
 package ifneeded msgcat 1.6.1 [list source [file join $dir msgcat.tcl]]
index 40551f2..a0dbf5e 100644 (file)
@@ -1,5 +1,39 @@
 # created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(Africa/Khartoum)]} {
-    LoadTimeZoneFile Africa/Khartoum
+
+set TZData(:Africa/Juba) {
+    {-9223372036854775808 7588 0 LMT}
+    {-1230775588 7200 0 CAT}
+    {10360800 10800 1 CAST}
+    {24786000 7200 0 CAT}
+    {41810400 10800 1 CAST}
+    {56322000 7200 0 CAT}
+    {73432800 10800 1 CAST}
+    {87944400 7200 0 CAT}
+    {104882400 10800 1 CAST}
+    {119480400 7200 0 CAT}
+    {136332000 10800 1 CAST}
+    {151016400 7200 0 CAT}
+    {167781600 10800 1 CAST}
+    {182552400 7200 0 CAT}
+    {199231200 10800 1 CAST}
+    {214174800 7200 0 CAT}
+    {230680800 10800 1 CAST}
+    {245710800 7200 0 CAT}
+    {262735200 10800 1 CAST}
+    {277246800 7200 0 CAT}
+    {294184800 10800 1 CAST}
+    {308782800 7200 0 CAT}
+    {325634400 10800 1 CAST}
+    {340405200 7200 0 CAT}
+    {357084000 10800 1 CAST}
+    {371941200 7200 0 CAT}
+    {388533600 10800 1 CAST}
+    {403477200 7200 0 CAT}
+    {419983200 10800 1 CAST}
+    {435013200 7200 0 CAT}
+    {452037600 10800 1 CAST}
+    {466635600 7200 0 CAT}
+    {483487200 10800 1 CAST}
+    {498171600 7200 0 CAT}
+    {947930400 10800 0 EAT}
 }
-set TZData(:Africa/Juba) $TZData(:Africa/Khartoum)
index dfcac82..dc441f6 100644 (file)
@@ -36,4 +36,5 @@ set TZData(:Africa/Khartoum) {
     {483487200 10800 1 CAST}
     {498171600 7200 0 CAT}
     {947930400 10800 0 EAT}
+    {1509483600 7200 0 CAT}
 }
index 1b8f86a..974ebda 100644 (file)
@@ -7,7 +7,8 @@ set TZData(:Africa/Windhoek) {
     {-860976000 10800 1 SAST}
     {-845254800 7200 0 SAST}
     {637970400 7200 0 CAT}
-    {765324000 3600 0 WAT}
+    {764200800 3600 0 WAT}
+    {764204400 3600 0 WAT}
     {778640400 7200 1 WAST}
     {796780800 3600 0 WAT}
     {810090000 7200 1 WAST}
@@ -54,169 +55,5 @@ set TZData(:Africa/Windhoek) {
     {1459641600 3600 0 WAT}
     {1472950800 7200 1 WAST}
     {1491091200 3600 0 WAT}
-    {1504400400 7200 1 WAST}
-    {1522540800 3600 0 WAT}
-    {1535850000 7200 1 WAST}
-    {1554595200 3600 0 WAT}
-    {1567299600 7200 1 WAST}
-    {1586044800 3600 0 WAT}
-    {1599354000 7200 1 WAST}
-    {1617494400 3600 0 WAT}
-    {1630803600 7200 1 WAST}
-    {1648944000 3600 0 WAT}
-    {1662253200 7200 1 WAST}
-    {1680393600 3600 0 WAT}
-    {1693702800 7200 1 WAST}
-    {1712448000 3600 0 WAT}
-    {1725152400 7200 1 WAST}
-    {1743897600 3600 0 WAT}
-    {1757206800 7200 1 WAST}
-    {1775347200 3600 0 WAT}
-    {1788656400 7200 1 WAST}
-    {1806796800 3600 0 WAT}
-    {1820106000 7200 1 WAST}
-    {1838246400 3600 0 WAT}
-    {1851555600 7200 1 WAST}
-    {1869696000 3600 0 WAT}
-    {1883005200 7200 1 WAST}
-    {1901750400 3600 0 WAT}
-    {1914454800 7200 1 WAST}
-    {1933200000 3600 0 WAT}
-    {1946509200 7200 1 WAST}
-    {1964649600 3600 0 WAT}
-    {1977958800 7200 1 WAST}
-    {1996099200 3600 0 WAT}
-    {2009408400 7200 1 WAST}
-    {2027548800 3600 0 WAT}
-    {2040858000 7200 1 WAST}
-    {2058998400 3600 0 WAT}
-    {2072307600 7200 1 WAST}
-    {2091052800 3600 0 WAT}
-    {2104362000 7200 1 WAST}
-    {2122502400 3600 0 WAT}
-    {2135811600 7200 1 WAST}
-    {2153952000 3600 0 WAT}
-    {2167261200 7200 1 WAST}
-    {2185401600 3600 0 WAT}
-    {2198710800 7200 1 WAST}
-    {2216851200 3600 0 WAT}
-    {2230160400 7200 1 WAST}
-    {2248905600 3600 0 WAT}
-    {2261610000 7200 1 WAST}
-    {2280355200 3600 0 WAT}
-    {2293664400 7200 1 WAST}
-    {2311804800 3600 0 WAT}
-    {2325114000 7200 1 WAST}
-    {2343254400 3600 0 WAT}
-    {2356563600 7200 1 WAST}
-    {2374704000 3600 0 WAT}
-    {2388013200 7200 1 WAST}
-    {2406153600 3600 0 WAT}
-    {2419462800 7200 1 WAST}
-    {2438208000 3600 0 WAT}
-    {2450912400 7200 1 WAST}
-    {2469657600 3600 0 WAT}
-    {2482966800 7200 1 WAST}
-    {2501107200 3600 0 WAT}
-    {2514416400 7200 1 WAST}
-    {2532556800 3600 0 WAT}
-    {2545866000 7200 1 WAST}
-    {2564006400 3600 0 WAT}
-    {2577315600 7200 1 WAST}
-    {2596060800 3600 0 WAT}
-    {2608765200 7200 1 WAST}
-    {2627510400 3600 0 WAT}
-    {2640819600 7200 1 WAST}
-    {2658960000 3600 0 WAT}
-    {2672269200 7200 1 WAST}
-    {2690409600 3600 0 WAT}
-    {2703718800 7200 1 WAST}
-    {2721859200 3600 0 WAT}
-    {2735168400 7200 1 WAST}
-    {2753308800 3600 0 WAT}
-    {2766618000 7200 1 WAST}
-    {2785363200 3600 0 WAT}
-    {2798067600 7200 1 WAST}
-    {2816812800 3600 0 WAT}
-    {2830122000 7200 1 WAST}
-    {2848262400 3600 0 WAT}
-    {2861571600 7200 1 WAST}
-    {2879712000 3600 0 WAT}
-    {2893021200 7200 1 WAST}
-    {2911161600 3600 0 WAT}
-    {2924470800 7200 1 WAST}
-    {2942611200 3600 0 WAT}
-    {2955920400 7200 1 WAST}
-    {2974665600 3600 0 WAT}
-    {2987974800 7200 1 WAST}
-    {3006115200 3600 0 WAT}
-    {3019424400 7200 1 WAST}
-    {3037564800 3600 0 WAT}
-    {3050874000 7200 1 WAST}
-    {3069014400 3600 0 WAT}
-    {3082323600 7200 1 WAST}
-    {3100464000 3600 0 WAT}
-    {3113773200 7200 1 WAST}
-    {3132518400 3600 0 WAT}
-    {3145222800 7200 1 WAST}
-    {3163968000 3600 0 WAT}
-    {3177277200 7200 1 WAST}
-    {3195417600 3600 0 WAT}
-    {3208726800 7200 1 WAST}
-    {3226867200 3600 0 WAT}
-    {3240176400 7200 1 WAST}
-    {3258316800 3600 0 WAT}
-    {3271626000 7200 1 WAST}
-    {3289766400 3600 0 WAT}
-    {3303075600 7200 1 WAST}
-    {3321820800 3600 0 WAT}
-    {3334525200 7200 1 WAST}
-    {3353270400 3600 0 WAT}
-    {3366579600 7200 1 WAST}
-    {3384720000 3600 0 WAT}
-    {3398029200 7200 1 WAST}
-    {3416169600 3600 0 WAT}
-    {3429478800 7200 1 WAST}
-    {3447619200 3600 0 WAT}
-    {3460928400 7200 1 WAST}
-    {3479673600 3600 0 WAT}
-    {3492378000 7200 1 WAST}
-    {3511123200 3600 0 WAT}
-    {3524432400 7200 1 WAST}
-    {3542572800 3600 0 WAT}
-    {3555882000 7200 1 WAST}
-    {3574022400 3600 0 WAT}
-    {3587331600 7200 1 WAST}
-    {3605472000 3600 0 WAT}
-    {3618781200 7200 1 WAST}
-    {3636921600 3600 0 WAT}
-    {3650230800 7200 1 WAST}
-    {3668976000 3600 0 WAT}
-    {3681680400 7200 1 WAST}
-    {3700425600 3600 0 WAT}
-    {3713734800 7200 1 WAST}
-    {3731875200 3600 0 WAT}
-    {3745184400 7200 1 WAST}
-    {3763324800 3600 0 WAT}
-    {3776634000 7200 1 WAST}
-    {3794774400 3600 0 WAT}
-    {3808083600 7200 1 WAST}
-    {3826224000 3600 0 WAT}
-    {3839533200 7200 1 WAST}
-    {3858278400 3600 0 WAT}
-    {3871587600 7200 1 WAST}
-    {3889728000 3600 0 WAT}
-    {3903037200 7200 1 WAST}
-    {3921177600 3600 0 WAT}
-    {3934486800 7200 1 WAST}
-    {3952627200 3600 0 WAT}
-    {3965936400 7200 1 WAST}
-    {3984076800 3600 0 WAT}
-    {3997386000 7200 1 WAST}
-    {4016131200 3600 0 WAT}
-    {4028835600 7200 1 WAST}
-    {4047580800 3600 0 WAT}
-    {4060890000 7200 1 WAST}
-    {4079030400 3600 0 WAT}
-    {4092339600 7200 1 WAST}
+    {1504400400 7200 0 CAT}
 }
index bd5d5ab..04c4628 100644 (file)
@@ -1,8 +1,8 @@
 # created by tools/tclZIC.tcl - do not edit
 
 set TZData(:America/Adak) {
-    {-9223372036854775808 44001 0 LMT}
-    {-3225356001 -42398 0 LMT}
+    {-9223372036854775808 44002 0 LMT}
+    {-3225223727 -42398 0 LMT}
     {-2188944802 -39600 0 NST}
     {-883573200 -39600 0 NST}
     {-880196400 -36000 1 NWT}
index 127d365..c0ff8de 100644 (file)
@@ -2,7 +2,7 @@
 
 set TZData(:America/Anchorage) {
     {-9223372036854775808 50424 0 LMT}
-    {-3225362424 -35976 0 LMT}
+    {-3225223727 -35976 0 LMT}
     {-2188951224 -36000 0 AST}
     {-883576800 -36000 0 AST}
     {-880200000 -32400 1 AWT}
index 696a663..f725874 100644 (file)
@@ -11,8 +11,6 @@ set TZData(:America/Detroit) {
     {-757364400 -18000 0 EST}
     {-684349200 -14400 1 EDT}
     {-671047200 -18000 0 EST}
-    {-80499600 -14400 1 EDT}
-    {-68666400 -18000 0 EST}
     {94712400 -18000 0 EST}
     {104914800 -14400 1 EDT}
     {120636000 -18000 0 EST}
index 0edcf0b..c963adc 100644 (file)
@@ -79,4 +79,168 @@ set TZData(:America/Grand_Turk) {
     {1414908000 -18000 0 EST}
     {1425798000 -14400 1 EDT}
     {1446361200 -14400 0 AST}
+    {1520751600 -14400 0 EDT}
+    {1541311200 -18000 0 EST}
+    {1552201200 -14400 1 EDT}
+    {1572760800 -18000 0 EST}
+    {1583650800 -14400 1 EDT}
+    {1604210400 -18000 0 EST}
+    {1615705200 -14400 1 EDT}
+    {1636264800 -18000 0 EST}
+    {1647154800 -14400 1 EDT}
+    {1667714400 -18000 0 EST}
+    {1678604400 -14400 1 EDT}
+    {1699164000 -18000 0 EST}
+    {1710054000 -14400 1 EDT}
+    {1730613600 -18000 0 EST}
+    {1741503600 -14400 1 EDT}
+    {1762063200 -18000 0 EST}
+    {1772953200 -14400 1 EDT}
+    {1793512800 -18000 0 EST}
+    {1805007600 -14400 1 EDT}
+    {1825567200 -18000 0 EST}
+    {1836457200 -14400 1 EDT}
+    {1857016800 -18000 0 EST}
+    {1867906800 -14400 1 EDT}
+    {1888466400 -18000 0 EST}
+    {1899356400 -14400 1 EDT}
+    {1919916000 -18000 0 EST}
+    {1930806000 -14400 1 EDT}
+    {1951365600 -18000 0 EST}
+    {1962860400 -14400 1 EDT}
+    {1983420000 -18000 0 EST}
+    {1994310000 -14400 1 EDT}
+    {2014869600 -18000 0 EST}
+    {2025759600 -14400 1 EDT}
+    {2046319200 -18000 0 EST}
+    {2057209200 -14400 1 EDT}
+    {2077768800 -18000 0 EST}
+    {2088658800 -14400 1 EDT}
+    {2109218400 -18000 0 EST}
+    {2120108400 -14400 1 EDT}
+    {2140668000 -18000 0 EST}
+    {2152162800 -14400 1 EDT}
+    {2172722400 -18000 0 EST}
+    {2183612400 -14400 1 EDT}
+    {2204172000 -18000 0 EST}
+    {2215062000 -14400 1 EDT}
+    {2235621600 -18000 0 EST}
+    {2246511600 -14400 1 EDT}
+    {2267071200 -18000 0 EST}
+    {2277961200 -14400 1 EDT}
+    {2298520800 -18000 0 EST}
+    {2309410800 -14400 1 EDT}
+    {2329970400 -18000 0 EST}
+    {2341465200 -14400 1 EDT}
+    {2362024800 -18000 0 EST}
+    {2372914800 -14400 1 EDT}
+    {2393474400 -18000 0 EST}
+    {2404364400 -14400 1 EDT}
+    {2424924000 -18000 0 EST}
+    {2435814000 -14400 1 EDT}
+    {2456373600 -18000 0 EST}
+    {2467263600 -14400 1 EDT}
+    {2487823200 -18000 0 EST}
+    {2499318000 -14400 1 EDT}
+    {2519877600 -18000 0 EST}
+    {2530767600 -14400 1 EDT}
+    {2551327200 -18000 0 EST}
+    {2562217200 -14400 1 EDT}
+    {2582776800 -18000 0 EST}
+    {2593666800 -14400 1 EDT}
+    {2614226400 -18000 0 EST}
+    {2625116400 -14400 1 EDT}
+    {2645676000 -18000 0 EST}
+    {2656566000 -14400 1 EDT}
+    {2677125600 -18000 0 EST}
+    {2688620400 -14400 1 EDT}
+    {2709180000 -18000 0 EST}
+    {2720070000 -14400 1 EDT}
+    {2740629600 -18000 0 EST}
+    {2751519600 -14400 1 EDT}
+    {2772079200 -18000 0 EST}
+    {2782969200 -14400 1 EDT}
+    {2803528800 -18000 0 EST}
+    {2814418800 -14400 1 EDT}
+    {2834978400 -18000 0 EST}
+    {2846473200 -14400 1 EDT}
+    {2867032800 -18000 0 EST}
+    {2877922800 -14400 1 EDT}
+    {2898482400 -18000 0 EST}
+    {2909372400 -14400 1 EDT}
+    {2929932000 -18000 0 EST}
+    {2940822000 -14400 1 EDT}
+    {2961381600 -18000 0 EST}
+    {2972271600 -14400 1 EDT}
+    {2992831200 -18000 0 EST}
+    {3003721200 -14400 1 EDT}
+    {3024280800 -18000 0 EST}
+    {3035775600 -14400 1 EDT}
+    {3056335200 -18000 0 EST}
+    {3067225200 -14400 1 EDT}
+    {3087784800 -18000 0 EST}
+    {3098674800 -14400 1 EDT}
+    {3119234400 -18000 0 EST}
+    {3130124400 -14400 1 EDT}
+    {3150684000 -18000 0 EST}
+    {3161574000 -14400 1 EDT}
+    {3182133600 -18000 0 EST}
+    {3193023600 -14400 1 EDT}
+    {3213583200 -18000 0 EST}
+    {3225078000 -14400 1 EDT}
+    {3245637600 -18000 0 EST}
+    {3256527600 -14400 1 EDT}
+    {3277087200 -18000 0 EST}
+    {3287977200 -14400 1 EDT}
+    {3308536800 -18000 0 EST}
+    {3319426800 -14400 1 EDT}
+    {3339986400 -18000 0 EST}
+    {3350876400 -14400 1 EDT}
+    {3371436000 -18000 0 EST}
+    {3382930800 -14400 1 EDT}
+    {3403490400 -18000 0 EST}
+    {3414380400 -14400 1 EDT}
+    {3434940000 -18000 0 EST}
+    {3445830000 -14400 1 EDT}
+    {3466389600 -18000 0 EST}
+    {3477279600 -14400 1 EDT}
+    {3497839200 -18000 0 EST}
+    {3508729200 -14400 1 EDT}
+    {3529288800 -18000 0 EST}
+    {3540178800 -14400 1 EDT}
+    {3560738400 -18000 0 EST}
+    {3572233200 -14400 1 EDT}
+    {3592792800 -18000 0 EST}
+    {3603682800 -14400 1 EDT}
+    {3624242400 -18000 0 EST}
+    {3635132400 -14400 1 EDT}
+    {3655692000 -18000 0 EST}
+    {3666582000 -14400 1 EDT}
+    {3687141600 -18000 0 EST}
+    {3698031600 -14400 1 EDT}
+    {3718591200 -18000 0 EST}
+    {3730086000 -14400 1 EDT}
+    {3750645600 -18000 0 EST}
+    {3761535600 -14400 1 EDT}
+    {3782095200 -18000 0 EST}
+    {3792985200 -14400 1 EDT}
+    {3813544800 -18000 0 EST}
+    {3824434800 -14400 1 EDT}
+    {3844994400 -18000 0 EST}
+    {3855884400 -14400 1 EDT}
+    {3876444000 -18000 0 EST}
+    {3887334000 -14400 1 EDT}
+    {3907893600 -18000 0 EST}
+    {3919388400 -14400 1 EDT}
+    {3939948000 -18000 0 EST}
+    {3950838000 -14400 1 EDT}
+    {3971397600 -18000 0 EST}
+    {3982287600 -14400 1 EDT}
+    {4002847200 -18000 0 EST}
+    {4013737200 -14400 1 EDT}
+    {4034296800 -18000 0 EST}
+    {4045186800 -14400 1 EDT}
+    {4065746400 -18000 0 EST}
+    {4076636400 -14400 1 EDT}
+    {4097196000 -18000 0 EST}
 }
index fead810..070a27a 100644 (file)
@@ -2,7 +2,7 @@
 
 set TZData(:America/Juneau) {
     {-9223372036854775808 54139 0 LMT}
-    {-3225366139 -32261 0 LMT}
+    {-3225223727 -32261 0 LMT}
     {-2188954939 -28800 0 PST}
     {-883584000 -28800 0 PST}
     {-880207200 -25200 1 PWT}
index 407948d..371fdcf 100644 (file)
@@ -2,7 +2,7 @@
 
 set TZData(:America/Metlakatla) {
     {-9223372036854775808 54822 0 LMT}
-    {-3225366822 -31578 0 LMT}
+    {-3225223727 -31578 0 LMT}
     {-2188955622 -28800 0 PST}
     {-883584000 -28800 0 PST}
     {-880207200 -25200 1 PWT}
index c095b79..d7a9186 100644 (file)
@@ -1,8 +1,8 @@
 # created by tools/tclZIC.tcl - do not edit
 
 set TZData(:America/Nome) {
-    {-9223372036854775808 46701 0 LMT}
-    {-3225358701 -39698 0 LMT}
+    {-9223372036854775808 46702 0 LMT}
+    {-3225223727 -39698 0 LMT}
     {-2188947502 -39600 0 NST}
     {-883573200 -39600 0 NST}
     {-880196400 -36000 1 NWT}
index 8c53d93..7cef02a 100644 (file)
@@ -2,7 +2,7 @@
 
 set TZData(:America/Sitka) {
     {-9223372036854775808 53927 0 LMT}
-    {-3225365927 -32473 0 LMT}
+    {-3225223727 -32473 0 LMT}
     {-2188954727 -28800 0 PST}
     {-883584000 -28800 0 PST}
     {-880207200 -25200 1 PWT}
index a0420c5..b1d66ff 100644 (file)
@@ -2,7 +2,7 @@
 
 set TZData(:America/Yakutat) {
     {-9223372036854775808 52865 0 LMT}
-    {-3225364865 -33535 0 LMT}
+    {-3225223727 -33535 0 LMT}
     {-2188953665 -32400 0 YST}
     {-883580400 -32400 0 YST}
     {-880203600 -28800 1 YWT}
index 384c183..55eade6 100644 (file)
@@ -88,4 +88,169 @@ set TZData(:Asia/Famagusta) {
     {1445734800 7200 0 EET}
     {1459040400 10800 1 EEST}
     {1473285600 10800 0 +03}
+    {1509238800 7200 0 EET}
+    {1521939600 10800 1 EEST}
+    {1540688400 7200 0 EET}
+    {1553994000 10800 1 EEST}
+    {1572138000 7200 0 EET}
+    {1585443600 10800 1 EEST}
+    {1603587600 7200 0 EET}
+    {1616893200 10800 1 EEST}
+    {1635642000 7200 0 EET}
+    {1648342800 10800 1 EEST}
+    {1667091600 7200 0 EET}
+    {1679792400 10800 1 EEST}
+    {1698541200 7200 0 EET}
+    {1711846800 10800 1 EEST}
+    {1729990800 7200 0 EET}
+    {1743296400 10800 1 EEST}
+    {1761440400 7200 0 EET}
+    {1774746000 10800 1 EEST}
+    {1792890000 7200 0 EET}
+    {1806195600 10800 1 EEST}
+    {1824944400 7200 0 EET}
+    {1837645200 10800 1 EEST}
+    {1856394000 7200 0 EET}
+    {1869094800 10800 1 EEST}
+    {1887843600 7200 0 EET}
+    {1901149200 10800 1 EEST}
+    {1919293200 7200 0 EET}
+    {1932598800 10800 1 EEST}
+    {1950742800 7200 0 EET}
+    {1964048400 10800 1 EEST}
+    {1982797200 7200 0 EET}
+    {1995498000 10800 1 EEST}
+    {2014246800 7200 0 EET}
+    {2026947600 10800 1 EEST}
+    {2045696400 7200 0 EET}
+    {2058397200 10800 1 EEST}
+    {2077146000 7200 0 EET}
+    {2090451600 10800 1 EEST}
+    {2108595600 7200 0 EET}
+    {2121901200 10800 1 EEST}
+    {2140045200 7200 0 EET}
+    {2153350800 10800 1 EEST}
+    {2172099600 7200 0 EET}
+    {2184800400 10800 1 EEST}
+    {2203549200 7200 0 EET}
+    {2216250000 10800 1 EEST}
+    {2234998800 7200 0 EET}
+    {2248304400 10800 1 EEST}
+    {2266448400 7200 0 EET}
+    {2279754000 10800 1 EEST}
+    {2297898000 7200 0 EET}
+    {2311203600 10800 1 EEST}
+    {2329347600 7200 0 EET}
+    {2342653200 10800 1 EEST}
+    {2361402000 7200 0 EET}
+    {2374102800 10800 1 EEST}
+    {2392851600 7200 0 EET}
+    {2405552400 10800 1 EEST}
+    {2424301200 7200 0 EET}
+    {2437606800 10800 1 EEST}
+    {2455750800 7200 0 EET}
+    {2469056400 10800 1 EEST}
+    {2487200400 7200 0 EET}
+    {2500506000 10800 1 EEST}
+    {2519254800 7200 0 EET}
+    {2531955600 10800 1 EEST}
+    {2550704400 7200 0 EET}
+    {2563405200 10800 1 EEST}
+    {2582154000 7200 0 EET}
+    {2595459600 10800 1 EEST}
+    {2613603600 7200 0 EET}
+    {2626909200 10800 1 EEST}
+    {2645053200 7200 0 EET}
+    {2658358800 10800 1 EEST}
+    {2676502800 7200 0 EET}
+    {2689808400 10800 1 EEST}
+    {2708557200 7200 0 EET}
+    {2721258000 10800 1 EEST}
+    {2740006800 7200 0 EET}
+    {2752707600 10800 1 EEST}
+    {2771456400 7200 0 EET}
+    {2784762000 10800 1 EEST}
+    {2802906000 7200 0 EET}
+    {2816211600 10800 1 EEST}
+    {2834355600 7200 0 EET}
+    {2847661200 10800 1 EEST}
+    {2866410000 7200 0 EET}
+    {2879110800 10800 1 EEST}
+    {2897859600 7200 0 EET}
+    {2910560400 10800 1 EEST}
+    {2929309200 7200 0 EET}
+    {2942010000 10800 1 EEST}
+    {2960758800 7200 0 EET}
+    {2974064400 10800 1 EEST}
+    {2992208400 7200 0 EET}
+    {3005514000 10800 1 EEST}
+    {3023658000 7200 0 EET}
+    {3036963600 10800 1 EEST}
+    {3055712400 7200 0 EET}
+    {3068413200 10800 1 EEST}
+    {3087162000 7200 0 EET}
+    {3099862800 10800 1 EEST}
+    {3118611600 7200 0 EET}
+    {3131917200 10800 1 EEST}
+    {3150061200 7200 0 EET}
+    {3163366800 10800 1 EEST}
+    {3181510800 7200 0 EET}
+    {3194816400 10800 1 EEST}
+    {3212960400 7200 0 EET}
+    {3226266000 10800 1 EEST}
+    {3245014800 7200 0 EET}
+    {3257715600 10800 1 EEST}
+    {3276464400 7200 0 EET}
+    {3289165200 10800 1 EEST}
+    {3307914000 7200 0 EET}
+    {3321219600 10800 1 EEST}
+    {3339363600 7200 0 EET}
+    {3352669200 10800 1 EEST}
+    {3370813200 7200 0 EET}
+    {3384118800 10800 1 EEST}
+    {3402867600 7200 0 EET}
+    {3415568400 10800 1 EEST}
+    {3434317200 7200 0 EET}
+    {3447018000 10800 1 EEST}
+    {3465766800 7200 0 EET}
+    {3479072400 10800 1 EEST}
+    {3497216400 7200 0 EET}
+    {3510522000 10800 1 EEST}
+    {3528666000 7200 0 EET}
+    {3541971600 10800 1 EEST}
+    {3560115600 7200 0 EET}
+    {3573421200 10800 1 EEST}
+    {3592170000 7200 0 EET}
+    {3604870800 10800 1 EEST}
+    {3623619600 7200 0 EET}
+    {3636320400 10800 1 EEST}
+    {3655069200 7200 0 EET}
+    {3668374800 10800 1 EEST}
+    {3686518800 7200 0 EET}
+    {3699824400 10800 1 EEST}
+    {3717968400 7200 0 EET}
+    {3731274000 10800 1 EEST}
+    {3750022800 7200 0 EET}
+    {3762723600 10800 1 EEST}
+    {3781472400 7200 0 EET}
+    {3794173200 10800 1 EEST}
+    {3812922000 7200 0 EET}
+    {3825622800 10800 1 EEST}
+    {3844371600 7200 0 EET}
+    {3857677200 10800 1 EEST}
+    {3875821200 7200 0 EET}
+    {3889126800 10800 1 EEST}
+    {3907270800 7200 0 EET}
+    {3920576400 10800 1 EEST}
+    {3939325200 7200 0 EET}
+    {3952026000 10800 1 EEST}
+    {3970774800 7200 0 EET}
+    {3983475600 10800 1 EEST}
+    {4002224400 7200 0 EET}
+    {4015530000 10800 1 EEST}
+    {4033674000 7200 0 EET}
+    {4046979600 10800 1 EEST}
+    {4065123600 7200 0 EET}
+    {4078429200 10800 1 EEST}
+    {4096573200 7200 0 EET}
 }
index 6b3b9fb..b78f8cd 100644 (file)
@@ -2,8 +2,10 @@
 
 set TZData(:Asia/Kolkata) {
     {-9223372036854775808 21208 0 LMT}
-    {-2840162008 21200 0 HMT}
-    {-891582800 23400 0 +0630}
+    {-3645237208 21200 0 HMT}
+    {-3155694800 19270 0 MMT}
+    {-2019705670 19800 0 IST}
+    {-891581400 23400 1 +0630}
     {-872058600 19800 0 IST}
     {-862637400 23400 1 +0630}
     {-764145000 19800 0 IST}
index 8e17d82..82870c6 100644 (file)
@@ -1,9 +1,9 @@
 # created by tools/tclZIC.tcl - do not edit
 
 set TZData(:Asia/Yangon) {
-    {-9223372036854775808 23080 0 LMT}
-    {-2840163880 23080 0 RMT}
-    {-1577946280 23400 0 +0630}
+    {-9223372036854775808 23087 0 LMT}
+    {-2840163887 23087 0 RMT}
+    {-1577946287 23400 0 +0630}
     {-873268200 32400 0 +09}
     {-778410000 23400 0 +0630}
 }
index 0ffb69e..25a349a 100644 (file)
@@ -64,6 +64,7 @@ set TZData(:Asia/Yerevan) {
     {1256421600 14400 0 +04}
     {1269727200 18000 1 +05}
     {1288476000 14400 0 +04}
+    {1293825600 14400 0 +04}
     {1301176800 18000 1 +05}
     {1319925600 14400 0 +04}
 }
index 4b43bc0..c3a5c0e 100644 (file)
@@ -52,10 +52,10 @@ set TZData(:Europe/Dublin) {
     {-986162400 0 0 IST}
     {-969228000 3600 1 IST}
     {-950479200 0 0 IST}
-    {-942015600 3600 1 IST}
-    {-733359600 0 0 GMT}
+    {-942012000 3600 1 IST}
+    {-733356000 0 0 GMT}
     {-719445600 3600 1 IST}
-    {-699490800 0 0 GMT}
+    {-699487200 0 0 GMT}
     {-684972000 3600 0 IST}
     {-668037600 0 0 IST}
     {-654732000 3600 1 IST}
index feef374..4c0d84a 100644 (file)
@@ -2,7 +2,7 @@
 
 set TZData(:Pacific/Apia) {
     {-9223372036854775808 45184 0 LMT}
-    {-2855737984 -41216 0 LMT}
+    {-2445424384 -41216 0 LMT}
     {-1861878784 -41400 0 -1130}
     {-631110600 -39600 0 -10}
     {1285498800 -36000 1 -10}
index fa8c99e..f9d393c 100644 (file)
@@ -24,7 +24,7 @@ set TZData(:Pacific/Fiji) {
     {1478354400 46800 1 +13}
     {1484402400 43200 0 +12}
     {1509804000 46800 1 +13}
-    {1516456800 43200 0 +12}
+    {1515852000 43200 0 +12}
     {1541253600 46800 1 +13}
     {1547906400 43200 0 +12}
     {1572703200 46800 1 +13}
@@ -36,7 +36,7 @@ set TZData(:Pacific/Fiji) {
     {1667656800 46800 1 +13}
     {1673704800 43200 0 +12}
     {1699106400 46800 1 +13}
-    {1705759200 43200 0 +12}
+    {1705154400 43200 0 +12}
     {1730556000 46800 1 +13}
     {1737208800 43200 0 +12}
     {1762005600 46800 1 +13}
@@ -46,7 +46,7 @@ set TZData(:Pacific/Fiji) {
     {1825509600 46800 1 +13}
     {1831557600 43200 0 +12}
     {1856959200 46800 1 +13}
-    {1863612000 43200 0 +12}
+    {1863007200 43200 0 +12}
     {1888408800 46800 1 +13}
     {1895061600 43200 0 +12}
     {1919858400 46800 1 +13}
@@ -58,7 +58,7 @@ set TZData(:Pacific/Fiji) {
     {2014812000 46800 1 +13}
     {2020860000 43200 0 +12}
     {2046261600 46800 1 +13}
-    {2052914400 43200 0 +12}
+    {2052309600 43200 0 +12}
     {2077711200 46800 1 +13}
     {2084364000 43200 0 +12}
     {2109160800 46800 1 +13}
@@ -80,7 +80,7 @@ set TZData(:Pacific/Fiji) {
     {2361967200 46800 1 +13}
     {2368015200 43200 0 +12}
     {2393416800 46800 1 +13}
-    {2400069600 43200 0 +12}
+    {2399464800 43200 0 +12}
     {2424866400 46800 1 +13}
     {2431519200 43200 0 +12}
     {2456316000 46800 1 +13}
@@ -92,7 +92,7 @@ set TZData(:Pacific/Fiji) {
     {2551269600 46800 1 +13}
     {2557317600 43200 0 +12}
     {2582719200 46800 1 +13}
-    {2589372000 43200 0 +12}
+    {2588767200 43200 0 +12}
     {2614168800 46800 1 +13}
     {2620821600 43200 0 +12}
     {2645618400 46800 1 +13}
@@ -102,7 +102,7 @@ set TZData(:Pacific/Fiji) {
     {2709122400 46800 1 +13}
     {2715170400 43200 0 +12}
     {2740572000 46800 1 +13}
-    {2747224800 43200 0 +12}
+    {2746620000 43200 0 +12}
     {2772021600 46800 1 +13}
     {2778674400 43200 0 +12}
     {2803471200 46800 1 +13}
@@ -114,7 +114,7 @@ set TZData(:Pacific/Fiji) {
     {2898424800 46800 1 +13}
     {2904472800 43200 0 +12}
     {2929874400 46800 1 +13}
-    {2936527200 43200 0 +12}
+    {2935922400 43200 0 +12}
     {2961324000 46800 1 +13}
     {2967976800 43200 0 +12}
     {2992773600 46800 1 +13}
@@ -136,7 +136,7 @@ set TZData(:Pacific/Fiji) {
     {3245580000 46800 1 +13}
     {3251628000 43200 0 +12}
     {3277029600 46800 1 +13}
-    {3283682400 43200 0 +12}
+    {3283077600 43200 0 +12}
     {3308479200 46800 1 +13}
     {3315132000 43200 0 +12}
     {3339928800 46800 1 +13}
@@ -148,7 +148,7 @@ set TZData(:Pacific/Fiji) {
     {3434882400 46800 1 +13}
     {3440930400 43200 0 +12}
     {3466332000 46800 1 +13}
-    {3472984800 43200 0 +12}
+    {3472380000 43200 0 +12}
     {3497781600 46800 1 +13}
     {3504434400 43200 0 +12}
     {3529231200 46800 1 +13}
@@ -158,7 +158,7 @@ set TZData(:Pacific/Fiji) {
     {3592735200 46800 1 +13}
     {3598783200 43200 0 +12}
     {3624184800 46800 1 +13}
-    {3630837600 43200 0 +12}
+    {3630232800 43200 0 +12}
     {3655634400 46800 1 +13}
     {3662287200 43200 0 +12}
     {3687084000 46800 1 +13}
@@ -170,7 +170,7 @@ set TZData(:Pacific/Fiji) {
     {3782037600 46800 1 +13}
     {3788085600 43200 0 +12}
     {3813487200 46800 1 +13}
-    {3820140000 43200 0 +12}
+    {3819535200 43200 0 +12}
     {3844936800 46800 1 +13}
     {3851589600 43200 0 +12}
     {3876386400 46800 1 +13}
index d30c981..9b5607f 100644 (file)
@@ -2,6 +2,6 @@
 
 set TZData(:Pacific/Pago_Pago) {
     {-9223372036854775808 45432 0 LMT}
-    {-2855738232 -40968 0 LMT}
+    {-2445424632 -40968 0 LMT}
     {-1861879032 -39600 0 SST}
 }
index 731b4f6..3cfaaaa 100644 (file)
@@ -13,169 +13,4 @@ set TZData(:Pacific/Tongatapu) {
     {1012046400 46800 0 +13}
     {1478350800 50400 1 +14}
     {1484398800 46800 0 +13}
-    {1509800400 50400 1 +14}
-    {1516453200 46800 0 +13}
-    {1541250000 50400 1 +14}
-    {1547902800 46800 0 +13}
-    {1572699600 50400 1 +14}
-    {1579352400 46800 0 +13}
-    {1604149200 50400 1 +14}
-    {1610802000 46800 0 +13}
-    {1636203600 50400 1 +14}
-    {1642251600 46800 0 +13}
-    {1667653200 50400 1 +14}
-    {1673701200 46800 0 +13}
-    {1699102800 50400 1 +14}
-    {1705755600 46800 0 +13}
-    {1730552400 50400 1 +14}
-    {1737205200 46800 0 +13}
-    {1762002000 50400 1 +14}
-    {1768654800 46800 0 +13}
-    {1793451600 50400 1 +14}
-    {1800104400 46800 0 +13}
-    {1825506000 50400 1 +14}
-    {1831554000 46800 0 +13}
-    {1856955600 50400 1 +14}
-    {1863608400 46800 0 +13}
-    {1888405200 50400 1 +14}
-    {1895058000 46800 0 +13}
-    {1919854800 50400 1 +14}
-    {1926507600 46800 0 +13}
-    {1951304400 50400 1 +14}
-    {1957957200 46800 0 +13}
-    {1983358800 50400 1 +14}
-    {1989406800 46800 0 +13}
-    {2014808400 50400 1 +14}
-    {2020856400 46800 0 +13}
-    {2046258000 50400 1 +14}
-    {2052910800 46800 0 +13}
-    {2077707600 50400 1 +14}
-    {2084360400 46800 0 +13}
-    {2109157200 50400 1 +14}
-    {2115810000 46800 0 +13}
-    {2140606800 50400 1 +14}
-    {2147259600 46800 0 +13}
-    {2172661200 50400 1 +14}
-    {2178709200 46800 0 +13}
-    {2204110800 50400 1 +14}
-    {2210158800 46800 0 +13}
-    {2235560400 50400 1 +14}
-    {2242213200 46800 0 +13}
-    {2267010000 50400 1 +14}
-    {2273662800 46800 0 +13}
-    {2298459600 50400 1 +14}
-    {2305112400 46800 0 +13}
-    {2329909200 50400 1 +14}
-    {2336562000 46800 0 +13}
-    {2361963600 50400 1 +14}
-    {2368011600 46800 0 +13}
-    {2393413200 50400 1 +14}
-    {2400066000 46800 0 +13}
-    {2424862800 50400 1 +14}
-    {2431515600 46800 0 +13}
-    {2456312400 50400 1 +14}
-    {2462965200 46800 0 +13}
-    {2487762000 50400 1 +14}
-    {2494414800 46800 0 +13}
-    {2519816400 50400 1 +14}
-    {2525864400 46800 0 +13}
-    {2551266000 50400 1 +14}
-    {2557314000 46800 0 +13}
-    {2582715600 50400 1 +14}
-    {2589368400 46800 0 +13}
-    {2614165200 50400 1 +14}
-    {2620818000 46800 0 +13}
-    {2645614800 50400 1 +14}
-    {2652267600 46800 0 +13}
-    {2677064400 50400 1 +14}
-    {2683717200 46800 0 +13}
-    {2709118800 50400 1 +14}
-    {2715166800 46800 0 +13}
-    {2740568400 50400 1 +14}
-    {2747221200 46800 0 +13}
-    {2772018000 50400 1 +14}
-    {2778670800 46800 0 +13}
-    {2803467600 50400 1 +14}
-    {2810120400 46800 0 +13}
-    {2834917200 50400 1 +14}
-    {2841570000 46800 0 +13}
-    {2866971600 50400 1 +14}
-    {2873019600 46800 0 +13}
-    {2898421200 50400 1 +14}
-    {2904469200 46800 0 +13}
-    {2929870800 50400 1 +14}
-    {2936523600 46800 0 +13}
-    {2961320400 50400 1 +14}
-    {2967973200 46800 0 +13}
-    {2992770000 50400 1 +14}
-    {2999422800 46800 0 +13}
-    {3024219600 50400 1 +14}
-    {3030872400 46800 0 +13}
-    {3056274000 50400 1 +14}
-    {3062322000 46800 0 +13}
-    {3087723600 50400 1 +14}
-    {3093771600 46800 0 +13}
-    {3119173200 50400 1 +14}
-    {3125826000 46800 0 +13}
-    {3150622800 50400 1 +14}
-    {3157275600 46800 0 +13}
-    {3182072400 50400 1 +14}
-    {3188725200 46800 0 +13}
-    {3213522000 50400 1 +14}
-    {3220174800 46800 0 +13}
-    {3245576400 50400 1 +14}
-    {3251624400 46800 0 +13}
-    {3277026000 50400 1 +14}
-    {3283678800 46800 0 +13}
-    {3308475600 50400 1 +14}
-    {3315128400 46800 0 +13}
-    {3339925200 50400 1 +14}
-    {3346578000 46800 0 +13}
-    {3371374800 50400 1 +14}
-    {3378027600 46800 0 +13}
-    {3403429200 50400 1 +14}
-    {3409477200 46800 0 +13}
-    {3434878800 50400 1 +14}
-    {3440926800 46800 0 +13}
-    {3466328400 50400 1 +14}
-    {3472981200 46800 0 +13}
-    {3497778000 50400 1 +14}
-    {3504430800 46800 0 +13}
-    {3529227600 50400 1 +14}
-    {3535880400 46800 0 +13}
-    {3560677200 50400 1 +14}
-    {3567330000 46800 0 +13}
-    {3592731600 50400 1 +14}
-    {3598779600 46800 0 +13}
-    {3624181200 50400 1 +14}
-    {3630834000 46800 0 +13}
-    {3655630800 50400 1 +14}
-    {3662283600 46800 0 +13}
-    {3687080400 50400 1 +14}
-    {3693733200 46800 0 +13}
-    {3718530000 50400 1 +14}
-    {3725182800 46800 0 +13}
-    {3750584400 50400 1 +14}
-    {3756632400 46800 0 +13}
-    {3782034000 50400 1 +14}
-    {3788082000 46800 0 +13}
-    {3813483600 50400 1 +14}
-    {3820136400 46800 0 +13}
-    {3844933200 50400 1 +14}
-    {3851586000 46800 0 +13}
-    {3876382800 50400 1 +14}
-    {3883035600 46800 0 +13}
-    {3907832400 50400 1 +14}
-    {3914485200 46800 0 +13}
-    {3939886800 50400 1 +14}
-    {3945934800 46800 0 +13}
-    {3971336400 50400 1 +14}
-    {3977384400 46800 0 +13}
-    {4002786000 50400 1 +14}
-    {4009438800 46800 0 +13}
-    {4034235600 50400 1 +14}
-    {4040888400 46800 0 +13}
-    {4065685200 50400 1 +14}
-    {4072338000 46800 0 +13}
-    {4097134800 50400 1 +14}
 }
index 6429ef0..7395ea0 100755 (executable)
@@ -2331,7 +2331,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 TCL_VERSION=8.6
 TCL_MAJOR_VERSION=8
 TCL_MINOR_VERSION=6
-TCL_PATCH_LEVEL=".7"
+TCL_PATCH_LEVEL=".8"
 VERSION=${TCL_VERSION}
 
 EXTRA_INSTALL_BINARIES=${EXTRA_INSTALL_BINARIES:-"@:"}
@@ -5333,7 +5333,7 @@ $as_echo "$ac_cv_cygwin" >&6; }
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            DL_OBJS="tclLoadDl.o"
            DL_LIBS="-lroot"
            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5
@@ -5655,7 +5655,7 @@ fi
            # get rid of the warnings.
            #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES"
 
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            DL_OBJS="tclLoadDl.o"
            DL_LIBS="-ldl"
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
@@ -5763,7 +5763,7 @@ fi
                SHLIB_CFLAGS="-fpic"
                ;;
            esac
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            DL_OBJS="tclLoadDl.o"
            DL_LIBS=""
@@ -5790,7 +5790,7 @@ fi
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            DL_OBJS="tclLoadDl.o"
            DL_LIBS=""
diff --git a/pkgs/itcl4.1.0/win/makefile.vc b/pkgs/itcl4.1.0/win/makefile.vc
deleted file mode 100644 (file)
index 236b2a0..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-#------------------------------------------------------------------------------
-# Visual C++ 5.0+ makefile for [Incr Tcl]
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-# 
-# Copyright (c) 1993-1998 Lucent Technologies, Inc.
-#------------------------------------------------------------------------------
-#  There is no requirement to modify this file to generate a build.
-#------------------------------------------------------------------------------
-
-# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
-# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
-!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)
-MSG = ^
-You need to run vcvars32.bat from Developer Studio or setenv.bat from the^
-Platform SDK first to setup the environment.  Jump to this line to read^
-the build instructions.
-!error $(MSG)
-!endif
-
-!if !exist("makefile.vc")
-MSG = ^
-You must run this makefile only from the directory it is in.^
-Please `cd` to its location first.
-!error $(MSG) 
-!endif
-
-PROJECT        = itcl
-!include "rules.vc"
-
-!if $(TCLINSTALL)
-!message *** Warning: [Incr Tcl] requires the source distribution of Tcl to build from,
-!message ***    at this time, sorry.  Please set the TCLDIR macro to point to the
-!message ***    sources.
-!endif
-
-!if [echo REM = This file is generated from rules.vc > versions.vc]
-!endif
-!if [echo ITCL_VERSION = \>> versions.vc] \
-   && [nmakehlp -V ..\generic\itcl.h ITCL_VERSION >> versions.vc]
-!endif
-!if [echo ITCL_MAJOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V ..\generic\itcl.h ITCL_MAJOR_VERSION >> versions.vc]
-!endif
-!if [echo ITCL_MINOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V ..\generic\itcl.h ITCL_MINOR_VERSION >> versions.vc]
-!endif
-!if [echo ITCL_PATCH_LEVEL = \>> versions.vc] \
-   && [nmakehlp -V ..\generic\itcl.h ITCL_PATCH_LEVEL >> versions.vc]
-!endif
-!include "versions.vc"
-
-
-BINROOT                = .
-ROOT           = ..
-STUBPREFIX     = $(PROJECT)stub
-DOTVERSION      = $(ITCL_PATCH_LEVEL)
-VERSION         = $(ITCL_MAJOR_VERSION)$(ITCL_MINOR_VERSION)
-
-PKGINDEX       = "$(TMP_DIR)\pkgIndex.tcl"
-ITCLLIBNAME    = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
-ITCLLIB                = "$(OUT_DIR)\$(ITCLLIBNAME)"
-ITCLIMPLIB     = "$(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib"
-ITCLSTUBLIBNAME        = $(STUBPREFIX)$(VERSION).lib
-ITCLSTUBLIB    = "$(OUT_DIR)\$(ITCLSTUBLIBNAME)"
-
-BIN_INSTALL_DIR                = $(_INSTALLDIR)\..\bin
-DOC_INSTALL_DIR                = $(_INSTALLDIR)\..\doc
-LIB_INSTALL_DIR                = $(_INSTALLDIR)
-SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)
-INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\..\include
-
-ITCLOBJS = \
-        $(TMP_DIR)\itcl2TclOO.obj \
-        $(TMP_DIR)\itclBase.obj \
-        $(TMP_DIR)\itclBuiltin.obj \
-        $(TMP_DIR)\itclClass.obj \
-        $(TMP_DIR)\itclCmd.obj \
-        $(TMP_DIR)\itclEnsemble.obj \
-        $(TMP_DIR)\itclHelpers.obj \
-        $(TMP_DIR)\itclInfo.obj \
-        $(TMP_DIR)\itclLinkage.obj \
-        $(TMP_DIR)\itclMethod.obj \
-        $(TMP_DIR)\itclMigrate2TclCore.obj \
-        $(TMP_DIR)\itclObject.obj \
-        $(TMP_DIR)\itclParse.obj \
-        $(TMP_DIR)\itclResolve.obj \
-        $(TMP_DIR)\itclStubs.obj \
-        $(TMP_DIR)\itclStubInit.obj \
-        $(TMP_DIR)\itclTclIntStubsFcn.obj \
-        $(TMP_DIR)\itclUtil.obj \
-!if !$(STATIC_BUILD)
-       $(TMP_DIR)\dllEntryPoint.obj \
-       $(TMP_DIR)\itcl.res
-!endif
-
-ITCLSTUBOBJS = \
-       $(TMP_DIR)\itclStubLib.obj
-
-GENERICDIR     = $(ROOT)\generic
-DOCDIR         = $(ROOT)\doc
-WINDIR         = $(ROOT)\win
-TOOLSDIR       = ..\..\tools
-
-#---------------------------------------------------------------------
-# Compile flags
-#---------------------------------------------------------------------
-
-!if !$(DEBUG)
-!if $(OPTIMIZING)
-### This cranks the optimization level to maximize speed
-cdebug = -O2 $(OPTIMIZATIONS)
-!else
-cdebug = 
-!endif
-!if $(SYMBOLS)
-cdebug = $(cdebug) -Zi
-!endif
-!else if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
-### Warnings are too many, can't support warnings into errors.
-cdebug = -Zi -Od $(DEBUGFLAGS)
-!else
-cdebug = -Zi -WX $(DEBUGFLAGS)
-!endif
-
-### Declarations common to all compiler options
-cwarn = $(WARNINGS) -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE
-cflags = -nologo -c $(COMPILERFLAGS) $(cwarn) -Fp$(TMP_DIR)^\
-
-!if $(MSVCRT)
-!if $(DEBUG) && !$(UNCHECKED)
-crt = -MDd
-!else
-crt = -MD
-!endif
-!else
-!if $(DEBUG) && !$(UNCHECKED)
-crt = -MTd
-!else
-crt = -MT
-!endif
-!endif
-
-!if $(TCLINSTALL)
-TCL_INCLUDES   = -I"$(TCLDIR)\include"
-!else
-TCL_INCLUDES   = -I"$(TCLDIR)\generic" -I"$(TCLDIR)\win"
-!endif
-
-ITCL_INCLUDES  = -I$(WINDIR) -I$(GENERICDIR)
-ITCL_DEFINES   = -DBUILD_itcl -DTCL_THREADS=1 -DUSE_TCL_STUBS -DUSE_TCLOO_STUBS
-!if $(DEBUG)
-ITCL_DEFINES   = $(ITCL_DEFINES) -DITCL_DEBUG
-!endif
-ITCL_DLL_CFLAGS        = $(cflags) $(cdebug) $(crt) $(ITCL_INCLUDES) $(ITCL_DEFINES) $(TCL_INCLUDES) $(OPTDEFINES)
-ITCL_STUB_CFLAGS= $(cflags) $(cdebug:-GL=) $(ITCL_INCLUDES) $(TCL_INCLUDES) $(OPTDEFINES)
-
-!if $(STATIC_BUILD)
-ITCL_CFLAGS    = $(ITCL_DLL_CFLAGS) -DSTATIC_BUILD
-!else
-ITCL_CFLAGS    = $(ITCL_DLL_CFLAGS)
-!endif
-
-#---------------------------------------------------------------------
-# Link flags
-#---------------------------------------------------------------------
-
-!if $(DEBUG)
-ldebug = -debug:full -debugtype:cv
-!else
-ldebug = -release -opt:ref -opt:icf,3
-!endif
-
-# declarations common to all linker options
-lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)
-
-!if $(PROFILE)
-lflags = $(lflags) -profile
-!endif
-
-!if $(ALIGN98_HACK) && !$(STATIC_BUILD)
-# align sections for PE size savings.
-lflags = $(lflags) -opt:nowin98
-!else if !$(ALIGN98_HACK) && $(STATIC_BUILD)
-# align sections for speed in loading by choosing the virtual page size.
-lflags = $(lflags) -align:4096
-!endif
-
-!if $(LOIMPACT)
-lflags = $(lflags) -ws:aggressive
-!endif
-
-ITCL_LFLAGS = $(lflags) -subsystem:windows -dll
-
-!if exist("$(TCLDIR)\win\coffbase.txt")
-ITCL_DLLBASE   = -base:@$(TCLDIR)\win\coffbase.txt,itcl
-!else
-ITCL_DLLBASE   =
-!endif
-
-baselibs   = 
-# Avoid 'unresolved external symbol __security_cookie' errors.
-# c.f. http://support.microsoft.com/?id=894573
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
-!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500
-baselibs   = $(baselibs) bufferoverflowU.lib
-!endif
-!endif
-
-#---------------------------------------------------------------------
-# TclTest flags
-#---------------------------------------------------------------------
-
-!if "$(TESTPAT)" != ""
-TESTFLAGS = -file $(TESTPAT)
-!endif
-
-#---------------------------------------------------------------------
-# Project specific targets
-#---------------------------------------------------------------------
-
-all :     setup $(ITCLLIB) $(ITCLSTUBLIB)
-release : setup $(ITCLLIB) $(ITCLSTUBLIB)
-install : install-binaries install-docs
-
-setup :
-       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
-       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
-
-$(ITCLLIB): $(ITCLOBJS)
-!if $(STATIC_BUILD)
-       $(lib32) -nologo -machine:$(MACHINE) -out:$@ @<<
-$**
-<<
-!else
-       $(link32) $(ITCL_LFLAGS) $(ITCL_DLLBASE) -out:$@ $(TCLSTUBLIB) \
-               $(baselibs) @<<
-$**
-<<
-       $(_VC_MANIFEST_EMBED_DLL)
-       -@del $*.exp
-!endif
-
-$(ITCLSTUBLIB) : $(ITCLSTUBOBJS)
-       $(lib32) -nologo -nodefaultlib -out:$@ $(ITCLSTUBOBJS)
-
-install-binaries :
-       if not exist "$(_INSTALLDIR)" mkdir "$(_INSTALLDIR)"
-       if not exist "$(BIN_INSTALL_DIR)" mkdir "$(BIN_INSTALL_DIR)"
-       if not exist "$(LIB_INSTALL_DIR)" mkdir "$(LIB_INSTALL_DIR)"
-       if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
-       if not exist "$(INCLUDE_INSTALL_DIR)" mkdir "$(INCLUDE_INSTALL_DIR)"
-       copy $(ITCLLIB) "$(SCRIPT_INSTALL_DIR)"
-!if ""$(ITCLSTUBLIB)"" != """"
-       copy $(ITCLSTUBLIB) "$(LIB_INSTALL_DIR)"
-!endif
-       copy $(ROOT)\generic\itcl.h "$(INCLUDE_INSTALL_DIR)"
-       copy $(ROOT)\generic\itclDecls.h "$(INCLUDE_INSTALL_DIR)"
-       copy $(ROOT)\library\*.* "$(SCRIPT_INSTALL_DIR)"
-       echo if {[package vsatisfies 8.0 [package provide Tcl]]} {\
-               > "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-       echo ^ ^ ^ ^ set add 80>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-       echo } else {>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-       echo ^ ^ ^ ^ set add {$(SUFX:g=)}>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-       echo }>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-       echo if {[info exists ::tcl_platform(debug)] ^&^&\
-               $$::tcl_platform(debug) ^&^& \>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-       echo ^ ^ ^ ^ ^ ^ ^ ^ [file exists [file join $$dir\
-               $(PROJECT)$(VERSION)$${add}g.dll]]}\
-               {>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-       echo ^ ^ ^ ^ package ifneeded Itcl $(DOTVERSION) [list load\
-               [file join $$dir $(PROJECT)$(VERSION)$${add}g.dll]\
-               Itcl]>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-       echo } else {>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-       echo ^ ^ ^ ^ package ifneeded Itcl $(DOTVERSION) [list load\
-               [file join $$dir $(PROJECT)$(VERSION)$${add}.dll]\
-               Itcl]>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-       echo }>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-       echo unset add>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
-
-!if $(STATIC_BUILD)
-test :
-       @echo test target not supported for a static library.
-!else
-test : setup $(ITCLLIB) $(ITCLSTUBLIB)
-       $(TCLSH) ..\tests\all.tcl $(TESTFLAGS) -loadfile <<
-       set env(ITCL_LIBRARY) [file normalize [file join $(MAKEDIR:\=/) .. library]]
-       package ifneeded $(PROJECT) $(ITCL_PATCH_LEVEL) [list load [file normalize [file join $(MAKEDIR:\=/) $(ITCLLIB:\=/)]]]
-<<
-!endif
-
-#---------------------------------------------------------------------
-# Regenerate the stubs files.
-#---------------------------------------------------------------------
-
-genstubs:
-!if $(TCLINSTALL)
-       @echo Need the source distribution to regenerate the Stubs table.
-!else
-       $(TCLSH) $(TOOLSDIR)\genStubs.tcl $(GENERICDIR) \
-               $(GENERICDIR)\$(PROJECT).decls $(GENERICDIR)\$(PROJECT)Int.decls
-!endif
-
-#---------------------------------------------------------------------
-# Special case object file targets
-#---------------------------------------------------------------------
-
-# The following object is part of the stub library and should not
-# be built as DLL objects but none of the symbols should be exported
-# and without reference to any specific C-runtime.
-
-$(TMP_DIR)\itclStubLib.obj : $(GENERICDIR)\itclStubLib.c
-       $(cc32) -DSTATIC_BUILD $(ITCL_STUB_CFLAGS) -Zl -Fo$@ $?
-
-#---------------------------------------------------------------------
-# Inference rules.  Use batch-mode when supported.
-#---------------------------------------------------------------------
-
-{$(WINDIR)}.c{$(TMP_DIR)}.obj::
-       $(cc32) $(ITCL_CFLAGS) -Fo$(TMP_DIR)\ @<<
-$<
-<<
-
-{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
-       $(cc32) $(ITCL_CFLAGS) -Fo$(TMP_DIR)\ @<<
-$<
-<<
-
-{$(WINDIR)}.rc{$(TMP_DIR)}.res:
-       $(rc32) -fo $@ -d DEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \
-               $(ITCL_INCLUDES) $(TCL_INCLUDES) $(ITCL_DEFINES) $<
-
-.SUFFIXES:
-.SUFFIXES:.c .rc
-
-#---------------------------------------------------------------------
-# Generate the windows help files.
-#---------------------------------------------------------------------
-
-HLPBASE                = $(PROJECT)$(VERSION)
-HELPFILE       = $(OUT_DIR)\$(HLPBASE).hlp
-HELPCNT                = $(OUT_DIR)\$(HLPBASE).cnt
-DOCTMP_DIR     = $(OUT_DIR)\$(PROJECT)_docs
-HELPRTF                = $(DOCTMP_DIR)\$(PROJECT).rtf
-MAN2HELP       = $(DOCTMP_DIR)\man2help.tcl
-MAN2HELP2      = $(DOCTMP_DIR)\man2help2.tcl
-INDEX          = $(DOCTMP_DIR)\index.tcl
-BMP            = $(DOCTMP_DIR)\toaster.bmp
-BMP_NOPATH     = toaster.bmp
-MAN2TCL                = $(DOCTMP_DIR)\man2tcl.exe
-
-winhelp: docsetup $(HELPFILE)
-
-docsetup:
-       @if not exist $(DOCTMP_DIR)\nul mkdir $(DOCTMP_DIR)
-
-$(MAN2HELP) $(MAN2HELP2) $(INDEX): $(TCLTOOLSDIR)\$$(@F)
-       copy $(TCLTOOLSDIR)\$(@F) $(@D)
-
-$(BMP):
-       copy $(WINDIR)\$(@F) $(@D)
-
-$(HELPFILE): $(HELPRTF) $(BMP)
-       cd $(DOCTMP_DIR)
-       start /wait hcrtf.exe -x <<$(PROJECT).hpj
-[OPTIONS]
-COMPRESS=12 Hall Zeck
-LCID=0x409 0x0 0x0 ; English (United States)
-TITLE=[Incr Tcl] Reference Manual
-BMROOT=.
-CNT=$(@B).cnt
-HLP=$(@B).hlp
-
-[FILES]
-$(PROJECT).rtf
-
-[WINDOWS]
-main="[Incr Tcl] Reference Manual",,27648,(r15263976),(r65280)
-
-[CONFIG]
-BrowseButtons()
-CreateButton(1, "Web", ExecFile("http://www.tcl.tk"))
-CreateButton(2, "SF", ExecFile("http://sf.net/projects/incrtcl"))
-CreateButton(3, "Wiki", ExecFile("http://wiki.tcl.tk"))
-CreateButton(4, "FAQ", ExecFile("http://www.purl.org/NET/Tcl-FAQ/"))
-<<
-       cd $(MAKEDIR)
-       copy "$(DOCTMP_DIR)\$(@B).hlp" "$(OUT_DIR)"
-       copy "$(DOCTMP_DIR)\$(@B).cnt" "$(OUT_DIR)"
-
-$(MAN2TCL): $(TCLTOOLSDIR)\$$(@B).c
-       $(cc32) -nologo -G4 -ML -O2 -Fo$(@D)\ $(TCLTOOLSDIR)\$(@B).c -link -out:$@
-
-$(HELPRTF): $(MAN2TCL) $(MAN2HELP) $(MAN2HELP2) $(INDEX)
-       $(TCLSH) $(MAN2HELP) -bitmap $(BMP_NOPATH) $(PROJECT) $(VERSION) $(DOCDIR:\=/)
-
-install-docs:
-!if exist($(HELPFILE))
-       @xcopy /i /y "$(HELPFILE)" "$(DOC_INSTALL_DIR)\"
-       @xcopy /i /y "$(HELPCNT)" "$(DOC_INSTALL_DIR)\"
-       $(TCLSH) <<
-puts "Installing $(PROJECT)'s helpfile contents into Tcl's ..."
-set f [open {$(DOC_INSTALL_DIR:\=/)/tcl$(TCL_VERSION).cnt} r]
-while {![eof $$f]} {
-    if {[regexp {:Include $(PROJECT)([0-9]{2}).cnt} [gets $$f] dummy ver]} {
-       if {$$ver == $(ITCL_VERSION)} {
-           puts "Already installed."
-           exit
-       } else {
-           # do something here logical to remove (or replace) it.
-           puts "$$ver != $(VERSION), unfinished code path, die, die!"
-           exit 1
-       }
-    }
-}
-close $$f
-set f [open {$(DOC_INSTALL_DIR:\=/)/tcl$(TCL_VERSION).cnt} a]
-puts $$f {:Include $(HLPBASE).cnt}
-close $$f
-<<
-       start /wait winhlp32 -g $(DOC_INSTALL_DIR)\tcl$(TCL_VERSION).hlp
-!endif
-
-
-#---------------------------------------------------------------------
-# Clean up
-#---------------------------------------------------------------------
-
-tidy :
-       -del $(TMP_DIR)\*.pch
-       -del $(TMP_DIR)\*.obj
-       -del $(TMP_DIR)\*.res
-
-clean : tidy
-       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)
-       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc
-       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i
-       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x
-       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch
-       -del $(OUT_DIR)\*.exp
-       -del $(OUT_DIR)\*.lib
-       -del $(OUT_DIR)\*.dll
-
-hose : clean
-       -rmdir $(OUT_DIR)
-       -rmdir $(TMP_DIR)
diff --git a/pkgs/itcl4.1.0/win/rules.vc b/pkgs/itcl4.1.0/win/rules.vc
deleted file mode 100644 (file)
index a081158..0000000
+++ /dev/null
@@ -1,677 +0,0 @@
-#------------------------------------------------------------------------------
-# rules.vc --
-#
-#      Microsoft Visual C++ makefile include for decoding the commandline
-#      macros.  This file does not need editing to build Tcl.
-#
-#      This version is modified from the Tcl source version to support
-#      building extensions using nmake.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-#
-# Copyright (c) 2001-2003 David Gravereaux.
-# Copyright (c) 2003-2008 Patrick Thoyts
-#------------------------------------------------------------------------------
-
-!ifndef _RULES_VC
-_RULES_VC = 1
-
-cc32           = $(CC)   # built-in default.
-link32         = link
-lib32          = lib
-rc32           = $(RC)   # built-in default.
-
-!ifndef INSTALLDIR
-### Assume the normal default.
-_INSTALLDIR    = C:\Program Files\Tcl
-!else
-### Fix the path separators.
-_INSTALLDIR    = $(INSTALLDIR:/=\)
-!endif
-
-#----------------------------------------------------------
-# Set the proper copy method to avoid overwrite questions
-# to the user when copying files and selecting the right
-# "delete all" method.
-#----------------------------------------------------------
-
-!if "$(OS)" == "Windows_NT"
-RMDIR  = rmdir /S /Q
-ERRNULL  = 2>NUL
-!if ![ver | find "4.0" > nul]
-CPY    = echo y | xcopy /i >NUL
-COPY   = copy >NUL
-!else
-CPY    = xcopy /i /y >NUL
-COPY   = copy /y >NUL
-!endif
-!else # "$(OS)" != "Windows_NT"
-CPY    = xcopy /i >_JUNK.OUT # On Win98 NUL does not work here.
-COPY   = copy >_JUNK.OUT # On Win98 NUL does not work here.
-RMDIR  = deltree /Y
-NULL    = \NUL # Used in testing directory existence
-ERRNULL = >NUL # Win9x shell cannot redirect stderr
-!endif
-MKDIR   = mkdir
-
-#------------------------------------------------------------------------------
-# Determine the host and target architectures and compiler version.
-#------------------------------------------------------------------------------
-
-_HASH=^#
-_VC_MANIFEST_EMBED_EXE=
-_VC_MANIFEST_EMBED_DLL=
-VCVER=0
-!if ![echo VCVERSION=_MSC_VER > vercl.x] \
-    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
-    && ![echo ARCH=IX86 >> vercl.x] \
-    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
-    && ![echo ARCH=AMD64 >> vercl.x] \
-    && ![echo $(_HASH)endif >> vercl.x] \
-    && ![cl -nologo -TC -P vercl.x $(ERRNULL)]
-!include vercl.i
-!if ![echo VCVER= ^\> vercl.vc] \
-    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
-!include vercl.vc
-!endif
-!endif
-!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]
-!endif
-
-!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]
-NATIVE_ARCH=IX86
-!else
-NATIVE_ARCH=AMD64
-!endif
-
-# Since MSVC8 we must deal with manifest resources.
-!if $(VCVERSION) >= 1400
-_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1
-_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2
-!endif
-
-!ifndef MACHINE
-MACHINE=$(ARCH)
-!endif
-
-!ifndef CFG_ENCODING
-CFG_ENCODING   = \"cp1252\"
-!endif
-
-!message ===============================================================================
-
-#----------------------------------------------------------
-# build the helper app we need to overcome nmake's limiting
-# environment.
-#----------------------------------------------------------
-
-!if !exist(nmakehlp.exe)
-!if [$(cc32) -nologo nmakehlp.c -link -subsystem:console > nul]
-!endif
-!endif
-
-#----------------------------------------------------------
-# Test for compiler features
-#----------------------------------------------------------
-
-### test for optimizations
-!if [nmakehlp -c -Ot]
-!message *** Compiler has 'Optimizations'
-OPTIMIZING     = 1
-!else
-!message *** Compiler does not have 'Optimizations'
-OPTIMIZING     = 0
-!endif
-
-OPTIMIZATIONS   =
-
-!if [nmakehlp -c -Ot]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Ot
-!endif
-
-!if [nmakehlp -c -Oi]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Oi
-!endif
-
-!if [nmakehlp -c -Op]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Op
-!endif
-
-!if [nmakehlp -c -fp:strict]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -fp:strict
-!endif
-
-!if [nmakehlp -c -Gs]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Gs
-!endif
-
-!if [nmakehlp -c -GS]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS
-!endif
-
-!if [nmakehlp -c -GL]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL
-!endif
-
-DEBUGFLAGS     =
-
-!if [nmakehlp -c -RTC1]
-DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1
-!elseif [nmakehlp -c -GZ]
-DEBUGFLAGS     = $(DEBUGFLAGS) -GZ
-!endif
-
-COMPILERFLAGS  =
-
-# In v13 -GL and -YX are incompatible.
-!if [nmakehlp -c -YX]
-!if ![nmakehlp -c -GL]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX
-!endif
-!endif
-
-!if "$(MACHINE)" == "IX86"
-### test for pentium errata
-!if [nmakehlp -c -QI0f]
-!message *** Compiler has 'Pentium 0x0f fix'
-COMPILERFLAGS  = $(COMPILERFLAGS) -QI0f
-!else
-!message *** Compiler does not have 'Pentium 0x0f fix'
-!endif
-!endif
-
-!if "$(MACHINE)" == "IA64"
-### test for Itanium errata
-!if [nmakehlp -c -QIA64_Bx]
-!message *** Compiler has 'B-stepping errata workarounds'
-COMPILERFLAGS   = $(COMPILERFLAGS) -QIA64_Bx
-!else
-!message *** Compiler does not have 'B-stepping errata workarounds'
-!endif
-!endif
-
-!if "$(MACHINE)" == "IX86"
-### test for -align:4096, when align:512 will do.
-!if [nmakehlp -l -opt:nowin98]
-!message *** Linker has 'Win98 alignment problem'
-ALIGN98_HACK   = 1
-!else
-!message *** Linker does not have 'Win98 alignment problem'
-ALIGN98_HACK   = 0
-!endif
-!else
-ALIGN98_HACK   = 0
-!endif
-
-LINKERFLAGS     =
-
-!if [nmakehlp -l -ltcg]
-LINKERFLAGS     =-ltcg
-!endif
-
-#----------------------------------------------------------
-# Decode the options requested.
-#----------------------------------------------------------
-
-!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]
-STATIC_BUILD   = 0
-TCL_THREADS    = 1
-DEBUG          = 0
-SYMBOLS                = 0
-PROFILE                = 0
-PGO            = 0
-MSVCRT         = 0
-LOIMPACT       = 0
-UNCHECKED      = 0
-!else
-!if [nmakehlp -f $(OPTS) "static"]
-!message *** Doing static
-STATIC_BUILD   = 1
-!else
-STATIC_BUILD   = 0
-!endif
-!if [nmakehlp -f $(OPTS) "msvcrt"]
-!message *** Doing msvcrt
-MSVCRT         = 1
-!else
-MSVCRT         = 0
-!endif
-!if [nmakehlp -f $(OPTS) "nothreads"]
-!message *** Compile explicitly for non-threaded tcl
-TCL_THREADS    = 0
-!else
-TCL_THREADS    = 1
-!endif
-!if [nmakehlp -f $(OPTS) "symbols"]
-!message *** Doing symbols
-DEBUG          = 1
-!else
-DEBUG          = 0
-!endif
-!if [nmakehlp -f $(OPTS) "pdbs"]
-!message *** Doing pdbs
-SYMBOLS                = 1
-!else
-SYMBOLS                = 0
-!endif
-!if [nmakehlp -f $(OPTS) "profile"]
-!message *** Doing profile
-PROFILE                = 1
-!else
-PROFILE                = 0
-!endif
-!if [nmakehlp -f $(OPTS) "pgi"]
-!message *** Doing profile guided optimization instrumentation
-PGO            = 1
-!elseif [nmakehlp -f $(OPTS) "pgo"]
-!message *** Doing profile guided optimization
-PGO            = 2
-!else
-PGO            = 0
-!endif
-!if [nmakehlp -f $(OPTS) "loimpact"]
-!message *** Doing loimpact
-LOIMPACT       = 1
-!else
-LOIMPACT       = 0
-!endif
-!if [nmakehlp -f $(OPTS) "unchecked"]
-!message *** Doing unchecked
-UNCHECKED = 1
-!else
-UNCHECKED = 0
-!endif
-!endif
-
-
-!if !$(STATIC_BUILD)
-# Make sure we don't build overly fat DLLs.
-MSVCRT         = 1
-# We shouldn't statically put the extensions inside the shell when dynamic.
-TCL_USE_STATIC_PACKAGES = 0
-!endif
-
-
-#----------------------------------------------------------
-# Figure-out how to name our intermediate and output directories.
-# We wouldn't want different builds to use the same .obj files
-# by accident.
-#----------------------------------------------------------
-
-#----------------------------------------
-# Naming convention:
-#   t = full thread support.
-#   s = static library (as opposed to an
-#      import library)
-#   g = linked to the debug enabled C
-#      run-time.
-#   x = special static build when it
-#      links to the dynamic C run-time.
-#----------------------------------------
-SUFX       = tsgx
-
-!if $(DEBUG)
-BUILDDIRTOP = Debug
-!else
-BUILDDIRTOP = Release
-!endif
-
-!if "$(MACHINE)" != "IX86"
-BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)
-!endif
-!if $(VCVER) > 6
-BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)
-!endif
-
-!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)
-SUFX       = $(SUFX:g=)
-!endif
-
-TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
-
-!if !$(STATIC_BUILD)
-TMP_DIRFULL = $(TMP_DIRFULL:Static=)
-SUFX       = $(SUFX:s=)
-EXT        = dll
-!if $(MSVCRT)
-TMP_DIRFULL = $(TMP_DIRFULL:X=)
-SUFX       = $(SUFX:x=)
-!endif
-!else
-TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
-EXT        = lib
-!if !$(MSVCRT)
-TMP_DIRFULL = $(TMP_DIRFULL:X=)
-SUFX       = $(SUFX:x=)
-!endif
-!endif
-
-!if !$(TCL_THREADS)
-TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)
-SUFX       = $(SUFX:t=)
-!endif
-
-!ifndef TMP_DIR
-TMP_DIR            = $(TMP_DIRFULL)
-!ifndef OUT_DIR
-OUT_DIR            = .\$(BUILDDIRTOP)
-!endif
-!else
-!ifndef OUT_DIR
-OUT_DIR            = $(TMP_DIR)
-!endif
-!endif
-
-
-#----------------------------------------------------------
-# Decode the statistics requested.
-#----------------------------------------------------------
-
-!if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"]
-TCL_MEM_DEBUG      = 0
-TCL_COMPILE_DEBUG   = 0
-!else
-!if [nmakehlp -f $(STATS) "memdbg"]
-!message *** Doing memdbg
-TCL_MEM_DEBUG      = 1
-!else
-TCL_MEM_DEBUG      = 0
-!endif
-!if [nmakehlp -f $(STATS) "compdbg"]
-!message *** Doing compdbg
-TCL_COMPILE_DEBUG   = 1
-!else
-TCL_COMPILE_DEBUG   = 0
-!endif
-!endif
-
-
-#----------------------------------------------------------
-# Decode the checks requested.
-#----------------------------------------------------------
-
-!if "$(CHECKS)" == "" || [nmakehlp -f "$(CHECKS)" "none"]
-TCL_NO_DEPRECATED          = 0
-WARNINGS                   = -W3
-!else
-!if [nmakehlp -f $(CHECKS) "nodep"]
-!message *** Doing nodep check
-TCL_NO_DEPRECATED          = 1
-!else
-TCL_NO_DEPRECATED          = 0
-!endif
-!if [nmakehlp -f $(CHECKS) "fullwarn"]
-!message *** Doing full warnings check
-WARNINGS                   = -W4
-!if [nmakehlp -l -warn:3]
-LINKERFLAGS                = $(LINKERFLAGS) -warn:3
-!endif
-!else
-WARNINGS                   = -W3
-!endif
-!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]
-!message *** Doing 64bit portability warnings
-WARNINGS                   = $(WARNINGS) -Wp64
-!endif
-!endif
-
-!if $(PGO) > 1
-!if [nmakehlp -l -ltcg:pgoptimize]
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize
-!else
-MSG=^
-This compiler does not support profile guided optimization.
-!error $(MSG)
-!endif
-!elseif $(PGO) > 0
-!if [nmakehlp -l -ltcg:pginstrument]
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument
-!else
-MSG=^
-This compiler does not support profile guided optimization.
-!error $(MSG)
-!endif
-!endif
-
-#----------------------------------------------------------
-# Set our defines now armed with our options.
-#----------------------------------------------------------
-
-OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS
-
-!if $(TCL_MEM_DEBUG)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG
-!endif
-!if $(TCL_COMPILE_DEBUG)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
-!endif
-!if $(TCL_THREADS)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1
-!endif
-!if $(STATIC_BUILD)
-OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD
-!endif
-!if $(TCL_NO_DEPRECATED)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED
-!endif
-
-!if !$(DEBUG)
-OPTDEFINES     = $(OPTDEFINES) -DNDEBUG
-!if $(OPTIMIZING)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
-!endif
-!endif
-!if $(PROFILE)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED
-!endif
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT
-!endif
-
-
-#----------------------------------------------------------
-# Get common info used when building extensions.
-#----------------------------------------------------------
-
-!if "$(PROJECT)" != "tcl"
-
-# If INSTALLDIR set to tcl root dir then reset to the lib dir.
-!if exist("$(_INSTALLDIR)\include\tcl.h")
-_INSTALLDIR=$(_INSTALLDIR)\lib
-!endif
-
-!if !defined(TCLDIR)
-!if exist("$(_INSTALLDIR)\..\include\tcl.h")
-TCLINSTALL     = 1
-_TCLDIR                = $(_INSTALLDIR)\..
-_TCL_H          = $(_INSTALLDIR)\..\include\tcl.h
-TCLDIR          = $(_INSTALLDIR)\..
-!else
-MSG=^
-Failed to find tcl.h.  Set the TCLDIR macro.
-!error $(MSG)
-!endif
-!else
-_TCLDIR        = $(TCLDIR:/=\)
-!if exist("$(_TCLDIR)\include\tcl.h")
-TCLINSTALL     = 1
-_TCL_H          = $(_TCLDIR)\include\tcl.h
-!elseif exist("$(_TCLDIR)\generic\tcl.h")
-TCLINSTALL     = 0
-_TCL_H          = $(_TCLDIR)\generic\tcl.h
-!else
-MSG =^
-Failed to find tcl.h.  The TCLDIR macro does not appear correct.
-!error $(MSG)
-!endif
-!endif
-!endif
-
-#--------------------------------------------------------------
-# Extract various version numbers from tcl headers
-# The generated file is then included in the makefile.
-#--------------------------------------------------------------
-
-!if [echo REM = This file is generated from rules.vc > versions.vc]
-!endif
-!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]
-!endif
-!if [echo TCL_MINOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]
-!endif
-!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \
-   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]
-!endif
-
-# If building the tcl core then we need additional package versions
-!if "$(PROJECT)" == "tcl"
-!if [echo PKG_HTTP_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\http\pkgIndex.tcl http >> versions.vc]
-!endif
-!if [echo PKG_TCLTEST_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\tcltest\pkgIndex.tcl tcltest >> versions.vc]
-!endif
-!if [echo PKG_MSGCAT_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\msgcat\pkgIndex.tcl msgcat >> versions.vc]
-!endif
-!if [echo PKG_PLATFORM_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform " >> versions.vc]
-!endif
-!if [echo PKG_SHELL_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform::shell" >> versions.vc]
-!endif
-!if [echo PKG_DDE_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\dde\pkgIndex.tcl "dde " >> versions.vc]
-!endif
-!if [echo PKG_REG_VER =\>> versions.vc] \
-   && [nmakehlp -V ..\library\reg\pkgIndex.tcl registry >> versions.vc]
-!endif
-!endif
-
-!include versions.vc
-
-#--------------------------------------------------------------
-# Setup tcl version dependent stuff headers
-#--------------------------------------------------------------
-
-!if "$(PROJECT)" != "tcl"
-
-TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)
-
-!if $(TCLINSTALL)
-TCLSH          = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe"
-!if !exist($(TCLSH)) && $(TCL_THREADS)
-TCLSH           = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe"
-!endif
-TCLSTUBLIB     = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"
-TCLIMPLIB      = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"
-TCL_LIBRARY    = $(_TCLDIR)\lib
-COFFBASE       = \must\have\tcl\sources\to\build\this\target
-TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target
-TCL_INCLUDES    = -I"$(_TCLDIR)\include"
-!else
-TCLSH          = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe"
-!if !exist($(TCLSH)) && $(TCL_THREADS)
-TCLSH          = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe"
-!endif
-TCLSTUBLIB     = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"
-TCLIMPLIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"
-TCL_LIBRARY    = $(_TCLDIR)\library
-COFFBASE       = "$(_TCLDIR)\win\coffbase.txt"
-TCLTOOLSDIR    = $(_TCLDIR)\tools
-TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"
-!endif
-
-!endif
-
-#-------------------------------------------------------------------------
-# Locate the Tk headers to build against
-#-------------------------------------------------------------------------
-
-!if "$(PROJECT)" == "tk"
-_TK_H          = ..\generic\tk.h
-_INSTALLDIR    = $(_INSTALLDIR)\..
-!endif
-
-!ifdef PROJECT_REQUIRES_TK
-!if !defined(TKDIR)
-!if exist("$(_INSTALLDIR)\..\include\tk.h")
-TKINSTALL      = 1
-_TKDIR         = $(_INSTALLDIR)\..
-_TK_H          = $(_TKDIR)\include\tk.h
-TKDIR          = $(_TKDIR)
-!elseif exist("$(_TCLDIR)\include\tk.h")
-TKINSTALL      = 1
-_TKDIR         = $(_TCLDIR)
-_TK_H          = $(_TKDIR)\include\tk.h
-TKDIR          = $(_TKDIR)
-!endif
-!else
-_TKDIR = $(TKDIR:/=\)
-!if exist("$(_TKDIR)\include\tk.h")
-TKINSTALL      = 1
-_TK_H          = $(_TKDIR)\include\tk.h
-!elseif exist("$(_TKDIR)\generic\tk.h")
-TKINSTALL      = 0
-_TK_H          = $(_TKDIR)\generic\tk.h
-!else
-MSG =^
-Failed to find tk.h. The TKDIR macro does not appear correct.
-!error $(MSG)
-!endif
-!endif
-!endif
-
-#-------------------------------------------------------------------------
-# Extract Tk version numbers
-#-------------------------------------------------------------------------
-
-!if defined(PROJECT_REQUIRES_TK) || "$(PROJECT)" == "tk"
-
-!if [echo TK_MAJOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]
-!endif
-!if [echo TK_MINOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]
-!endif
-!if [echo TK_PATCH_LEVEL = \>> versions.vc] \
-   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]
-!endif
-
-!include versions.vc
-
-TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
-TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)
-
-!if "$(PROJECT)" != "tk"
-!if $(TKINSTALL)
-WISH           = "$(_TKDIR)\bin\wish$(TK_VERSION)$(SUFX).exe"
-TKSTUBLIB      = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"
-TKIMPLIB       = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"
-TK_INCLUDES     = -I"$(_TKDIR)\include"
-!else
-WISH           = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)$(SUFX).exe"
-TKSTUBLIB      = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"
-TKIMPLIB       = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"
-TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
-!endif
-!endif
-
-!endif
-
-#----------------------------------------------------------
-# Display stats being used.
-#----------------------------------------------------------
-
-!message *** Intermediate directory will be '$(TMP_DIR)'
-!message *** Output directory will be '$(OUT_DIR)'
-!message *** Suffix for binaries will be '$(SUFX)'
-!message *** Optional defines are '$(OPTDEFINES)'
-!message *** Compiler version $(VCVER). Target machine is $(MACHINE)
-!message *** Host architecture is $(NATIVE_ARCH)
-!message *** Compiler options '$(COMPILERFLAGS) $(OPTIMIZATIONS) $(DEBUGFLAGS) $(WARNINGS)'
-!message *** Link options '$(LINKERFLAGS)'
-
-!endif
similarity index 96%
rename from pkgs/itcl4.1.0/README
rename to pkgs/itcl4.1.1/README
index c4873f7..fe5b638 100644 (file)
@@ -1,6 +1,6 @@
 README: Itcl
 
-This is the 4.1.0 source distribution of Itcl, an object oriented
+This is the 4.1.1 source distribution of Itcl, an object oriented
 extension for Tcl. Itcl releases are available from Sourceforge at:
 
 https://sourceforge.net/projects/incrtcl/files/%5Bincr%20Tcl_Tk%5D-4-source/
similarity index 100%
rename from pkgs/itcl4.1.0/TODO
rename to pkgs/itcl4.1.1/TODO
similarity index 99%
rename from pkgs/itcl4.1.0/configure
rename to pkgs/itcl4.1.1/configure
index 837038c..46ce825 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for itcl 4.1.0.
+# Generated by GNU Autoconf 2.69 for itcl 4.1.1.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='itcl'
 PACKAGE_TARNAME='itcl'
-PACKAGE_VERSION='4.1.0'
-PACKAGE_STRING='itcl 4.1.0'
+PACKAGE_VERSION='4.1.1'
+PACKAGE_STRING='itcl 4.1.1'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1311,7 +1311,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures itcl 4.1.0 to adapt to many kinds of systems.
+\`configure' configures itcl 4.1.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1372,7 +1372,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of itcl 4.1.0:";;
+     short | recursive ) echo "Configuration of itcl 4.1.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1380,7 +1380,7 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-threads        build with threads
+  --enable-threads        build with threads (default: on)
   --enable-shared         build and link with shared libraries (default: on)
   --enable-stubs          build and link with stub libraries. Always true for
                           shared builds (default: on)
@@ -1474,7 +1474,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-itcl configure 4.1.0
+itcl configure 4.1.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1893,7 +1893,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by itcl $as_me 4.1.0, which was
+It was created by itcl $as_me 4.1.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2524,8 +2524,9 @@ $as_echo "$as_me: WARNING: --with-tcl argument should refer to directory contain
                for i in `ls -d ${libdir} 2>/dev/null` \
                        `ls -d ${exec_prefix}/lib 2>/dev/null` \
                        `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
                        `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/pkg/lib 2>/dev/null` \
                        `ls -d /usr/lib 2>/dev/null` \
                        `ls -d /usr/lib64 2>/dev/null` \
                        `ls -d /usr/lib/tcl8.6 2>/dev/null` \
@@ -3523,12 +3524,12 @@ _ACEOF
 
 
 
-if test "${TCL_MAJOR_VERSION}" -ne 8; then
+if test "${TCL_MAJOR_VERSION}" -lt 8; then
     as_fn_error $? "${TCL_BIN_DIR}/tclConfig.sh is for Tcl ${TCL_VERSION}.
 Itcl ${PACKAGE_VERSION} needs Tcl 8.6 or higher.
 Use --with-tcl= option to indicate location of tclConfig.sh file for Tcl 8.6+." "$LINENO" 5
 fi
-if test "${TCL_MINOR_VERSION}" -lt 6; then
+if test "${TCL_MINOR_VERSION}" -lt 6 -a "${TCL_MAJOR_VERSION}" -eq 8; then
     as_fn_error $? "${TCL_BIN_DIR}/tclConfig.sh is for Tcl ${TCL_VERSION}.
 Itcl ${PACKAGE_VERSION} needs Tcl 8.6 or higher.
 Use --with-tcl= option to indicate location of tclConfig.sh file for Tcl 8.6+." "$LINENO" 5
@@ -5245,16 +5246,6 @@ $as_echo "#define NO_ERRNO_H 1" >>confdefs.h
 fi
 
 
-    ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
-if test "x$ac_cv_header_float_h" = xyes; then :
-
-else
-
-$as_echo "#define NO_FLOAT_H 1" >>confdefs.h
-
-fi
-
-
     ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default"
 if test "x$ac_cv_header_values_h" = xyes; then :
 
@@ -7119,7 +7110,7 @@ fi
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5
 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; }
 if ${ac_cv_lib_network_inet_ntoa+:} false; then :
@@ -7346,7 +7337,7 @@ fi
            CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
 
            # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            if test $doRpath = yes; then :
 
@@ -7422,39 +7413,23 @@ fi
        OpenBSD-*)
            arch=`arch -s`
            case "$arch" in
-           vax)
-               SHLIB_SUFFIX=""
-               SHARED_LIB_SUFFIX=""
-               LDFLAGS=""
+           alpha|sparc64)
+               SHLIB_CFLAGS="-fPIC"
                ;;
            *)
-               case "$arch" in
-               alpha|sparc64)
-                   SHLIB_CFLAGS="-fPIC"
-                   ;;
-               *)
-                   SHLIB_CFLAGS="-fpic"
-                   ;;
-               esac
-               SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-               SHLIB_SUFFIX=".so"
-               if test $doRpath = yes; then :
-
-                   CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-fi
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
-               LDFLAGS="-Wl,-export-dynamic"
-               ;;
-           esac
-           case "$arch" in
-           vax)
-               CFLAGS_OPTIMIZE="-O1"
-               ;;
-           *)
-               CFLAGS_OPTIMIZE="-O2"
+               SHLIB_CFLAGS="-fpic"
                ;;
            esac
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           if test $doRpath = yes; then :
+
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+fi
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
+           LDFLAGS="-Wl,-export-dynamic"
+           CFLAGS_OPTIMIZE="-O2"
            if test "${TCL_THREADS}" = "1"; then :
 
                # On OpenBSD:   Compile with -pthread
@@ -7470,7 +7445,7 @@ fi
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            LDFLAGS="$LDFLAGS -export-dynamic"
            if test $doRpath = yes; then :
@@ -9558,7 +9533,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by itcl $as_me 4.1.0, which was
+This file was extended by itcl $as_me 4.1.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -9611,7 +9586,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-itcl config.status 4.1.0
+itcl config.status 4.1.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
similarity index 98%
rename from pkgs/itcl4.1.0/configure.ac
rename to pkgs/itcl4.1.1/configure.ac
index 1f0fde5..8c81d4f 100755 (executable)
@@ -10,7 +10,7 @@
 # so you can encode the package version directly into the source files.
 #-----------------------------------------------------------------------
 
-AC_INIT([itcl], [4.1.0])
+AC_INIT([itcl], [4.1.1])
 
 #--------------------------------------------------------------------
 # Call TEA_INIT as the first TEA_ macro to set up initial vars.
@@ -39,12 +39,12 @@ AC_CONFIG_AUX_DIR(tclconfig)
 TEA_PATH_TCLCONFIG
 TEA_LOAD_TCLCONFIG
 
-if test "${TCL_MAJOR_VERSION}" -ne 8; then
+if test "${TCL_MAJOR_VERSION}" -lt 8; then
     AC_MSG_ERROR([${TCL_BIN_DIR}/tclConfig.sh is for Tcl ${TCL_VERSION}.
 Itcl ${PACKAGE_VERSION} needs Tcl 8.6 or higher.
 Use --with-tcl= option to indicate location of tclConfig.sh file for Tcl 8.6+.])
 fi
-if test "${TCL_MINOR_VERSION}" -lt 6; then
+if test "${TCL_MINOR_VERSION}" -lt 6 -a "${TCL_MAJOR_VERSION}" -eq 8; then
     AC_MSG_ERROR([${TCL_BIN_DIR}/tclConfig.sh is for Tcl ${TCL_VERSION}.
 Itcl ${PACKAGE_VERSION} needs Tcl 8.6 or higher.
 Use --with-tcl= option to indicate location of tclConfig.sh file for Tcl 8.6+.])
similarity index 93%
rename from pkgs/itcl4.1.0/doc/scope.n
rename to pkgs/itcl4.1.1/doc/scope.n
index d4435b4..c2cbee4 100644 (file)
@@ -59,12 +59,8 @@ Radiobuttons \fC.rb1\fR and \fC.rb2\fR interact via the variable
 guarantees this by returning the fully qualified variable name
 \fC::foo::mode\fR.
 .PP
-You should never use the \fC@itcl\fR syntax directly.  For example,
-it is a bad idea to write code like this:
-.CS
-set {@itcl ::fred x} 3
-puts "value = ${@itcl ::fred x}"
-.CE
+You should never attempt to craft your own scoped variable names,
+even if you believe you've flawlessly reverse-engineered the encoding.
 Instead, you should always use the scope command to generate the
 variable name dynamically.  Then, you can pass that name to a widget
 or to any other bit of code in your program.
diff --git a/pkgs/itcl4.1.1/generic/clientData b/pkgs/itcl4.1.1/generic/clientData
new file mode 100644 (file)
index 0000000..62e3f3c
--- /dev/null
@@ -0,0 +1,16 @@
+itcl2TclOO.c:    framePtr->clientData = NULL;
+itcl2TclOO.c:    framePtr->objc = objc;
+itcl2TclOO.c:    framePtr->objv = objv;
+itcl2TclOO.c:    framePtr->procPtr = procPtr;
+itcl2TclOO.c:    if (framePtr == NULL || !(framePtr->isProcCallFrame & FRAME_IS_METHOD)) {
+itcl2TclOO.c:    contextPtr = framePtr->clientData;
+itcl2TclOO.c:    if (framePtr == NULL || !(framePtr->isProcCallFrame & FRAME_IS_METHOD)) {
+itclMigrate2TclCore.c:        framePtr->isProcCallFrame |= FRAME_HAS_RESOLVER;
+itclMigrate2TclCore.c: framePtr->resolvePtr = resolvePtr;
+itclMigrate2TclCore.c:        framePtr = framePtr->callerVarPtr;
+itclMigrate2TclCore.c:        framePtr = framePtr->callerVarPtr;
+itclMigrate2TclCore.c:    return (Tcl_Namespace *)framePtr->nsPtr;
+itclMigrate2TclCore.c:    return framePtr->clientData;
+itclMigrate2TclCore.c:    ((Interp *)interp)->framePtr->nsPtr = (Namespace *)nsPtr;
+itclMigrate2TclCore.c:    return ((Interp *)interp)->framePtr->objc;
+itclMigrate2TclCore.c:    return ((Interp *)interp)->framePtr->objv;
similarity index 98%
rename from pkgs/itcl4.1.0/generic/itcl.h
rename to pkgs/itcl4.1.1/generic/itcl.h
index c0483ee..23a84a6 100644 (file)
@@ -82,10 +82,10 @@ extern "C" {
 #define ITCL_MAJOR_VERSION     4
 #define ITCL_MINOR_VERSION     1
 #define ITCL_RELEASE_LEVEL      TCL_FINAL_RELEASE
-#define ITCL_RELEASE_SERIAL     0
+#define ITCL_RELEASE_SERIAL     1
 
 #define ITCL_VERSION            "4.1"
-#define ITCL_PATCH_LEVEL        "4.1.0"
+#define ITCL_PATCH_LEVEL        "4.1.1"
 
 
 /*
similarity index 99%
rename from pkgs/itcl4.1.0/generic/itclClass.c
rename to pkgs/itcl4.1.1/generic/itclClass.c
index 21a8ffe..af02d6e 100644 (file)
@@ -970,10 +970,10 @@ ItclDestroyClassNamesp(
         if (ioPtr->iclsPtr == iclsPtr) {
            if ((ioPtr->accessCmd != NULL) && (!(ioPtr->flags &
                    (ITCL_OBJECT_IS_DESTRUCTED)))) {
-               Itcl_PreserveData(ioPtr);
+               ItclPreserveObject(ioPtr);
                 Tcl_DeleteCommandFromToken(iclsPtr->interp, ioPtr->accessCmd);
                ioPtr->accessCmd = NULL;
-               Itcl_ReleaseData(ioPtr);
+               ItclReleaseObject(ioPtr);
                /*
                 * Fix 227804: Whenever an object to delete was found we
                 * have to reset the search to the beginning as the
@@ -1277,16 +1277,8 @@ int
 Itcl_IsClassNamespace(
     Tcl_Namespace *nsPtr)  /* namespace being tested */
 {
-    if (nsPtr == NULL) {
-       return 0;
-    }
-    if (nsPtr->deleteProc == NULL) {
-       return 0;
-    }
-    if (nsPtr->deleteProc == ItclDestroyClass2) {
-       return 1;
-    }
-    return (nsPtr->deleteProc == _TclOONamespaceDeleteProc);
+    ItclClass *iclsPtr = ItclNamespace2Class(nsPtr);
+    return iclsPtr != NULL;
 }
 
 \f
similarity index 99%
rename from pkgs/itcl4.1.0/generic/itclCmd.c
rename to pkgs/itcl4.1.1/generic/itclCmd.c
index a7b78bd..1111953 100644 (file)
@@ -659,12 +659,8 @@ Itcl_DelObjectCmd(
  *    ::namesp::namesp::class::variable
  *
  *  If the <variable> is an instance variable, this procedure returns
- *  a name of the form:
- *
- *    @itcl ::namesp::namesp::object variable
- *
- *  This kind of scoped value is recognized by the Itcl_ScopedVarResolver
- *  proc, which handles variable resolution for the entire interpreter.
+ *  a name in a format that Tcl can use to find the same variable from
+ *  any context.
  *
  *  Returns TCL_OK/TCL_ERROR to indicate success/failure.
  * ------------------------------------------------------------------------
@@ -801,7 +797,7 @@ Itcl_ScopeCmd(
         if (contextIoPtr == NULL) {
             Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
                 "can't scope variable \"", token,
-                "\": missing object context\"",
+                "\": missing object context",
                 (char*)NULL);
             result = TCL_ERROR;
             goto scopeCmdDone;
@@ -1080,7 +1076,7 @@ Itcl_IsObjectCmd(
      */
     if (classFlag) {
        ItclObject *contextIoPtr;
-        if (Itcl_FindObject(interp, Tcl_GetCommandName(interp, cmd), &contextIoPtr) != TCL_OK) {
+        if (Itcl_FindObject(interp, cmdName, &contextIoPtr) != TCL_OK) {
             return TCL_ERROR;
         }
        if (contextIoPtr == NULL) {
similarity index 99%
rename from pkgs/itcl4.1.0/generic/itclInt.h
rename to pkgs/itcl4.1.1/generic/itclInt.h
index d6a6679..5134023 100644 (file)
@@ -103,10 +103,10 @@ typedef struct ItclPreserveInfoEntry {
 } ItclPreserveInfoEntry;
 
 typedef struct ItclPreserveInfo {
-    int refCount;
+    size_t refCount;
     ClientData clientData;
-    int size;
-    int numEntries;
+    size_t size;
+    size_t numEntries;
     ItclPreserveInfoEntry *entries;
 } ItclPreserveInfo;
 
@@ -385,6 +385,7 @@ typedef struct ItclObject {
     int noComponentTrace;         /* don't call component traces if
                                    * setting components in DelegationInstall */
     int hadConstructorError;      /* needed for multiple calls of CallItclObjectCmd */
+    int refCount;
 } ItclObject;
 
 #define ITCL_IGNORE_ERRS  0x002  /* useful for construction/destruction */
@@ -687,6 +688,9 @@ MODULE_SCOPE void ItclReleaseIMF(ClientData imPtr);
 MODULE_SCOPE void ItclPreserveClass(ItclClass *iclsPtr);
 MODULE_SCOPE void ItclReleaseClass(ClientData iclsPtr);
 
+MODULE_SCOPE void ItclPreserveObject(ItclObject *ioPtr);
+MODULE_SCOPE void ItclReleaseObject(ClientData ioPtr);
+
 MODULE_SCOPE ItclFoundation *ItclGetFoundation(Tcl_Interp *interp);
 MODULE_SCOPE Tcl_ObjCmdProc ItclClassCommandDispatcher;
 MODULE_SCOPE Tcl_Command Itcl_CmdAliasProc(Tcl_Interp *interp,
@@ -741,6 +745,7 @@ MODULE_SCOPE int Itcl_CreateMethodVariable (Tcl_Interp *interp,
        Tcl_Obj *callbackPtr, ItclMethodVariable **imvPtr);
 MODULE_SCOPE int DelegationInstall(Tcl_Interp *interp, ItclObject *ioPtr,
         ItclClass *iclsPtr);
+MODULE_SCOPE ItclClass *ItclNamespace2Class(Tcl_Namespace *nsPtr);
 MODULE_SCOPE const char* ItclGetCommonInstanceVar(Tcl_Interp *interp,
         const char *name, const char *name2, ItclObject *contextIoPtr,
        ItclClass *contextIclsPtr);
similarity index 99%
rename from pkgs/itcl4.1.0/generic/itclMethod.c
rename to pkgs/itcl4.1.1/generic/itclMethod.c
index f609f7a..e33e62b 100644 (file)
@@ -1460,8 +1460,7 @@ Itcl_UnsetContext(
     Itcl_DeleteStack(stackPtr);
     ckfree((char *) stackPtr);
     Tcl_DeleteHashEntry(hPtr);
-    contextPtr->refCount--;
-    if (contextPtr->refCount) {
+    if (--contextPtr->refCount) {
        Tcl_Panic("frame context ref count not zero!");
     }
     ckfree((char *)contextPtr);
@@ -2465,7 +2464,7 @@ ItclCheckCallMethod(
 
     if (ioPtr != NULL) {
         ioPtr->callRefCount++;
-       Itcl_PreserveData(ioPtr);
+       ItclPreserveObject(ioPtr);
     }
     imPtr->iclsPtr->callRefCount++;
     if (!imPtr->iclsPtr->infoPtr->useOldResolvers) {
@@ -2580,7 +2579,7 @@ ItclAfterCallMethod(
             if (hPtr == NULL) {
                 ckfree((char *)callContextPtr);
            }
-            Itcl_ReleaseData(ioPtr);
+           ItclReleaseObject(ioPtr);
         } else {
             ckfree((char *)callContextPtr);
         }
similarity index 99%
rename from pkgs/itcl4.1.0/generic/itclObject.c
rename to pkgs/itcl4.1.1/generic/itclObject.c
index 49c95bb..2e60c97 100644 (file)
@@ -70,6 +70,24 @@ static const char * GetConstructorVar(Tcl_Interp *interp, ItclClass *iclsPtr,
 static ItclClass * GetClassFromClassName(Tcl_Interp *interp,
        const char *className, ItclClass *iclsPtr);
 
+void
+ItclPreserveObject(
+    ItclObject *ioPtr)
+{
+    ioPtr->refCount++;
+}
+
+void
+ItclReleaseObject(
+    ClientData clientData)
+{
+    ItclObject *ioPtr = (ItclObject *)clientData;
+
+    if (--ioPtr->refCount == 0) {
+       ItclFreeObject((char *) clientData);
+    }
+}
+
 \f
 /*
  * ------------------------------------------------------------------------
@@ -269,7 +287,7 @@ ItclCreateObject(
      *  This is done before invoking the constructors so that the
      *  command can be used during construction to query info.
      */
-    Itcl_PreserveData((ClientData)ioPtr);
+    ItclPreserveObject(ioPtr);
 
     ioPtr->namePtr = Tcl_NewStringObj(name, -1);
     Tcl_IncrRefCount(ioPtr->namePtr);
@@ -299,8 +317,7 @@ ItclCreateObject(
     Tcl_InitObjHashTable(&ioPtr->objectMethodVariables);
     Tcl_InitHashTable(&ioPtr->contextCache, TCL_ONE_WORD_KEYS);
 
-    Itcl_PreserveData((ClientData)ioPtr);  /* while we're using this... */
-    Itcl_EventuallyFree((ClientData)ioPtr, ItclFreeObject);
+    ItclPreserveObject(ioPtr);
 
     /*
      *  Install the class namespace and object context so that
@@ -495,7 +512,7 @@ ItclCreateObject(
         result = Itcl_RestoreInterpState(interp, istate);
        infoPtr->currIoPtr = saveCurrIoPtr;
        /* need this for 2 ReleaseData at errorReturn!! */
-        Itcl_PreserveData(ioPtr);
+       ItclPreserveObject(ioPtr);
         goto errorReturn;
     } else {
        /* a constructor cannot return a result as the object name
@@ -544,7 +561,7 @@ ItclCreateObject(
        }
         result = Itcl_RestoreInterpState(interp, istate);
        /* need this for 2 ReleaseData at errorReturn!! */
-        Itcl_PreserveData(ioPtr);
+       ItclPreserveObject(ioPtr);
         goto errorReturn;
     }
 
@@ -596,7 +613,7 @@ ItclCreateObject(
            }
             result = Itcl_RestoreInterpState(interp, istate);
            /* need this for 2 ReleaseData at errorReturn!! */
-            Itcl_PreserveData(ioPtr);
+           ItclPreserveObject(ioPtr);
             goto errorReturn;
        }
     }
@@ -688,7 +705,7 @@ ItclCreateObject(
     ckfree((char*)ioPtr->constructed);
     ioPtr->constructed = NULL;
     ItclAddObjectsDictInfo(interp, ioPtr);
-    Itcl_ReleaseData((ClientData)ioPtr);
+    ItclReleaseObject(ioPtr);
     return result;
 
 errorReturn:
@@ -713,8 +730,8 @@ errorReturn:
         ioPtr->constructed = NULL;
     }
     ItclDeleteObjectVariablesNamespace(interp, ioPtr);
-    Itcl_ReleaseData((ClientData)ioPtr);
-    Itcl_ReleaseData((ClientData)ioPtr);
+    ItclReleaseObject(ioPtr);
+    ItclReleaseObject(ioPtr);
     return result;
 }
 \f
@@ -1299,16 +1316,17 @@ Itcl_DeleteObject(
     Tcl_CmdInfo cmdInfo;
     Tcl_HashEntry *hPtr;
 
+
     Tcl_GetCommandInfoFromToken(contextIoPtr->accessCmd, &cmdInfo);
 
     contextIoPtr->flags |= ITCL_OBJECT_IS_DELETED;
-    Itcl_PreserveData((ClientData)contextIoPtr);
+    ItclPreserveObject(contextIoPtr);
 
     /*
      *  Invoke the object's destructors.
      */
     if (Itcl_DestructObject(interp, contextIoPtr, 0) != TCL_OK) {
-        Itcl_ReleaseData((ClientData)contextIoPtr);
+       ItclReleaseObject(contextIoPtr);
        contextIoPtr->flags |=
                ITCL_TCLOO_OBJECT_IS_DELETED|ITCL_OBJECT_DESTRUCT_ERROR;
         return TCL_ERROR;
@@ -1332,7 +1350,7 @@ Itcl_DeleteObject(
     if ((contextIoPtr->accessCmd != NULL) && (!(contextIoPtr->flags &
             (ITCL_OBJECT_IS_RENAMED)))) {
     if (Tcl_GetCommandInfoFromToken(contextIoPtr->accessCmd, &cmdInfo) == 1) {
-        cmdInfo.deleteProc = Itcl_ReleaseData;
+        cmdInfo.deleteProc = ItclReleaseObject;
        Tcl_SetCommandInfoFromToken(contextIoPtr->accessCmd, &cmdInfo);
 
         Tcl_DeleteCommandFromToken(interp, contextIoPtr->accessCmd);
@@ -1341,7 +1359,7 @@ Itcl_DeleteObject(
     contextIoPtr->oPtr = NULL;
     contextIoPtr->accessCmd = NULL;
 
-    Itcl_ReleaseData((ClientData)contextIoPtr);  /* object should die here */
+    ItclReleaseObject(contextIoPtr);
 
     return TCL_OK;
 }
@@ -2714,7 +2732,7 @@ ItclDestroyObject(
         }
         contextIoPtr->accessCmd = NULL;
     }
-    Itcl_ReleaseData((ClientData)contextIoPtr);
+    ItclReleaseObject(contextIoPtr);
 }
 \f
 /*
@@ -2723,7 +2741,7 @@ ItclDestroyObject(
  *
  *  Deletes all instance variables and frees all memory associated with
  *  the given object instance.  This is usually invoked automatically
- *  by Itcl_ReleaseData(), when an object's data is no longer being used.
+ *  by ItclReleaseObject(), when an object's data is no longer being used.
  * ------------------------------------------------------------------------
  */
 static void
@@ -3811,3 +3829,17 @@ ItclInitExtendedClassOptions(
     Itcl_DeleteHierIter(&hier);
     return TCL_OK;
 }
+
+ItclClass *
+ItclNamespace2Class(Tcl_Namespace *nsPtr)
+{
+    ItclObjectInfo * infoPtr;
+    Tcl_HashEntry *hPtr;
+    infoPtr = (ItclObjectInfo *)Tcl_GetAssocData(((Namespace *)nsPtr)->interp,
+       ITCL_INTERP_DATA, NULL);
+    hPtr = Tcl_FindHashEntry(&(infoPtr->namespaceClasses), nsPtr);
+    if (hPtr == NULL) {
+       return NULL;
+    }
+    return Tcl_GetHashValue(hPtr); 
+}
similarity index 99%
rename from pkgs/itcl4.1.0/generic/itclUtil.c
rename to pkgs/itcl4.1.1/generic/itclUtil.c
index 27f5ce9..057f01b 100644 (file)
@@ -575,7 +575,7 @@ Itcl_DbDumpPreserveInfo(
     FILE *fd;
     ItclPreserveInfo *ipiPtr;
     ItclPreserveInfoEntry *ipiePtr;
-    int j;
+    size_t j;
 
     if (fileName == NULL) {
         fd = stderr;
@@ -587,7 +587,7 @@ Itcl_DbDumpPreserveInfo(
        if (ipiPtr->refCount == 0) {
            continue;
        }
-       fprintf(stderr, "DAT!%p!%d!\n", ipiPtr->clientData, ipiPtr->refCount);
+       fprintf(stderr, "DAT!%p!%" TCL_LL_MODIFIER "u!\n", ipiPtr->clientData, (Tcl_WideUInt) ipiPtr->refCount);
         for (j = 0; j < ipiPtr->numEntries; j++) {
             ipiePtr = &ipiPtr->entries[j];
             if (ipiePtr->type != ITCL_PRESERVE_DELETED) {
@@ -734,8 +734,7 @@ ItclDbgReleaseData(
             ipiePtr->type = ITCL_PRESERVE_DECR;
             ipiePtr->line = line;
             ipiePtr->fileName = file;
-            ipiPtr->refCount--;
-            if (ipiPtr->refCount < 0) {
+            if (ipiPtr->refCount-- == 0) {
                 fprintf(stderr, "REFCOUNT < 0 for: %p!\n", cdata);
                 noDelete = 1;
             }
similarity index 77%
rename from pkgs/itcl4.1.0/pkgIndex.tcl.in
rename to pkgs/itcl4.1.1/pkgIndex.tcl.in
index 28e123d..31fe6b1 100644 (file)
@@ -1,6 +1,6 @@
 # Tcl package index file, version 1.0
 
-if {![package vsatisfies [package provide Tcl] 8.6]} {return}
+if {![package vsatisfies [package provide Tcl] 8.6-]} {return}
 
 package ifneeded itcl @PACKAGE_VERSION@ [list load [file join $dir "@PKG_LIB_FILE@"] itcl]
 package ifneeded Itcl @PACKAGE_VERSION@ [list load [file join $dir "@PKG_LIB_FILE@"] itcl]
similarity index 92%
rename from pkgs/itcl4.1.0/releasenotes.txt
rename to pkgs/itcl4.1.1/releasenotes.txt
index 20c33bb..89ee45e 100644 (file)
@@ -1,11 +1,11 @@
-This is the release 4.1.0 of Itcl.
+This is the release 4.1.1 of Itcl.
 
 It is intended to be script compatible with Itcl 4.0.* and Itcl 3.4.* .
 It very likely presents the same public C interface as Itcl 4.0.* .
 It includes incompatible changes to internal structs when compared
 with Itcl 4.0.* .  Unfortunately, the extension Itk 4.0.* intrudes
 in those internals and will notice and break in the presence of Itcl 4.1.* .
-When you upgrade to Itcl 4.1.0 , you must also upgrade to Itk 4.1.0 .  It
+When you upgrade to Itcl 4.1 , you must also upgrade to Itk 4.1 .  It
 is possible you will find other extensions and applications repeating Itk's
 error.
 
similarity index 97%
rename from pkgs/sqlite3.20.0/tclconfig/tcl.m4
rename to pkgs/itcl4.1.1/tclconfig/tcl.m4
index 203a05d..e8234a2 100644 (file)
@@ -135,8 +135,9 @@ AC_DEFUN([TEA_PATH_TCLCONFIG], [
                for i in `ls -d ${libdir} 2>/dev/null` \
                        `ls -d ${exec_prefix}/lib 2>/dev/null` \
                        `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
                        `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/pkg/lib 2>/dev/null` \
                        `ls -d /usr/lib 2>/dev/null` \
                        `ls -d /usr/lib64 2>/dev/null` \
                        `ls -d /usr/lib/tcl8.6 2>/dev/null` \
@@ -349,6 +350,8 @@ AC_DEFUN([TEA_PATH_TKCONFIG], [
 #              TCL_BIN_DIR
 #              TCL_SRC_DIR
 #              TCL_LIB_FILE
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
 #------------------------------------------------------------------------
 
 AC_DEFUN([TEA_LOAD_TCLCONFIG], [
@@ -783,7 +786,7 @@ AC_DEFUN([TEA_ENABLE_SHARED], [
 AC_DEFUN([TEA_ENABLE_THREADS], [
     AC_ARG_ENABLE(threads,
        AC_HELP_STRING([--enable-threads],
-           [build with threads]),
+           [build with threads (default: on)]),
        [tcl_ok=$enableval], [tcl_ok=yes])
 
     if test "${enable_threads+set}" = set; then
@@ -1499,7 +1502,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
            ;;
        HP-UX-*.11.*)
@@ -1610,7 +1613,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
            CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
 
            # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            AS_IF([test $doRpath = yes], [
                CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
@@ -1649,37 +1652,21 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
        OpenBSD-*)
            arch=`arch -s`
            case "$arch" in
-           vax)
-               SHLIB_SUFFIX=""
-               SHARED_LIB_SUFFIX=""
-               LDFLAGS=""
+           alpha|sparc64)
+               SHLIB_CFLAGS="-fPIC"
                ;;
            *)
-               case "$arch" in
-               alpha|sparc64)
-                   SHLIB_CFLAGS="-fPIC"
-                   ;;
-               *)
-                   SHLIB_CFLAGS="-fpic"
-                   ;;
-               esac
-               SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-               SHLIB_SUFFIX=".so"
-               AS_IF([test $doRpath = yes], [
-                   CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
-               LDFLAGS="-Wl,-export-dynamic"
-               ;;
-           esac
-           case "$arch" in
-           vax)
-               CFLAGS_OPTIMIZE="-O1"
-               ;;
-           *)
-               CFLAGS_OPTIMIZE="-O2"
+               SHLIB_CFLAGS="-fpic"
                ;;
            esac
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
+           LDFLAGS="-Wl,-export-dynamic"
+           CFLAGS_OPTIMIZE="-O2"
            AS_IF([test "${TCL_THREADS}" = "1"], [
                # On OpenBSD:   Compile with -pthread
                #               Don't link with -lpthread
@@ -1693,7 +1680,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            LDFLAGS="$LDFLAGS -export-dynamic"
            AS_IF([test $doRpath = yes], [
@@ -2378,7 +2365,6 @@ closedir(d);
 
     # TEA specific:
     AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have <errno.h>?])])
-    AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have <float.h>?])])
     AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have <values.h>?])])
     AC_CHECK_HEADER(limits.h,
        [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have <limits.h>?])],
@@ -4236,6 +4222,114 @@ AC_DEFUN([TEA_PATH_CELIB], [
        fi
     fi
 ])
+
+###
+# Tip 430 - ZipFS Modifications
+###
+#------------------------------------------------------------------------
+# SC_ZIPFS_SUPPORT
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
+#              TCL_ZIPFS_FLAG
+#              ZIP_PROG
+#------------------------------------------------------------------------
+
+#------------------------------------------------------------------------
+# SC_PROG_ZIP
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              ZIP_PROG
+#       ZIP_PROG_OPTIONS
+#       ZIP_PROG_VFSSEARCH
+#       ZIP_INSTALL_OBJS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ZIPFS_SUPPORT], [
+    AC_MSG_CHECKING([for zipfs support])
+    ZIP_PROG=""
+    ZIP_PROG_OPTIONS=""
+    ZIP_PROG_VFSSEARCH=""
+    INSTALL_MSGS=""
+    # If our native tclsh processes the "install" command line option
+    # we can use it to mint zip files
+    AS_IF([$TCLSH_PROG install],[
+      ZIP_PROG=${TCLSH_PROG}
+      ZIP_PROG_OPTIONS="install mkzip"
+      ZIP_PROG_VFSSEARCH="."
+      AC_MSG_RESULT([Can use Native Tclsh for Zip encoding])
+    ])
+    if test "x$ZIP_PROG" = "x" ; then
+        AC_CACHE_VAL(ac_cv_path_zip, [
+        search_path=`echo ${PATH} | sed -e 's/:/ /g'`
+        for dir in $search_path ; do
+            for j in `ls -r $dir/zip 2> /dev/null` \
+                `ls -r $dir/zip 2> /dev/null` ; do
+            if test x"$ac_cv_path_zip" = x ; then
+                if test -f "$j" ; then
+                ac_cv_path_zip=$j
+                break
+                fi
+            fi
+            done
+        done
+        ])
+        if test -f "$ac_cv_path_zip" ; then
+            ZIP_PROG="$ac_cv_path_zip "
+            AC_MSG_RESULT([$ZIP_PROG])
+            ZIP_PROG_OPTIONS="-rq"
+            ZIP_PROG_VFSSEARCH="."
+            AC_MSG_RESULT([Found INFO Zip in environment])
+            # Use standard arguments for zip
+        fi
+    fi
+    if test "x$ZIP_PROG" = "x" ; then
+           # It is not an error if an installed version of Zip can't be located.
+        ZIP_PROG=""
+        ZIP_PROG_OPTIONS=""
+        ZIP_PROG_VFSSEARCH=""
+        TCL_ZIPFS_SUPPORT=0
+        TCL_ZIPFS_FLAG=
+    else
+        # ZIPFS Support
+       eval "TCL_ZIP_FILE=\"${TCL_ZIP_FILE}\""
+       if test ${TCL_ZIP_FILE} = "" ; then
+          TCL_ZIPFS_SUPPORT=0
+          TCL_ZIPFS_FLAG=
+          INSTALL_LIBRARIES=install-libraries
+          INSTALL_MSGS=install-msgs
+       else
+           if test ${SHARED_BUILD} = 1 ; then
+              TCL_ZIPFS_SUPPORT=1
+              INSTALL_LIBRARIES=install-libraries-zipfs-shared
+           else
+              TCL_ZIPFS_SUPPORT=2
+              INSTALL_LIBRARIES=install-libraries-zipfs-static
+           fi
+          TCL_ZIPFS_FLAG=-DTCL_ZIPFS_SUPPORT
+       fi
+    fi
+
+    AC_SUBST(TCL_ZIP_FILE)
+    AC_SUBST(TCL_ZIPFS_SUPPORT)
+    AC_SUBST(TCL_ZIPFS_FLAG)
+    AC_SUBST(ZIP_PROG)
+    AC_SUBST(ZIP_PROG_OPTIONS)
+    AC_SUBST(ZIP_PROG_VFSSEARCH)
+    AC_SUBST(INSTALL_LIBRARIES)
+    AC_SUBST(INSTALL_MSGS)
+])
+
 # Local Variables:
 # mode: autoconf
 # End:
similarity index 96%
rename from pkgs/itcl4.1.0/tests/eclasscomponent.test
rename to pkgs/itcl4.1.1/tests/eclasscomponent.test
index af18a9c..56df617 100644 (file)
@@ -163,7 +163,7 @@ test delegatemethod-1.6a {delegating unknown method to existing component with e
     ::itcl::delete class dog
 } -returnCodes {
     error
-} -result {unknown or ambiguous subcommand "foo": must be bytelength, cat, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, reverse, tolower, totitle, toupper, trim, trimleft, trimright, wordend, or wordstart}
+} -match glob -result {unknown or ambiguous subcommand "foo": must be *}
 
 test delegatemethod-1.7 {can't delegate local method: order 1} -body {
     ::itcl::extendedclass dog {
similarity index 97%
rename from pkgs/itcl4.1.0/tests/typedelegation.test
rename to pkgs/itcl4.1.1/tests/typedelegation.test
index 314d3c0..4b18bb5 100644 (file)
@@ -94,7 +94,7 @@ test dtypemethod-1.6a {delegating unknown typemethod to existing typecomponent w
     dog destroy
 } -returnCodes {
     error
-} -result {unknown or ambiguous subcommand "foo": must be bytelength, cat, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, reverse, tolower, totitle, toupper, trim, trimleft, trimright, wordend, or wordstart}
+} -match glob -result {unknown or ambiguous subcommand "foo": must be *}
 
 test dtypemethod-1.7 {can't delegate local typemethod: order 1} -body {
     type dog {
@@ -419,7 +419,7 @@ test dmethod-1.6a {delegating unknown method to existing component with error} -
     error
 } -cleanup {
     dog destroy
-} -result {unknown or ambiguous subcommand "foo": must be bytelength, cat, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, reverse, tolower, totitle, toupper, trim, trimleft, trimright, wordend, or wordstart}
+} -match glob -result {unknown or ambiguous subcommand "foo": must be *}
 
 test dmethod-1.7 {can't delegate local method: order 1} -body {
     type cat {
similarity index 99%
rename from pkgs/itcl4.1.0/tests/widgetadaptor.test
rename to pkgs/itcl4.1.1/tests/widgetadaptor.test
index 97d2f53..31ea020 100644 (file)
@@ -26,7 +26,7 @@ proc testsNeedTcl {version} {
     # testsuite calling the command. The command has to be called
     # immediately after loading the utilities.
 
-    if {[package vsatisfies [package provide Tcl] $version]} return
+    if {[package vsatisfies [package provide Tcl] ${version}-]} return
 
     puts "    Aborting the tests found in \"[file tail [info script]]\""
     puts "    Requiring at least Tcl $version, have [package present Tcl]."
similarity index 99%
rename from pkgs/itcl4.1.0/tests/widgetclass.test
rename to pkgs/itcl4.1.1/tests/widgetclass.test
index 826a790..a3cef0c 100644 (file)
@@ -26,7 +26,7 @@ proc testsNeedTcl {version} {
     # testsuite calling the command. The command has to be called
     # immediately after loading the utilities.
 
-    if {[package vsatisfies [package provide Tcl] $version]} return
+    if {[package vsatisfies [package provide Tcl] ${version}-]} return
 
     puts "    Aborting the tests found in \"[file tail [info script]]\""
     puts "    Requiring at least Tcl $version, have [package present Tcl]."
diff --git a/pkgs/itcl4.1.1/win/makefile.vc b/pkgs/itcl4.1.1/win/makefile.vc
new file mode 100644 (file)
index 0000000..624a3ec
--- /dev/null
@@ -0,0 +1,101 @@
+#------------------------------------------------------------- -*- makefile -*-
+#
+# Makefile for ITcl
+#
+# Basic build, test and install
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir TCLDIR=c:\path\to\tcl\source
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir TCLDIR=c:\path\to\tcl\source test
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir TCLDIR=c:\path\to\tcl\source install
+#
+# For other build options (debug, static etc.)
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+# 
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+#------------------------------------------------------------------------------
+
+PROJECT         = itcl
+NEED_TCL_SOURCE = 1
+RCFILE      = itcl.rc
+# Tcl 8.6 etc. compile with /DUNICODE. ITcl pre-nmake reform compiled
+# without -DUNICODE. Keep that behaviour for now.
+USE_WIDECHAR_API  = 0
+
+!include "rules-ext.vc"
+
+PRJ_OBJS = \
+        $(TMP_DIR)\itcl2TclOO.obj \
+        $(TMP_DIR)\itclBase.obj \
+        $(TMP_DIR)\itclBuiltin.obj \
+        $(TMP_DIR)\itclClass.obj \
+        $(TMP_DIR)\itclCmd.obj \
+        $(TMP_DIR)\itclEnsemble.obj \
+        $(TMP_DIR)\itclHelpers.obj \
+        $(TMP_DIR)\itclInfo.obj \
+        $(TMP_DIR)\itclLinkage.obj \
+        $(TMP_DIR)\itclMethod.obj \
+        $(TMP_DIR)\itclMigrate2TclCore.obj \
+        $(TMP_DIR)\itclObject.obj \
+        $(TMP_DIR)\itclParse.obj \
+        $(TMP_DIR)\itclResolve.obj \
+        $(TMP_DIR)\itclStubs.obj \
+        $(TMP_DIR)\itclStubInit.obj \
+        $(TMP_DIR)\itclTclIntStubsFcn.obj \
+        $(TMP_DIR)\itclUtil.obj \
+!if !$(STATIC_BUILD)
+       $(TMP_DIR)\dllEntryPoint.obj \
+!endif
+
+PRJ_STUBOBJS = $(TMP_DIR)\itclStubLib.obj
+
+PRJ_DEFINES = -D_CRT_SECURE_NO_WARNINGS
+!if $(DEBUG)
+PRJ_DEFINES = $(PRJ_DEFINES) -DITCL_DEBUG
+!endif
+
+PRJ_HEADERS_PUBLIC = \
+       $(GENERICDIR)\itcl.h \
+       $(GENERICDIR)\itclDecls.h
+
+
+# Define the standard targets except we have a custom test target
+DISABLE_TARGET_test = 1
+!include "$(_RULESDIR)\targets.vc"
+
+pkgindex:   $(OUT_DIR)\pkgIndex.tcl
+$(OUT_DIR)\pkgIndex.tcl:
+       @$(COPY) << "$(OUT_DIR)\pkgIndex.tcl"
+if {[package vsatisfies 8.0 [package provide Tcl]]} { 
+    set add 80
+} else {
+    set add {t}
+}
+if {[info exists ::tcl_platform(debug)] && $$::tcl_platform(debug) && \
+        [file exists [file join $$dir itcl$(VERSION)$${add}g.dll]]} {
+    package ifneeded Itcl $(DOTVERSION) [list load [file join $$dir itcl$(VERSION)$${add}g.dll] Itcl]
+} else {
+    package ifneeded Itcl $(DOTVERSION) [list load [file join $$dir itcl$(VERSION)$${add}.dll] Itcl]
+}
+unset add
+<<
+
+!if $(STATIC_BUILD)
+test :
+       @echo test target not supported for a static library.
+!else
+test : setup $(PROJECT)
+       $(TCLSH) ..\tests\all.tcl $(TESTFLAGS) -loadfile <<
+       set env(ITCL_LIBRARY) [file normalize [file join $(MAKEDIR:\=/) .. library]]
+       package ifneeded $(PROJECT) $(DOTVERSION) [list load [file normalize [file join $(MAKEDIR:\=/) $(PRJLIB:\=/)]]]
+<<
+!endif
+
+genstubs:
+!if $(TCLINSTALL)
+       @echo Need the source distribution to regenerate the Stubs table.
+!else
+       $(TCLSH) $(TOOLSDIR)\genStubs.tcl $(GENERICDIR) \
+              $(GENERICDIR)\$(PROJECT).decls $(GENERICDIR)\$(PROJECT)Int.decls
+!endif
similarity index 83%
rename from pkgs/sqlite3.20.0/win/nmakehlp.c
rename to pkgs/itcl4.1.1/win/nmakehlp.c
index 22b7b06..025bb99 100644 (file)
@@ -39,7 +39,6 @@
 #endif
 
 
-
 /* protos */
 
 static int CheckForCompilerFeature(const char *option);
@@ -47,6 +46,7 @@ static int CheckForLinkerFeature(const char **options, int count);
 static int IsIn(const char *string, const char *substring);
 static int SubstituteFile(const char *substs, const char *filename);
 static int QualifyPath(const char *path);
+static int LocateDependency(const char *keyfile);
 static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
 static DWORD WINAPI ReadFromPipe(LPVOID args);
 
@@ -74,6 +74,7 @@ main(
     char msg[300];
     DWORD dwWritten;
     int chars;
+    char *s;
 
     /*
      * Make sure children (cl.exe and link.exe) are kept quiet.
@@ -153,8 +154,13 @@ main(
                    &dwWritten, NULL);
                return 0;
            }
-           printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'));
-           return 0;
+           s = GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0');
+           if (s && *s) {
+               printf("%s\n", s);
+               return 0;
+           } else
+               return 1; /* Version not found. Return non-0 exit code */
+
        case 'Q':
            if (argc != 3) {
                chars = snprintf(msg, sizeof(msg) - 1,
@@ -166,6 +172,18 @@ main(
                return 2;
            }
            return QualifyPath(argv[2]);
+
+       case 'L':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -L keypath\n"
+                   "Emit the fully qualified path of directory containing keypath\n"
+                   "exitcodes: 0 == success, 1 == not found, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return LocateDependency(argv[2]);
        }
     }
     chars = snprintf(msg, sizeof(msg) - 1,
@@ -695,6 +713,97 @@ QualifyPath(
 }
 
 /*
+ * Implements LocateDependency for a single directory. See that command
+ * for an explanation.
+ * Returns 0 if found after printing the directory.
+ * Returns 1 if not found but no errors.
+ * Returns 2 on any kind of error
+ * Basically, these are used as exit codes for the process.
+ */
+static int LocateDependencyHelper(const char *dir, const char *keypath)
+{
+    HANDLE hSearch;
+    char path[MAX_PATH+1];
+    int dirlen, keylen, ret;
+    WIN32_FIND_DATA finfo;
+
+    if (dir == NULL || keypath == NULL)
+       return 2; /* Have no real error reporting mechanism into nmake */
+    dirlen = strlen(dir);
+    if ((dirlen + 3) > sizeof(path))
+       return 2;
+    strncpy(path, dir, dirlen);
+    strncpy(path+dirlen, "\\*", 3);    /* Including terminating \0 */
+    keylen = strlen(keypath);
+
+#if 0 /* This function is not available in Visual C++ 6 */
+    /*
+     * Use numerics 0 -> FindExInfoStandard,
+     * 1 -> FindExSearchLimitToDirectories, 
+     * as these are not defined in Visual C++ 6
+     */
+    hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0);
+#else
+    hSearch = FindFirstFile(path, &finfo);
+#endif
+    if (hSearch == INVALID_HANDLE_VALUE)
+       return 1; /* Not found */
+
+    /* Loop through all subdirs checking if the keypath is under there */
+    ret = 1; /* Assume not found */
+    do {
+       int sublen;
+       /*
+        * We need to check it is a directory despite the 
+        * FindExSearchLimitToDirectories in the above call. See SDK docs
+        */
+       if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
+           continue;
+       sublen = strlen(finfo.cFileName);
+       if ((dirlen+1+sublen+1+keylen+1) > sizeof(path))
+           continue;           /* Path does not fit, assume not matched */
+       strncpy(path+dirlen+1, finfo.cFileName, sublen);
+       path[dirlen+1+sublen] = '\\';
+       strncpy(path+dirlen+1+sublen+1, keypath, keylen+1);
+       if (PathFileExists(path)) {
+           /* Found a match, print to stdout */
+           path[dirlen+1+sublen] = '\0';
+           QualifyPath(path);
+           ret = 0;
+           break;
+       }
+    } while (FindNextFile(hSearch, &finfo));
+    FindClose(hSearch);
+    return ret;
+}
+
+/*
+ * LocateDependency --
+ *
+ *     Locates a dependency for a package.
+ *        keypath - a relative path within the package directory
+ *          that is used to confirm it is the correct directory.
+ *     The search path for the package directory is currently only
+ *      the parent and grandparent of the current working directory.
+ *      If found, the command prints 
+ *         name_DIRPATH=<full path of located directory>
+ *      and returns 0. If not found, does not print anything and returns 1.
+ */
+static int LocateDependency(const char *keypath)
+{
+    int i, ret;
+    static char *paths[] = {"..", "..\\..", "..\\..\\.."};
+    
+    for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) {
+       ret = LocateDependencyHelper(paths[i], keypath);
+       if (ret == 0)
+           return ret;
+    }
+    return ret;
+}
+
+
+/*
  * Local variables:
  *   mode: c
  *   c-basic-offset: 4
diff --git a/pkgs/itcl4.1.1/win/rules-ext.vc b/pkgs/itcl4.1.1/win/rules-ext.vc
new file mode 100644 (file)
index 0000000..ab86876
--- /dev/null
@@ -0,0 +1,118 @@
+# This file should only be included in makefiles for Tcl extensions,
+# NOT in the makefile for Tcl itself.
+
+!ifndef _RULES_EXT_VC
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+!if "$(PROJECT)" == "tcl"
+!error The rules-ext.vc file is not intended for Tcl itself.
+!endif
+
+# We extract version numbers using the nmakehlp program. For now use
+# the local copy of nmakehlp. Once we locate Tcl, we will use that
+# one if it is newer.
+!if [$(CC) -nologo "nmakehlp.c" -link -subsystem:console > nul]
+!endif
+
+# First locate the Tcl directory that we are working with.
+!ifdef TCLDIR
+
+_RULESDIR = $(TCLDIR:/=\)
+
+!else
+
+# If an installation path is specified, that is also the Tcl directory.
+# Also Tk never builds against an installed Tcl, it needs Tcl sources
+!if defined(INSTALLDIR) && "$(PROJECT)" != "tk"
+_RULESDIR=$(INSTALLDIR:/=\)
+!else
+# Locate Tcl sources
+!if [echo _RULESDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+_RULESDIR = ..\..\tcl
+!else
+!include nmakehlp.out
+!endif
+
+!endif # defined(INSTALLDIR)....
+
+!endif # ifndef TCLDIR
+
+# Now look for the targets.vc file under the Tcl root. Note we check this
+# file and not rules.vc because the latter also exists on older systems.
+!if exist("$(_RULESDIR)\lib\nmake\targets.vc") # Building against installed Tcl
+_RULESDIR = $(_RULESDIR)\lib\nmake
+!elseif exist("$(_RULESDIR)\win\targets.vc")   # Building against Tcl sources
+_RULESDIR = $(_RULESDIR)\win
+!else
+# If we have not located Tcl's targets file, most likely we are compiling
+# against an older version of Tcl and so must use our own support files.
+_RULESDIR = .
+!endif
+
+!if "$(_RULESDIR)" != "."
+# Potentially using Tcl's support files. If this extension has its own
+# nmake support files, need to compare the versions and pick newer.
+
+!if exist("rules.vc") # The extension has its own copy
+
+!if [echo TCL_RULES_MAJOR = \> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo TCL_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+
+!if [echo OUR_RULES_MAJOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo OUR_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+!include versions.vc
+# We have a newer version of the support files, use them
+!if ($(TCL_RULES_MAJOR) != $(OUR_RULES_MAJOR)) || ($(TCL_RULES_MINOR) < $(OUR_RULES_MINOR))
+_RULESDIR = .
+!endif
+
+!endif # if exist("rules.vc")
+
+!endif # if $(_RULESDIR) != "."
+
+# Let rules.vc know what copy of nmakehlp.c to use.
+NMAKEHLPC = $(_RULESDIR)\nmakehlp.c
+
+# Get rid of our internal defines before calling rules.vc
+!undef TCL_RULES_MAJOR
+!undef TCL_RULES_MINOR
+!undef OUR_RULES_MAJOR
+!undef OUR_RULES_MINOR
+
+!if exist("$(_RULESDIR)\rules.vc")
+!message *** Using $(_RULESDIR)\rules.vc
+!include "$(_RULESDIR)\rules.vc"
+!else
+!error *** Could not locate rules.vc in $(_RULESDIR)
+!endif
+
+!endif # _RULES_EXT_VC
\ No newline at end of file
diff --git a/pkgs/itcl4.1.1/win/rules.vc b/pkgs/itcl4.1.1/win/rules.vc
new file mode 100644 (file)
index 0000000..bbb412d
--- /dev/null
@@ -0,0 +1,1723 @@
+#------------------------------------------------------------- -*- makefile -*-
+# rules.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file does all the hard work in terms of parsing build options,
+# compiler switches, defining common targets and macros. The Tcl makefile
+# directly includes this. Extensions include it via "rules-ext.vc".
+#
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# Copyright (c) 2001-2003 David Gravereaux.
+# Copyright (c) 2003-2008 Patrick Thoyts
+# Copyright (c) 2017      Ashok P. Nadkarni
+#------------------------------------------------------------------------------
+
+!ifndef _RULES_VC
+_RULES_VC = 1
+
+# The following macros define the version of the rules.vc nmake build system
+# For modifications that are not backward-compatible, you *must* change
+# the major version.
+RULES_VERSION_MAJOR = 1
+RULES_VERSION_MINOR = 0
+
+# The PROJECT macro must be defined by parent makefile.
+!if "$(PROJECT)" == ""
+!error *** Error: Macro PROJECT not defined! Please define it before including rules.vc
+!endif
+
+!if "$(PRJ_PACKAGE_TCLNAME)" == ""
+PRJ_PACKAGE_TCLNAME = $(PROJECT)
+!endif
+
+# Also special case Tcl and Tk to save some typing later
+DOING_TCL = 0
+DOING_TK  = 0
+!if "$(PROJECT)" == "tcl"
+DOING_TCL = 1
+!elseif "$(PROJECT)" == "tk"
+DOING_TK = 1
+!endif
+
+!ifndef NEED_TK
+# Backwards compatibility
+!ifdef PROJECT_REQUIRES_TK
+NEED_TK = $(PROJECT_REQUIRES_TK)
+!else
+NEED_TK = 0
+!endif
+!endif
+
+!ifndef NEED_TCL_SOURCE
+NEED_TCL_SOURCE = 0
+!endif
+
+!ifdef NEED_TK_SOURCE
+!if $(NEED_TK_SOURCE)
+NEED_TK = 1
+!endif
+!else
+NEED_TK_SOURCE = 0
+!endif
+
+################################################################
+# Nmake is a pretty weak environment in syntax and capabilities
+# so this file is necessarily verbose. It's broken down into
+# the following parts.
+#
+# 0. Sanity check that compiler environment is set up and initialize
+#    any built-in settings from the parent makefile
+# 1. First define the external tools used for compiling, copying etc.
+#    as this is independent of everything else.
+# 2. Figure out our build structure in terms of the directory, whether
+#    we are building Tcl or an extension, etc.
+# 3. Determine the compiler and linker versions
+# 4. Build the nmakehlp helper application
+# 5. Determine the supported compiler options and features
+# 6. Parse the OPTS macro value for user-specified build configuration
+# 7. Parse the STATS macro value for statistics instrumentation
+# 8. Parse the CHECKS macro for additional compilation checks
+# 9. Extract Tcl, and possibly Tk, version numbers from the headers
+# 10. Based on this selected configuration, construct the output
+#     directory and file paths
+# 11. Construct the paths where the package is to be installed
+# 12. Set up the actual options passed to compiler and linker based
+#     on the information gathered above.
+# 13. Define some standard build targets and implicit rules. These may
+#     be optionally disabled by the parent makefile.
+# 14. (For extensions only.) Compare the configuration of the target
+#     Tcl and the extensions and warn against discrepancies.
+#
+# One final note about the macro names used. They are as they are
+# for historical reasons. We would like legacy extensions to
+# continue to work with this make include file so be wary of
+# changing them for consistency or clarity.
+
+# 0. Sanity check compiler environment
+
+# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
+# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
+
+!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)
+MSG = ^
+Visual C++ compiler environment not initialized.
+!error $(MSG)
+!endif
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+
+################################################################
+# 1. Define external programs being used
+
+#----------------------------------------------------------
+# Set the proper copy method to avoid overwrite questions
+# to the user when copying files and selecting the right
+# "delete all" method.
+#----------------------------------------------------------
+
+RMDIR  = rmdir /S /Q
+CPY    = xcopy /i /y >NUL
+CPYDIR  = xcopy /e /i /y >NUL
+COPY   = copy /y >NUL
+MKDIR   = mkdir
+
+######################################################################
+# 2. Figure out our build environment in terms of what we're building.
+#
+# (a) Tcl itself
+# (b) Tk
+# (c) a Tcl extension using libraries/includes from an *installed* Tcl
+# (d) a Tcl extension using libraries/includes from Tcl source directory
+#
+# This last is needed because some extensions still need
+# some Tcl interfaces that are not publicly exposed.
+#
+# The fragment will set the following macros:
+# ROOT - root of this module sources
+# COMPATDIR - source directory that holds compatibility sources
+# DOCDIR - source directory containing documentation files
+# GENERICDIR - platform-independent source directory
+# WINDIR - Windows-specific source directory
+# TESTDIR - directory containing test files
+# TOOLSDIR - directory containing build tools
+# _TCLDIR - root of the Tcl installation OR the Tcl sources. Not set
+#    when building Tcl itself.
+# _INSTALLDIR - native form of the installation path. For Tcl
+#    this will be the root of the Tcl installation. For extensions
+#    this will be the lib directory under the root.
+# TCLINSTALL  - set to 1 if _TCLDIR refers to
+#    headers and libraries from an installed Tcl, and 0 if built against
+#    Tcl sources. Not set when building Tcl itself. Yes, not very well
+#    named.
+# _TCL_H - native path to the tcl.h file
+#
+# If Tk is involved, also sets the following
+# _TKDIR - native form Tk installation OR Tk source. Not set if building
+#    Tk itself.
+# TKINSTALL - set 1 if _TKDIR refers to installed Tk and 0 if Tk sources
+# _TK_H - native path to the tk.h file
+
+# Root directory for sources and assumed subdirectories
+ROOT = $(MAKEDIR)\..
+# The following paths CANNOT have spaces in them as they appear on the
+# left side of implicit rules.
+!ifndef COMPATDIR
+COMPATDIR      = $(ROOT)\compat
+!endif
+!ifndef DOCDIR
+DOCDIR         = $(ROOT)\doc
+!endif
+!ifndef GENERICDIR
+GENERICDIR     = $(ROOT)\generic
+!endif
+!ifndef TOOLSDIR
+TOOLSDIR       = $(ROOT)\tools
+!endif
+!ifndef TESTDIR
+TESTDIR        = $(ROOT)\tests
+!endif
+!ifndef LIBDIR
+!if exist("$(ROOT)\library")
+LIBDIR          = $(ROOT)\library
+!else
+LIBDIR          = $(ROOT)\lib
+!endif
+!endif
+!ifndef DEMODIR
+!if exist("$(LIBDIR)\demos")
+DEMODIR                = $(LIBDIR)\demos
+!else
+DEMODIR                = $(ROOT)\demos
+!endif
+!endif # ifndef DEMODIR
+# Do NOT enclose WINDIR in a !ifndef because Windows always defines
+# WINDIR env var to point to c:\windows!
+# TBD - This is a potentially dangerous conflict, rename WINDIR to
+# something else
+WINDIR         = $(ROOT)\win
+
+!ifndef RCDIR
+!if exist("$(WINDIR)\rc")
+RCDIR           = $(WINDIR)\rc
+!else
+RCDIR           = $(WINDIR)
+!endif
+!endif
+RCDIR = $(RCDIR:/=\)
+
+# The target directory where the built packages and binaries will be installed.
+# INSTALLDIR is the (optional) path specified by the user.
+# _INSTALLDIR is INSTALLDIR using the backslash separator syntax
+!ifdef INSTALLDIR
+### Fix the path separators.
+_INSTALLDIR    = $(INSTALLDIR:/=\)
+!else
+### Assume the normal default.
+_INSTALLDIR    = $(HOMEDRIVE)\Tcl
+!endif
+
+!if $(DOING_TCL)
+
+# BEGIN Case 2(a) - Building Tcl itself
+
+# Only need to define _TCL_H
+_TCL_H = ..\generic\tcl.h
+
+# END Case 2(a) - Building Tcl itself
+
+!elseif $(DOING_TK)
+
+# BEGIN Case 2(b) - Building Tk
+
+TCLINSTALL = 0 # Tk always builds against Tcl source, not an installed Tcl
+!if "$(TCLDIR)" == ""
+!if [echo TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+!endif # TCLDIR == ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+_TCL_H  = $(_TCLDIR)\generic\tcl.h
+!if !exist("$(_TCL_H)")
+!error Could not locate tcl.h. Please set the TCLDIR macro to point to the Tcl *source* directory.
+!endif
+
+_TK_H = ..\generic\tk.h
+
+# END Case 2(b) - Building Tk
+
+!else
+
+# BEGIN Case 2(c) or (d) - Building an extension other than Tk
+
+# If command line has specified Tcl location through TCLDIR, use it
+# else default to the INSTALLDIR setting
+!if "$(TCLDIR)" != ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+!if exist("$(_TCLDIR)\include\tcl.h") # Case 2(c) with TCLDIR defined
+TCLINSTALL     = 1
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+!elseif exist("$(_TCLDIR)\generic\tcl.h") # Case 2(d) with TCLDIR defined
+TCLINSTALL     = 0
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+!endif
+
+!else  #  # Case 2(c) for extensions with TCLDIR undefined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tcl.h") && !$(NEED_TCL_SOURCE)
+
+TCLINSTALL     = 1
+TCLDIR          = $(_INSTALLDIR)\..
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TCLDIR                = $(_INSTALLDIR)\..
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+
+!else # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!if [echo _TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+TCLINSTALL      = 0
+TCLDIR         = $(_TCLDIR)
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+
+!endif # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!endif # TCLDIR
+
+!ifndef _TCL_H
+MSG =^
+Failed to find tcl.h. The TCLDIR macro is set incorrectly or is not set and default path does not contain tcl.h.
+!error $(MSG)
+!endif
+
+# Now do the same to locate Tk headers and libs if project requires Tk
+!if $(NEED_TK)
+
+!if "$(TKDIR)" != ""
+
+_TKDIR = $(TKDIR:/=\)
+!if exist("$(_TKDIR)\include\tk.h")
+TKINSTALL      = 1
+_TK_H          = $(_TKDIR)\include\tk.h
+!elseif exist("$(_TKDIR)\generic\tk.h")
+TKINSTALL      = 0
+_TK_H          = $(_TKDIR)\generic\tk.h
+!endif
+
+!else # TKDIR not defined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+TKINSTALL      = 1
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TKDIR         = $(_INSTALLDIR)\..
+_TK_H          = $(_TKDIR)\include\tk.h
+TKDIR          = $(_TKDIR)
+
+!else # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!if [echo _TKDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tk.h >> nmakehlp.out]
+!error *** Could not locate Tk source directory.
+!endif
+!include nmakehlp.out
+TKINSTALL      = 0
+TKDIR          = $(_TKDIR)
+_TK_H          = $(_TKDIR)\generic\tk.h
+
+!endif # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!endif # TKDIR
+
+!ifndef _TK_H
+MSG =^
+Failed to find tk.h. The TKDIR macro is set incorrectly or is not set and default path does not contain tk.h.
+!error $(MSG)
+!endif
+
+!endif # NEED_TK
+
+!if $(NEED_TCL_SOURCE) && $(TCLINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tcl.^
+*** Please set the TCLDIR macro to point to the Tcl sources.
+!error $(MSG)
+!endif
+
+!if $(NEED_TK_SOURCE)
+!if $(TKINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tk.^
+*** Please set the TKDIR macro to point to the Tk sources.
+!error $(MSG)
+!endif
+!endif
+
+
+# If INSTALLDIR set to tcl installation root dir then reset to the
+# lib dir for installing extensions 
+!if exist("$(_INSTALLDIR)\include\tcl.h")
+_INSTALLDIR=$(_INSTALLDIR)\lib
+!endif
+
+# END Case 2(c) or (d) - Building an extension
+!endif # if $(DOING_TCL)
+
+################################################################
+# 3. Determine compiler version and architecture
+# In this section, we figure out the compiler version and the
+# architecture for which we are building. This sets the
+# following macros:
+# VCVERSION - the internal compiler version as 1200, 1400, 1910 etc.
+#     This is also printed by the compiler in dotted form 19.10 etc.
+# VCVER - the "marketing version", for example Visual C++ 6 for internal
+#     compiler version 1200. This is kept only for legacy reasons as it
+#     does not make sense for recent Microsoft compilers. Only used for
+#     output directory names.
+# ARCH - set to IX86 or AMD64 depending on 32- or 64-bit target
+# NATIVE_ARCH - set to IX86 or AMD64 for the host machine
+# MACHINE - same as $(ARCH) - legacy
+# _VC_MANIFEST_EMBED_{DLL,EXE} - commands for embedding a manifest if needed
+# CFG_ENCODING - set to an character encoding.
+#   TBD - this is passed to compiler as TCL_CFGVAL_ENCODING but can't
+#   see where it is used
+
+cc32           = $(CC)   # built-in default.
+link32         = link
+lib32          = lib
+rc32           = $(RC)   # built-in default.
+
+#----------------------------------------------------------------
+# Figure out the compiler architecture and version by writing
+# the C macros to a file, preprocessing them with the C
+# preprocessor and reading back the created file
+
+_HASH=^#
+_VC_MANIFEST_EMBED_EXE=
+_VC_MANIFEST_EMBED_DLL=
+VCVER=0
+!if ![echo VCVERSION=_MSC_VER > vercl.x] \
+    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
+    && ![echo ARCH=IX86 >> vercl.x] \
+    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
+    && ![echo ARCH=AMD64 >> vercl.x] \
+    && ![echo $(_HASH)endif >> vercl.x] \
+    && ![$(cc32) -nologo -TC -P vercl.x 2>NUL]
+!include vercl.i
+!if $(VCVERSION) < 1900
+!if ![echo VCVER= ^\> vercl.vc] \
+    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
+!include vercl.vc
+!endif
+!else
+# The simple calculation above does not apply to new Visual Studio releases
+# Keep the compiler version in its native form.
+VCVER = $(VCVERSION)
+!endif
+!endif
+
+!if ![del 2>NUL /q/f vercl.x vercl.i vercl.vc]
+!endif
+
+#----------------------------------------------------------------
+# The MACHINE macro is used by legacy makefiles so set it as well
+!ifdef MACHINE
+!if "$(MACHINE)" == "x86"
+!undef MACHINE
+MACHINE = IX86
+!elseif "$(MACHINE)" == "x64"
+!undef MACHINE
+MACHINE = AMD64
+!endif
+!if "$(MACHINE)" != "$(ARCH)"
+!error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH).
+!endif
+!else
+MACHINE=$(ARCH)
+!endif
+
+#------------------------------------------------------------
+# Figure out the *host* architecture by reading the registry
+
+!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]
+NATIVE_ARCH=IX86
+!else
+NATIVE_ARCH=AMD64
+!endif
+
+# Since MSVC8 we must deal with manifest resources.
+!if $(VCVERSION) >= 1400
+_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1
+_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2
+!endif
+
+!ifndef CFG_ENCODING
+CFG_ENCODING   = \"cp1252\"
+!endif
+
+################################################################
+# 4. Build the nmakehlp program
+# This is a helper app we need to overcome nmake's limiting
+# environment. We will call out to it to get various bits of
+# information about supported compiler options etc.
+#
+# Tcl itself will always use the nmakehlp.c program which is
+# in its own source. This is the "master" copy and kept updated.
+#
+# Extensions built against an installed Tcl will use the installed
+# copy of Tcl's nmakehlp.c if there is one and their own version
+# otherwise. In the latter case, they would also be using their own
+# rules.vc. Note that older versions of Tcl do not install nmakehlp.c
+# or rules.vc.
+#
+# Extensions built against Tcl sources will use the one from the Tcl source.
+#
+# When building an extension using a sufficiently new version of Tcl,
+# rules-ext.vc will define NMAKEHLPC appropriately to point to the
+# copy of nmakehlp.c to be used.
+
+!ifndef NMAKEHLPC
+# Default to the one in the current directory (the extension's own nmakehlp.c)
+NMAKEHLPC = nmakehlp.c
+
+!if !$(DOING_TCL)
+!if $(TCLINSTALL)
+!if exist("$(_TCLDIR)\lib\nmake\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\lib\nmake\nmakehlp.c
+!endif
+!else # ! $(TCLINSTALL)
+!if exist("$(_TCLDIR)\win\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\win\nmakehlp.c
+!endif
+!endif # $(TCLINSTALL)
+!endif # !$(DOING_TCL)
+
+!endif # NMAKEHLPC
+
+# We always build nmakehlp even if it exists since we do not know
+# what source it was built from.
+!message *** Using $(NMAKEHLPC)
+!if [$(cc32) -nologo "$(NMAKEHLPC)" -link -subsystem:console > nul]
+!endif
+
+################################################################
+# 5. Test for compiler features
+# Visual C++ compiler options have changed over the years. Check
+# which options are supported by the compiler in use.
+#
+# The following macros are set:
+# OPTIMIZATIONS - the compiler flags to be used for optimized builds
+# DEBUGFLAGS - the compiler flags to be used for debug builds
+# LINKERFLAGS - Flags passed to the linker 
+#
+# Note that these are the compiler settings *available*, not those
+# that will be *used*. The latter depends on the OPTS macro settings
+# which we have not yet parsed.
+#
+# Also note that some of the flags in OPTIMIZATIONS are not really
+# related to optimization. They are placed there only for legacy reasons
+# as some extensions expect them to be included in that macro.
+
+# -Op improves float consistency. Note only needed for older compilers
+# Newer compilers do not need or support this option.
+!if [nmakehlp -c -Op]
+FPOPTS  = -Op
+!endif
+
+# Strict floating point semantics - present in newer compilers in lieu of -Op
+!if [nmakehlp -c -fp:strict]
+FPOPTS  = $(FPOPTS) -fp:strict
+!endif
+
+!if "$(MACHINE)" == "IX86"
+### test for pentium errata
+!if [nmakehlp -c -QI0f]
+!message *** Compiler has 'Pentium 0x0f fix'
+FPOPTS  = $(FPOPTS) -QI0f
+!else
+!message *** Compiler does not have 'Pentium 0x0f fix'
+!endif
+!endif
+
+### test for optimizations
+# /O2 optimization includes /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy as per
+# documentation. Note we do NOT want /Gs as that inserts a _chkstk
+# stack probe at *every* function entry, not just those with more than
+# a page of stack allocation resulting in a performance hit.  However,
+# /O2 documentation is misleading as its stack probes are simply the
+# default page size locals allocation probes and not what is implied
+# by an explicit /Gs option.
+
+OPTIMIZATIONS = $(FPOPTS)
+
+!if [nmakehlp -c -O2]
+!message *** Compiler has 'Optimizations'
+OPTIMIZING = 1
+OPTIMIZATIONS   = $(OPTIMIZATIONS) -O2
+!else
+# Legacy, really. All modern compilers support this
+!message *** Compiler does not have 'Optimizations'
+OPTIMIZING = 0
+!endif
+
+# Checks for buffer overflows in local arrays
+!if [nmakehlp -c -GS]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS
+!endif
+
+# Link time optimization. Note that this option (potentially) makes
+# generated libraries only usable by the specific VC++ version that
+# created it. Requires /LTCG linker option
+!if [nmakehlp -c -GL]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL
+CC_GL_OPT_ENABLED = 1
+!else
+# In newer compilers -GL and -YX are incompatible.
+!if [nmakehlp -c -YX]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX
+!endif
+!endif # [nmakehlp -c -GL]
+
+DEBUGFLAGS     = $(FPOPTS)
+
+# Run time error checks. Not available or valid in a release, non-debug build
+# RTC is for modern compilers, -GZ is legacy
+!if [nmakehlp -c -RTC1]
+DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1
+!elseif [nmakehlp -c -GZ]
+DEBUGFLAGS     = $(DEBUGFLAGS) -GZ
+!endif
+
+#----------------------------------------------------------------
+# Linker flags
+
+# LINKER_TESTFLAGS are for internal use when we call nmakehlp to test
+# if the linker supports a specific option. Without these flags link will
+# return "LNK1561: entry point must be defined" error compiling from VS-IDE:
+# They are not passed through to the actual application / extension
+# link rules.
+!ifndef LINKER_TESTFLAGS
+LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmakehlp.out
+!endif
+
+LINKERFLAGS     =
+
+# If compiler has enabled link time optimization, linker must too with -ltcg
+!ifdef CC_GL_OPT_ENABLED
+!if [nmakehlp -l -ltcg $(LINKER_TESTFLAGS)]
+LINKERFLAGS     = $(LINKERFLAGS) -ltcg
+!endif
+!endif
+
+########################################################################
+# 6. Parse the OPTS macro to work out the requested build configuration.
+# Based on this, we will construct the actual switches to be passed to the
+# compiler and linker using the macros defined in the previous section.
+# The following macros are defined by this section based on OPTS
+# STATIC_BUILD - 0 -> Tcl is to be built as a shared library
+#                1 -> build as a static library and shell
+# TCL_THREADS - legacy but always 1 on Windows since winsock requires it.
+# DEBUG - 1 -> debug build, 0 -> release builds
+# SYMBOLS - 1 -> generate PDB's, 0 -> no PDB's
+# PROFILE - 1 -> generate profiling info, 0 -> no profiling
+# PGO     - 1 -> profile based optimization, 0 -> no
+# MSVCRT  - 1 -> link to dynamic C runtime even when building static Tcl build
+#           0 -> link to static C runtime for static Tcl build.
+#           Does not impact shared Tcl builds (STATIC_BUILD == 0)
+# TCL_USE_STATIC_PACKAGES - 1 -> statically link the registry and dde extensions
+#           in the Tcl shell. 0 -> keep them as shared libraries
+#           Does not impact shared Tcl builds.
+# USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation.
+#           0 -> Use the non-thread allocator.
+# UNCHECKED - 1 -> when doing a debug build with symbols, use the release
+#           C runtime, 0 -> use the debug C runtime.
+# USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking
+# CONFIG_CHECK - 1 -> check current build configuration against Tcl
+#           configuration (ignored for Tcl itself)
+# Further, LINKERFLAGS are modified based on above.
+
+# Default values for all the above
+STATIC_BUILD   = 0
+TCL_THREADS    = 1
+DEBUG          = 0
+SYMBOLS                = 0
+PROFILE                = 0
+PGO            = 0
+MSVCRT         = 1
+TCL_USE_STATIC_PACKAGES        = 0
+USE_THREAD_ALLOC = 1
+UNCHECKED      = 0
+CONFIG_CHECK    = 1
+!if $(DOING_TCL)
+USE_STUBS       = 0
+!else
+USE_STUBS       = 1
+!endif
+
+# If OPTS is not empty AND does not contain "none" which turns off all OPTS
+# set the above macros based on OPTS content
+!if "$(OPTS)" != "" && ![nmakehlp -f "$(OPTS)" "none"]
+
+# OPTS are specified, parse them
+
+!if [nmakehlp -f $(OPTS) "static"]
+!message *** Doing static
+STATIC_BUILD   = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "nostubs"]
+!message *** Not using stubs
+USE_STUBS      = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nomsvcrt"]
+!message *** Doing nomsvcrt
+MSVCRT         = 0
+!else
+!if [nmakehlp -f $(OPTS) "msvcrt"]
+!message *** Doing msvcrt
+MSVCRT         = 1
+!else
+!if !$(STATIC_BUILD)
+MSVCRT         = 1
+!else
+MSVCRT         = 0
+!endif
+!endif
+!endif # [nmakehlp -f $(OPTS) "nomsvcrt"]
+
+!if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD)
+!message *** Doing staticpkg
+TCL_USE_STATIC_PACKAGES        = 1
+!else
+TCL_USE_STATIC_PACKAGES        = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nothreads"]
+!message *** Compile explicitly for non-threaded tcl
+TCL_THREADS    = 0
+USE_THREAD_ALLOC= 0
+!else
+TCL_THREADS    = 1
+USE_THREAD_ALLOC= 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "symbols"]
+!message *** Doing symbols
+DEBUG          = 1
+!else
+DEBUG          = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pdbs"]
+!message *** Doing pdbs
+SYMBOLS                = 1
+!else
+SYMBOLS                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "profile"]
+!message *** Doing profile
+PROFILE                = 1
+!else
+PROFILE                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pgi"]
+!message *** Doing profile guided optimization instrumentation
+PGO            = 1
+!elseif [nmakehlp -f $(OPTS) "pgo"]
+!message *** Doing profile guided optimization
+PGO            = 2
+!else
+PGO            = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "loimpact"]
+!message *** Warning: ignoring option "loimpact" - deprecated on modern Windows.
+!endif
+
+# TBD - should get rid of this option
+!if [nmakehlp -f $(OPTS) "thrdalloc"]
+!message *** Doing thrdalloc
+USE_THREAD_ALLOC = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "tclalloc"]
+USE_THREAD_ALLOC = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "unchecked"]
+!message *** Doing unchecked
+UNCHECKED = 1
+!else
+UNCHECKED = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "noconfigcheck"]
+CONFIG_CHECK = 1
+!else
+CONFIG_CHECK = 0
+!endif
+
+!endif # "$(OPTS)" != ""  && ... parsing of OPTS
+
+# Set linker flags based on above
+
+!if $(PGO) > 1
+!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!elseif $(PGO) > 0
+!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!endif
+
+################################################################
+# 7. Parse the STATS macro to configure code instrumentation
+# The following macros are set by this section:
+# TCL_MEM_DEBUG - 1 -> enables memory allocation instrumentation
+#                 0 -> disables
+# TCL_COMPILE_DEBUG - 1 -> enables byte compiler logging
+#                     0 -> disables
+
+# Default both are off
+TCL_MEM_DEBUG      = 0
+TCL_COMPILE_DEBUG   = 0
+
+!if "$(STATS)" != "" && ![nmakehlp -f "$(STATS)" "none"]
+
+!if [nmakehlp -f $(STATS) "memdbg"]
+!message *** Doing memdbg
+TCL_MEM_DEBUG      = 1
+!else
+TCL_MEM_DEBUG      = 0
+!endif
+
+!if [nmakehlp -f $(STATS) "compdbg"]
+!message *** Doing compdbg
+TCL_COMPILE_DEBUG   = 1
+!else
+TCL_COMPILE_DEBUG   = 0
+!endif
+
+!endif
+
+####################################################################
+# 8. Parse the CHECKS macro to configure additional compiler checks
+# The following macros are set by this section:
+# WARNINGS - compiler switches that control the warnings level
+# TCL_NO_DEPRECATED - 1 -> disable support for deprecated functions
+#                     0 -> enable deprecated functions
+
+# Defaults - Permit deprecated functions and warning level 3
+TCL_NO_DEPRECATED          = 0
+WARNINGS                   = -W3
+
+!if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"]
+
+!if [nmakehlp -f $(CHECKS) "nodep"]
+!message *** Doing nodep check
+TCL_NO_DEPRECATED          = 1
+!endif
+
+!if [nmakehlp -f $(CHECKS) "fullwarn"]
+!message *** Doing full warnings check
+WARNINGS                   = -W4
+!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)]
+LINKERFLAGS                = $(LINKERFLAGS) -warn:3
+!endif
+!endif
+
+!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]
+!message *** Doing 64bit portability warnings
+WARNINGS                   = $(WARNINGS) -Wp64
+!endif
+
+!endif
+
+################################################################
+# 9. Extract various version numbers
+# For Tcl and Tk, version numbers are extracted from tcl.h and tk.h
+# respectively. For extensions, versions are extracted from the
+# configure.in or configure.ac from the TEA configuration if it
+# exists, and unset otherwise.
+# Sets the following macros:
+# TCL_MAJOR_VERSION
+# TCL_MINOR_VERSION
+# TCL_PATCH_LEVEL
+# TCL_VERSION
+# TK_MAJOR_VERSION
+# TK_MINOR_VERSION
+# TK_PATCH_LEVEL
+# TK_VERSION
+# DOTVERSION - set as (for example) 2.5
+# VERSION - set as (for example 25)
+#--------------------------------------------------------------
+
+!if [echo REM = This file is generated from rules.vc > versions.vc]
+!endif
+!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]
+!endif
+
+!if defined(_TK_H)
+!if [echo TK_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]
+!endif
+!endif # _TK_H
+
+!include versions.vc
+
+TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)
+TCL_DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!if defined(_TK_H)
+TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)
+TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+
+# Set DOTVERSION and VERSION
+!if $(DOING_TCL)
+
+DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+VERSION = $(TCL_VERSION)
+
+!elseif $(DOING_TK)
+
+DOTVERSION = $(TK_DOTVERSION)
+VERSION = $(TK_VERSION)
+
+!else # Doing a non-Tk extension
+
+# If parent makefile has not defined DOTVERSION, try to get it from TEA
+# first from a configure.in file, and then from configure.ac
+!ifndef DOTVERSION
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.in ^[$(PROJECT)^] >> versions.vc]
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.ac ^[$(PROJECT)^] >> versions.vc]
+!error *** Could not figure out extension version. Please define DOTVERSION in parent makefile before including rules.vc.
+!endif
+!endif
+!include versions.vc
+!endif # DOTVERSION
+VERSION         = $(DOTVERSION:.=)
+
+!endif # $(DOING_TCL) ... etc.
+
+################################################################
+# 10. Construct output directory and file paths
+# Figure-out how to name our intermediate and output directories.
+# In order to avoid inadvertent mixing of object files built using
+# different compilers, build configurations etc.,
+#
+# Naming convention (suffixes):
+#   t = full thread support.
+#   s = static library (as opposed to an import library)
+#   g = linked to the debug enabled C run-time.
+#   x = special static build when it links to the dynamic C run-time.
+#
+# The following macros are set in this section:
+# SUFX - the suffix to use for binaries based on above naming convention
+# BUILDDIRTOP - the toplevel default output directory
+#      is of the form {Release,Debug}[_AMD64][_COMPILERVERSION]
+# TMP_DIR - directory where object files are created
+# OUT_DIR - directory where output executables are created
+# Both TMP_DIR and OUT_DIR are defaulted only if not defined by the
+# parent makefile (or command line). The default values are
+# based on BUILDDIRTOP.
+# STUBPREFIX - name of the stubs library for this project
+# PRJIMPLIB - output path of the generated project import library
+# PRJLIBNAME - name of generated project library
+# PRJLIB     - output path of generated project library
+# PRJSTUBLIBNAME - name of the generated project stubs library
+# PRJSTUBLIB - output path of the generated project stubs library
+# RESFILE - output resource file (only if not static build)
+
+SUFX       = tsgx
+
+!if $(DEBUG)
+BUILDDIRTOP = Debug
+!else
+BUILDDIRTOP = Release
+!endif
+
+!if "$(MACHINE)" != "IX86"
+BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)
+!endif
+!if $(VCVER) > 6
+BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)
+!endif
+
+!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)
+SUFX       = $(SUFX:g=)
+!endif
+
+TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
+
+!if !$(STATIC_BUILD)
+TMP_DIRFULL = $(TMP_DIRFULL:Static=)
+SUFX       = $(SUFX:s=)
+EXT        = dll
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!else
+TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
+EXT        = lib
+!if !$(MSVCRT)
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!endif
+!endif
+
+!if !$(TCL_THREADS)
+TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)
+SUFX       = $(SUFX:t=)
+!endif
+
+!ifndef TMP_DIR
+TMP_DIR            = $(TMP_DIRFULL)
+!ifndef OUT_DIR
+OUT_DIR            = .\$(BUILDDIRTOP)
+!endif
+!else
+!ifndef OUT_DIR
+OUT_DIR            = $(TMP_DIR)
+!endif
+!endif
+
+# Relative paths -> absolute
+!if [echo OUT_DIR = \> nmakehlp.out] \
+   || [nmakehlp -Q "$(OUT_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path OUT_DIR=$(OUT_DIR)
+!endif
+!if [echo TMP_DIR = \>> nmakehlp.out] \
+   || [nmakehlp -Q "$(TMP_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path TMP_DIR=$(TMP_DIR)
+!endif
+!include nmakehlp.out
+
+# The name of the stubs library for the project being built
+STUBPREFIX      = $(PROJECT)stub
+
+# Set up paths to various Tcl executables and libraries needed by extensions
+!if $(DOING_TCL)
+
+TCLSHNAME       = $(PROJECT)sh$(TCL_VERSION)$(SUFX).exe
+TCLSH          = $(OUT_DIR)\$(TCLSHNAME)
+TCLIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+TCLLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+TCLLIB         = $(OUT_DIR)\$(TCLLIBNAME)
+
+TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+TCLSTUBLIB     = $(OUT_DIR)\$(TCLSTUBLIBNAME)
+TCL_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+
+TCLSH          = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist("$(TCLSH)") && $(TCL_THREADS)
+TCLSH           = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\lib
+TCLREGLIB      = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target
+TCL_INCLUDES    = -I"$(_TCLDIR)\include"
+
+!else # Building against Tcl sources
+
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist($(TCLSH)) && $(TCL_THREADS)
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\library
+TCLREGLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = $(_TCLDIR)\tools
+TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"
+
+!endif # TCLINSTALL
+
+tcllibs = "$(TCLSTUBLIB)" "$(TCLIMPLIB)"
+
+!endif # $(DOING_TCL)
+
+# We need a tclsh that will run on the host machine as part of the build.
+# IX86 runs on all architectures.
+!ifndef TCLSH_NATIVE
+!if "$(MACHINE)" == "IX86" || "$(MACHINE)" == "$(NATIVE_ARCH)"
+TCLSH_NATIVE   = $(TCLSH)
+!else
+!error You must explicitly set TCLSH_NATIVE for cross-compilation
+!endif
+!endif
+
+# Do the same for Tk and Tk extensions that require the Tk libraries
+!if $(DOING_TK) || $(NEED_TK)
+WISHNAMEPREFIX = wish
+WISHNAME = $(WISHNAMEPREFIX)$(TK_VERSION)$(SUFX).exe
+TKLIBNAME      = $(PROJECT)$(TK_VERSION)$(SUFX).$(EXT)
+TKSTUBLIBNAME  = tkstub$(TK_VERSION).lib
+TKIMPLIBNAME   = tk$(TK_VERSION)$(SUFX).lib
+
+!if $(DOING_TK)
+WISH           = $(OUT_DIR)\$(WISHNAME)
+TKSTUBLIB      = $(OUT_DIR)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(OUT_DIR)\$(TKIMPLIBNAME)
+TKLIB          = $(OUT_DIR)\$(TKLIBNAME)
+TK_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # effectively NEED_TK
+
+!if $(TKINSTALL) # Building against installed Tk
+WISH           = $(_TKDIR)\bin\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\lib\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\lib\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\include"
+!else # Building against Tk sources
+WISH           = $(_TKDIR)\win\$(BUILDDIRTOP)\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
+!endif # TKINSTALL
+tklibs = "$(TKSTUBLIB)" "$(TKIMPLIB)"
+
+!endif # $(DOING_TK)
+!endif # $(DOING_TK) || $(NEED_TK)
+
+# Various output paths
+PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)
+
+PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)
+
+# If extension parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+!if !$(DOING_TCL) && !$(DOING_TK) && !$(STATIC_BUILD)
+!ifdef RCFILE
+RESFILE = $(TMP_DIR)\$(RCFILE:.rc=.res)
+!else
+RESFILE = $(TMP_DIR)\$(PROJECT).res
+!endif
+!endif
+
+###################################################################
+# 11. Construct the paths for the installation directories
+# The following macros get defined in this section:
+# LIB_INSTALL_DIR - where libraries should be installed
+# BIN_INSTALL_DIR - where the executables should be installed
+# DOC_INSTALL_DIR - where documentation should be installed
+# SCRIPT_INSTALL_DIR - where scripts should be installed
+# INCLUDE_INSTALL_DIR - where C include files should be installed
+# DEMO_INSTALL_DIR - where demos should be installed
+# PRJ_INSTALL_DIR - where package will be installed (not set for tcl and tk)
+
+!if $(DOING_TCL) || $(DOING_TK)
+LIB_INSTALL_DIR                = $(_INSTALLDIR)\lib
+BIN_INSTALL_DIR                = $(_INSTALLDIR)\bin
+DOC_INSTALL_DIR                = $(_INSTALLDIR)\doc
+!if $(DOING_TCL)
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!else # DOING_TK
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+DEMO_INSTALL_DIR       = $(SCRIPT_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\include
+
+!else # extension other than Tk
+
+PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)
+LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)
+DEMO_INSTALL_DIR       = $(PRJ_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include
+
+!endif
+
+###################################################################
+# 12. Set up actual options to be passed to the compiler and linker
+# Now we have all the information we need, set up the actual flags and
+# options that we will pass to the compiler and linker. The main
+# makefile should use these in combination with whatever other flags
+# and switches are specific to it.
+# The following macros are defined, names are for historical compatibility:
+# OPTDEFINES - /Dxxx C macro flags based on user-specified OPTS
+# COMPILERFLAGS - /Dxxx C macro flags independent of any configuration opttions
+# crt - Compiler switch that selects the appropriate C runtime
+# cdebug - Compiler switches related to debug AND optimizations
+# cwarn - Compiler switches that set warning levels
+# cflags - complete compiler switches (subsumes cdebug and cwarn)
+# ldebug - Linker switches controlling debug information and optimization
+# lflags - complete linker switches (subsumes ldebug) except subsystem type
+# dlllflags - complete linker switches to build DLLs (subsumes lflags)
+# conlflags - complete linker switches for console program (subsumes lflags)
+# guilflags - complete linker switches for GUI program (subsumes lflags)
+# baselibs - minimum Windows libraries required. Parent makefile can
+#    define PRJ_LIBS before including rules.rc if additional libs are needed
+
+OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS
+
+!if $(TCL_MEM_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG
+!endif
+!if $(TCL_COMPILE_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
+!endif
+!if $(TCL_THREADS)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1
+!if $(USE_THREAD_ALLOC)
+OPTDEFINES     = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1
+!endif
+!endif
+!if $(STATIC_BUILD)
+OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD
+!endif
+!if $(TCL_NO_DEPRECATED)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED
+!endif
+
+!if $(USE_STUBS)
+# Note we do not define USE_TCL_STUBS even when building tk since some
+# test targets in tk do not use stubs
+!if ! $(DOING_TCL)
+USE_STUBS_DEFS  = -DUSE_TCL_STUBS -DUSE_TCLOO_STUBS
+!if $(NEED_TK)
+USE_STUBS_DEFS  = $(USE_STUBS_DEFS) -DUSE_TK_STUBS
+!endif
+!endif
+!endif # USE_STUBS
+
+!if !$(DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DNDEBUG
+!if $(OPTIMIZING)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
+!endif
+!endif
+!if $(PROFILE)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED
+!endif
+!if "$(MACHINE)" == "AMD64"
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT
+!endif
+!if $(VCVERSION) < 1300
+OPTDEFINES     = $(OPTDEFINES) -DNO_STRTOI64
+!endif
+
+# _ATL_XP_TARGETING - Newer SDK's need this to build for XP
+COMPILERFLAGS  = /D_ATL_XP_TARGETING
+
+# Following is primarily for the benefit of extensions. Tcl 8.5 builds
+# Tcl without /DUNICODE, while 8.6 builds with it defined. When building
+# an extension, it is advisable (but not mandated) to use the same Windows
+# API as the Tcl build. This is accordingly defaulted below. A particular
+# extension can override this by pre-definining USE_WIDECHAR_API.
+!ifndef USE_WIDECHAR_API
+!if $(TCL_VERSION) > 85
+USE_WIDECHAR_API = 1
+!else
+USE_WIDECHAR_API = 0
+!endif
+!endif
+
+!if $(USE_WIDECHAR_API)
+COMPILERFLAGS = $(COMPILERFLAGS) /DUNICODE /D_UNICODE 
+!endif
+
+# Like the TEA system only set this non empty for non-Tk extensions
+# Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME
+# so we pass both
+!if !$(DOING_TCL) && !$(DOING_TK)
+PKGNAMEFLAGS = -DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_TCLNAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \
+               -DMODULE_SCOPE=extern 
+!endif
+
+# crt picks the C run time based on selected OPTS
+!if $(MSVCRT)
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MDd
+!else
+crt = -MD
+!endif
+!else
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MTd
+!else
+crt = -MT
+!endif
+!endif
+
+# cdebug includes compiler options for debugging as well as optimization.
+!if $(DEBUG)
+
+# In debugging mode, optimizations need to be disabled
+cdebug = -Zi -Od $(DEBUGFLAGS)
+
+!else
+
+cdebug = $(OPTIMIZATIONS)
+!if $(SYMBOLS)
+cdebug = $(cdebug) -Zi
+!endif
+
+!endif # $(DEBUG)
+
+# cwarn includes default warning levels.
+cwarn = $(WARNINGS)
+
+!if "$(MACHINE)" == "AMD64"
+# Disable pointer<->int warnings related to cast between different sizes
+# There are a gadzillion of these due to use of ClientData and
+# clutter up compiler
+# output increasing chance of a real warning getting lost. So disable them.
+# Eventually some day, Tcl will be 64-bit clean.
+cwarn = $(cwarn) -wd4311 -wd4312
+!endif
+
+### Common compiler options that are architecture specific
+!if "$(MACHINE)" == "ARM"
+carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
+!else
+carch =
+!endif
+
+!if $(DEBUG)
+# Turn warnings into errors
+cwarn = $(cwarn) -WX
+!endif
+
+INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES)
+!if !$(DOING_TCL) && !$(DOING_TK)
+INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WINDIR)" -I"$(COMPATDIR)"
+!endif
+
+# These flags are defined roughly in the order of the pre-reform
+# rules.vc/makefile.vc to help visually compare that the pre- and
+# post-reform build logs
+
+# cflags contains generic flags used for building practically all object files
+cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\ $(cdebug)
+
+# appcflags contains $(cflags) and flags for building the application
+# object files (e.g. tclsh, or wish) pkgcflags contains $(cflags) plus
+# flags used for building shared object files The two differ in the
+# BUILD_$(PROJECT) macro which should be defined only for the shared
+# library *implementation* and not for its caller interface
+
+appcflags = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES) $(USE_STUBS_DEFS)
+appcflags_nostubs = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES)
+pkgcflags = $(appcflags) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+pkgcflags_nostubs = $(appcflags_nostubs) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+
+# stubscflags contains $(cflags) plus flags used for building a stubs
+# library for the package.  Note: -DSTATIC_BUILD is defined in
+# $(OPTDEFINES) only if the OPTS configuration indicates a static
+# library. However the stubs library is ALWAYS static hence included
+# here irrespective of the OPTS setting.
+#
+# TBD - tclvfs has a comment that stubs libs should not be compiled with -GL
+# without stating why. Tcl itself compiled stubs libs with this flag.
+# so we do not remove it from cflags. -GL may prevent extensions
+# compiled with one VC version to fail to link against stubs library
+# compiled with another VC version. Check for this and fix accordingly.
+stubscflags = $(cflags) $(PKGNAMEFLAGS) $(PRJ_DEFINES) $(OPTDEFINES) -Zl -DSTATIC_BUILD $(INCLUDES)
+
+# Link flags 
+
+!if $(DEBUG)
+ldebug = -debug -debugtype:cv
+!else
+ldebug = -release -opt:ref -opt:icf,3
+!if $(SYMBOLS)
+ldebug = $(ldebug) -debug -debugtype:cv
+!endif
+!endif
+
+# Note: Profiling is currently only possible with the Visual Studio Enterprise
+!if $(PROFILE)
+ldebug= $(ldebug) -profile
+!endif
+
+### Declarations common to all linker versions 
+lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+lflags = $(lflags) -nodefaultlib:libucrt.lib
+!endif
+
+# Old linkers (Visual C++ 6 in particular) will link for fast loading
+# on Win98. Since we do not support Win98 any more, we specify nowin98
+# as recommended for NT and later. However, this is only required by
+# IX86 on older compilers and only needed if we are not doing a static build.
+
+!if "$(MACHINE)" == "IX86" && !$(STATIC_BUILD)
+!if [nmakehlp -l -opt:nowin98 $(LINKER_TESTFLAGS)]
+# Align sections for PE size savings.
+lflags = $(lflags) -opt:nowin98
+!endif
+!endif
+
+dlllflags = $(lflags) -dll
+conlflags = $(lflags) -subsystem:console
+guilflags = $(lflags) -subsystem:windows
+
+# Libraries that are required for every image.
+# Extensions should define any additional libraries with $(PRJ_LIBS)
+winlibs   = kernel32.lib advapi32.lib
+
+!if $(NEED_TK)
+winlibs = $(winlibs) gdi32.lib user32.lib uxtheme.lib
+!endif
+
+# Avoid 'unresolved external symbol __security_cookie' errors.
+# c.f. http://support.microsoft.com/?id=894573
+!if "$(MACHINE)" == "AMD64"
+!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500
+winlibs   = $(winlibs) bufferoverflowU.lib
+!endif
+!endif
+
+baselibs = $(winlibs) $(PRJ_LIBS)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+baselibs   = $(baselibs) ucrt.lib
+!endif
+
+################################################################
+# 13. Define standard commands, common make targets and implicit rules
+
+CCPKGCMD = $(cc32) $(pkgcflags) -Fo$(TMP_DIR)^\
+CCAPPCMD = $(cc32) $(appcflags) -Fo$(TMP_DIR)^\
+CCSTUBSCMD = $(cc32) $(stubscflags) -Fo$(TMP_DIR)^\
+
+LIBCMD = $(lib32) -nologo $(LINKERFLAGS) -out:$@
+DLLCMD = $(link32) $(dlllflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+
+CONEXECMD = $(link32) $(conlflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+GUIEXECMD = $(link32) $(guilflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+RESCMD  = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \
+           $(TCL_INCLUDES) \
+           -DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \
+           -DCOMMAVERSION=$(DOTVERSION:.=,),0 \
+           -DDOTVERSION=\"$(DOTVERSION)\" \
+           -DVERSION=\"$(VERSION)\" \
+           -DSUFX=\"$(SUFX)\" \
+            -DPROJECT=\"$(PROJECT)\" \
+            -DPRJLIBNAME=\"$(PRJLIBNAME)\" 
+
+!ifndef DEFAULT_BUILD_TARGET
+DEFAULT_BUILD_TARGET = $(PROJECT)
+!endif
+
+default-target: $(DEFAULT_BUILD_TARGET)
+
+default-pkgindex:
+       @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \
+           [list load [file join $$dir $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl
+
+default-pkgindex-tea:
+       @if exist $(ROOT)\pkgIndex.tcl.in nmakehlp -s << $(ROOT)\pkgIndex.tcl.in > $(OUT_DIR)\pkgIndex.tcl
+@PACKAGE_VERSION@    $(DOTVERSION)
+@PACKAGE_NAME@       $(PRJ_PACKAGE_TCLNAME)
+@PACKAGE_TCLNAME@    $(PRJ_PACKAGE_TCLNAME)
+@PKG_LIB_FILE@       $(PRJLIBNAME)
+<<
+
+
+default-install: default-install-binaries default-install-libraries
+
+default-install-binaries: $(PRJLIB)
+       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-libraries: $(OUT_DIR)\pkgIndex.tcl
+       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
+       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
+       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
+       @$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)
+
+default-install-stubs:
+       @echo Installing stubs library to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJSTUBLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-docs-html:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.html" "$(DOCDIR)\*.css" "$(DOCDIR)\*.png") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-docs-n:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.n") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-demos:
+       @echo Installing demos to '$(DEMO_INSTALL_DIR)'
+       @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)"
+       @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)"
+
+default-clean:
+       @echo Cleaning $(TMP_DIR)\* ...
+       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)
+       @echo Cleaning $(WINDIR)\nmakehlp.obj, nmakehlp.exe ...
+       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj
+       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe
+       @if exist $(WINDIR)\nmakehlp.out del $(WINDIR)\nmakehlp.out
+       @echo Cleaning $(WINDIR)\nmhlp-out.txt ...
+       @if exist $(WINDIR)\nmhlp-out.txt del $(WINDIR)\nmhlp-out.txt
+       @echo Cleaning $(WINDIR)\_junk.pch ...
+       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch
+       @echo Cleaning $(WINDIR)\vercl.x, vercl.i ...
+       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x
+       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i
+       @echo Cleaning $(WINDIR)\versions.vc, version.vc ...
+       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc
+       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc
+
+default-hose: default-clean
+       @echo Hosing $(OUT_DIR)\* ...
+       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)
+
+# Only for backward compatibility
+default-distclean: default-hose
+
+default-setup:
+       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
+       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
+
+!if "$(TESTPAT)" != ""
+TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
+!endif
+
+default-test: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS)
+
+default-shell: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       $(DEBUGGER) $(TCLSH)
+
+# Generation of Windows version resource 
+!ifdef RCFILE
+
+# Note: don't use $** in below rule because there may be other dependencies
+# and only the "master" rc must be passed to the resource compiler
+$(TMP_DIR)\$(PROJECT).res: $(RCDIR)\$(PROJECT).rc
+       $(RESCMD) $(RCDIR)\$(PROJECT).rc
+
+!else
+
+# If parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+$(TMP_DIR)\$(PROJECT).res: $(TMP_DIR)\$(PROJECT).rc
+
+$(TMP_DIR)\$(PROJECT).rc:
+       @$(COPY) << $(TMP_DIR)\$(PROJECT).rc
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION   COMMAVERSION
+ PRODUCTVERSION        COMMAVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef DEBUG
+ FILEFLAGS     VS_FF_DEBUG
+#else
+ FILEFLAGS     0x0L
+#endif
+ FILEOS                VOS_NT_WINDOWS32
+ FILETYPE      VFT_DLL
+ FILESUBTYPE   0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "FileDescription",  "Tcl extension " PROJECT
+            VALUE "OriginalFilename", PRJLIBNAME
+            VALUE "FileVersion",      DOTVERSION
+            VALUE "ProductName",      "Package " PROJECT " for Tcl"
+            VALUE "ProductVersion",   DOTVERSION 
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+<<
+
+!endif # ifdef RCFILE
+
+!ifndef DISABLE_IMPLICIT_RULES
+DISABLE_IMPLICIT_RULES = 0
+!endif
+
+!if !$(DISABLE_IMPLICIT_RULES)
+# Implicit rule definitions - only for building library objects. For stubs and
+# main application, the master makefile should define explicit rules.
+
+{$(ROOT)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(WINDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(RCDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(WINDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(TMP_DIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+.SUFFIXES:
+.SUFFIXES:.c .rc
+
+!endif
+
+################################################################
+# 14. Sanity check selected options against Tcl build options
+# When building an extension, certain configuration options should
+# match the ones used when Tcl was built. Here we check and
+# warn on a mismatch.
+!if ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+!if exist("$(_TCLDIR)\lib\nmake\tcl.nmake")
+TCLNMAKECONFIG = "$(_TCLDIR)\lib\nmake\tcl.nmake"
+!endif
+!else # ! $(TCLINSTALL) - building against Tcl source
+!if exist("$(OUT_DIR)\tcl.nmake")
+TCLNMAKECONFIG = "$(OUT_DIR)\tcl.nmake"
+!endif
+!endif # TCLINSTALL
+
+!if $(CONFIG_CHECK)
+!ifdef TCLNMAKECONFIG
+!include $(TCLNMAKECONFIG)
+
+!if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)"
+!error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)).
+!endif
+!if defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC)
+!message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)).
+!endif
+!if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG)
+!message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)).
+!endif
+!endif
+
+!endif # TCLNMAKECONFIG
+
+!endif # ! $(DOING_TCL)
+
+
+#----------------------------------------------------------
+# Display stats being used.
+#----------------------------------------------------------
+
+!if !$(DOING_TCL)
+!message *** Building against Tcl at '$(_TCLDIR)'
+!endif
+!if !$(DOING_TK) && $(NEED_TK)
+!message *** Building against Tk at '$(_TKDIR)'
+!endif
+!message *** Intermediate directory will be '$(TMP_DIR)'
+!message *** Output directory will be '$(OUT_DIR)'
+!message *** Installation, if selected, will be in '$(_INSTALLDIR)'
+!message *** Suffix for binaries will be '$(SUFX)'
+!message *** Compiler version $(VCVER). Target machine is $(MACHINE)
+!message *** Host architecture is $(NATIVE_ARCH)
+
+!endif # ifdef _RULES_VC
diff --git a/pkgs/itcl4.1.1/win/targets.vc b/pkgs/itcl4.1.1/win/targets.vc
new file mode 100644 (file)
index 0000000..312022d
--- /dev/null
@@ -0,0 +1,98 @@
+#------------------------------------------------------------- -*- makefile -*-
+# targets.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file defines some standard targets for the convenience of extensions
+# and can be optionally included by the extension makefile.
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for docs.
+
+$(PROJECT): setup pkgindex $(PRJLIB)
+
+!ifdef PRJ_STUBOBJS
+$(PROJECT): $(PRJSTUBLIB)
+$(PRJSTUBLIB): $(PRJ_STUBOBJS)
+       $(LIBCMD) $**
+
+$(PRJ_STUBOBJS):
+       $(CCSTUBSCMD) %s
+!endif # PRJ_STUBOBJS
+
+!ifdef PRJ_MANIFEST
+$(PROJECT): $(PRJLIB).manifest
+$(PRJLIB).manifest: $(PRJ_MANIFEST)
+       @nmakehlp -s << $** >$@
+@MACHINE@        $(MACHINE:IX86=X86)
+<<
+!endif
+
+!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"
+$(PRJLIB): $(PRJ_OBJS) $(RESFILE)
+!if $(STATIC_BUILD)
+       $(LIBCMD) $**
+!else
+       $(DLLCMD) $**
+       $(_VC_MANIFEST_EMBED_DLL)
+!endif
+       -@del $*.exp
+!endif
+
+!if "$(PRJ_HEADERS)" != "" && "$(PRJ_OBJS)" != ""
+$(PRJ_OBJS): $(PRJ_HEADERS)
+!endif
+
+# If parent makefile has defined stub objects, add their installation
+# to the default install
+!if "$(PRJ_STUBOBJS)" != ""
+default-install: default-install-stubs
+!endif
+
+# Unlike the other default targets, these cannot be in rules.vc because
+# the executed command depends on existence of macro PRJ_HEADERS_PUBLIC
+# that the parent makefile will not define until after including rules-ext.vc
+!if "$(PRJ_HEADERS_PUBLIC)" != ""
+default-install: default-install-headers
+default-install-headers:
+       @echo Installing headers to '$(INCLUDE_INSTALL_DIR)'
+       @for %f in ($(PRJ_HEADERS_PUBLIC)) do @$(COPY) %f "$(INCLUDE_INSTALL_DIR)"
+!endif
+
+!if "$(DISABLE_STANDARD_TARGETS)" == ""
+DISABLE_STANDARD_TARGETS = 0
+!endif
+
+!if "$(DISABLE_TARGET_setup)" == ""
+DISABLE_TARGET_setup = 0
+!endif
+!if "$(DISABLE_TARGET_install)" == ""
+DISABLE_TARGET_install = 0
+!endif
+!if "$(DISABLE_TARGET_clean)" == ""
+DISABLE_TARGET_clean = 0
+!endif
+!if "$(DISABLE_TARGET_test)" == ""
+DISABLE_TARGET_test = 0
+!endif
+!if "$(DISABLE_TARGET_shell)" == ""
+DISABLE_TARGET_shell = 0
+!endif
+
+!if !$(DISABLE_STANDARD_TARGETS)
+!if !$(DISABLE_TARGET_setup)
+setup: default-setup
+!endif
+!if !$(DISABLE_TARGET_install)
+install: default-install
+!endif
+!if !$(DISABLE_TARGET_clean)
+clean: default-clean
+realclean: hose
+hose: default-hose
+distclean: realclean default-distclean
+!endif
+!if !$(DISABLE_TARGET_test)
+test: default-test
+!endif
+!if !$(DISABLE_TARGET_shell)
+shell: default-shell
+!endif
+!endif # DISABLE_STANDARD_TARGETS
diff --git a/pkgs/sqlite3.20.0/win/makefile.vc b/pkgs/sqlite3.20.0/win/makefile.vc
deleted file mode 100644 (file)
index 73ecdd8..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-# makefile.vc --                                               -*- Makefile -*-\r
-#\r
-# Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)\r
-#\r
-# This makefile is based upon the Tcl 8.4 Makefile.vc and modified to \r
-# make it suitable as a general package makefile. Look for the word EDIT\r
-# which marks sections that may need modification. As a minumum you will\r
-# need to change the PROJECT, DOTVERSION and DLLOBJS variables to values\r
-# relevant to your package.\r
-#\r
-# See the file "license.terms" for information on usage and redistribution\r
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
-# \r
-# Copyright (c) 1995-1996 Sun Microsystems, Inc.\r
-# Copyright (c) 1998-2000 Ajuba Solutions.\r
-# Copyright (c) 2001 ActiveState Corporation.\r
-# Copyright (c) 2001-2002 David Gravereaux.\r
-# Copyright (c) 2003 Pat Thoyts\r
-#\r
-#-------------------------------------------------------------------------\r
-# RCS: @(#)$Id: makefile.vc,v 1.4 2004/07/26 08:22:05 patthoyts Exp $\r
-#-------------------------------------------------------------------------\r
-\r
-!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)\r
-MSG = ^\r
-You will need to run vcvars32.bat from Developer Studio, first, to setup^\r
-the environment.  Jump to this line to read the new instructions.\r
-!error $(MSG)\r
-!endif\r
-\r
-#------------------------------------------------------------------------------\r
-# HOW TO USE this makefile:\r
-#\r
-# 1)  It is now necessary to have %MSVCDir% set in the environment.  This is\r
-#     used  as a check to see if vcvars32.bat had been run prior to running\r
-#     nmake or during the installation of Microsoft Visual C++, MSVCDir had\r
-#     been set globally and the PATH adjusted.  Either way is valid.\r
-#\r
-#     You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin\r
-#     directory to setup the proper environment, if needed, for your current\r
-#     setup.  This is a needed bootstrap requirement and allows the swapping of\r
-#     different environments to be easier.\r
-#\r
-# 2)  To use the Platform SDK (not expressly needed), run setenv.bat after\r
-#     vcvars32.bat according to the instructions for it.  This can also turn on\r
-#     the 64-bit compiler, if your SDK has it.\r
-#\r
-# 3)  Targets are:\r
-#      all       -- Builds everything.\r
-#       <project> -- Builds the project (eg: nmake sample)\r
-#      test      -- Builds and runs the test suite.\r
-#      install   -- Installs the built binaries and libraries to $(INSTALLDIR)\r
-#                   in an appropriate subdirectory.\r
-#      clean/realclean/distclean -- varying levels of cleaning.\r
-#\r
-# 4)  Macros usable on the commandline:\r
-#      INSTALLDIR=<path>\r
-#              Sets where to install Tcl from the built binaries.\r
-#              C:\Progra~1\Tcl is assumed when not specified.\r
-#\r
-#      OPTS=static,msvcrt,staticpkg,threads,symbols,profile,loimpact,none\r
-#              Sets special options for the core.  The default is for none.\r
-#              Any combination of the above may be used (comma separated).\r
-#              'none' will over-ride everything to nothing.\r
-#\r
-#              static  =  Builds a static library of the core instead of a\r
-#                         dll.  The shell will be static (and large), as well.\r
-#              msvcrt  =  Effects the static option only to switch it from\r
-#                         using libcmt(d) as the C runtime [by default] to\r
-#                         msvcrt(d). This is useful for static embedding\r
-#                         support.\r
-#              staticpkg = Effects the static option only to switch\r
-#                         tclshXX.exe to have the dde and reg extension linked\r
-#                         inside it.\r
-#              threads =  Turns on full multithreading support.\r
-#              thrdalloc = Use the thread allocator (shared global free pool).\r
-#              symbols =  Adds symbols for step debugging.\r
-#              profile =  Adds profiling hooks.  Map file is assumed.\r
-#              loimpact =  Adds a flag for how NT treats the heap to keep memory\r
-#                         in use, low.  This is said to impact alloc performance.\r
-#\r
-#      STATS=memdbg,compdbg,none\r
-#              Sets optional memory and bytecode compiler debugging code added\r
-#              to the core.  The default is for none.  Any combination of the\r
-#              above may be used (comma separated).  'none' will over-ride\r
-#              everything to nothing.\r
-#\r
-#              memdbg   = Enables the debugging memory allocator.\r
-#              compdbg  = Enables byte compilation logging.\r
-#\r
-#      MACHINE=(IX86|IA64|ALPHA)\r
-#              Set the machine type used for the compiler, linker, and\r
-#              resource compiler.  This hook is needed to tell the tools\r
-#              when alternate platforms are requested.  IX86 is the default\r
-#              when not specified.\r
-#\r
-#      TMP_DIR=<path>\r
-#      OUT_DIR=<path>\r
-#              Hooks to allow the intermediate and output directories to be\r
-#              changed.  $(OUT_DIR) is assumed to be \r
-#              $(BINROOT)\(Release|Debug) based on if symbols are requested.\r
-#              $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default.\r
-#\r
-#      TESTPAT=<file>\r
-#              Reads the tests requested to be run from this file.\r
-#\r
-#      CFG_ENCODING=encoding\r
-#              name of encoding for configuration information. Defaults\r
-#              to cp1252\r
-#\r
-# 5)  Examples:\r
-#\r
-#      Basic syntax of calling nmake looks like this:\r
-#      nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]]\r
-#\r
-#                        Standard (no frills)\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
-#       c:\tcl_src\win\>nmake -f makefile.vc all\r
-#       c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl\r
-#\r
-#                         Building for Win64\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
-#       c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL\r
-#       Targeting Windows pre64 RETAIL\r
-#       c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64\r
-#\r
-#------------------------------------------------------------------------------\r
-#==============================================================================\r
-###############################################################################\r
-#------------------------------------------------------------------------------\r
-\r
-!if !exist("makefile.vc")\r
-MSG = ^\r
-You must run this makefile only from the directory it is in.^\r
-Please `cd` to its location first.\r
-!error $(MSG)\r
-!endif\r
-\r
-#-------------------------------------------------------------------------\r
-# Project specific information (EDIT)\r
-#\r
-# You should edit this with the name and version of your project. This\r
-# information is used to generate the name of the package library and\r
-# it's install location.\r
-#\r
-# For example, the sample extension is  going to build sample04.dll and\r
-# would install it into $(INSTALLDIR)\lib\sample04\r
-#\r
-# You need to specify the object files that need to be linked into your\r
-# binary here.\r
-#\r
-#-------------------------------------------------------------------------\r
-\r
-PROJECT = sqlite3\r
-!include "rules.vc"\r
-\r
-# nmakehelp -V <file> <tag> will search the file for tag, skips until a\r
-#      number and returns all character until a character not in [0-9.ab]\r
-#      is read.\r
-\r
-!if [echo REM = This file is generated from Makefile.vc > versions.vc]\r
-!endif\r
-# get project version from row "AC_INIT([sqlite], [3.7.14])"\r
-!if [echo DOTVERSION = \>> versions.vc] \\r
-   && [nmakehlp -V ..\configure.ac AC_INIT >> versions.vc]\r
-!endif\r
-!include "versions.vc"\r
-\r
-VERSION         = $(DOTVERSION:.=)\r
-STUBPREFIX      = $(PROJECT)stub\r
-\r
-DLLOBJS = \\r
-       $(TMP_DIR)\tclsqlite3.obj\r
-\r
-#-------------------------------------------------------------------------\r
-# Target names and paths ( shouldn't need changing )\r
-#-------------------------------------------------------------------------\r
-\r
-BINROOT                = .\r
-ROOT            = ..\r
-\r
-PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib\r
-PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)\r
-PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)\r
-\r
-PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
-PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)\r
-\r
-### Make sure we use backslash only.\r
-PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)\r
-LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)\r
-INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include\r
-\r
-### The following paths CANNOT have spaces in them.\r
-GENERICDIR     = $(ROOT)\generic\r
-WINDIR         = $(ROOT)\win\r
-LIBDIR          = $(ROOT)\library\r
-DOCDIR         = $(ROOT)\doc\r
-TOOLSDIR       = $(ROOT)\tools\r
-COMPATDIR      = $(ROOT)\compat\r
-\r
-#---------------------------------------------------------------------\r
-# Compile flags\r
-#---------------------------------------------------------------------\r
-\r
-!if !$(DEBUG)\r
-!if $(OPTIMIZING)\r
-### This cranks the optimization level to maximize speed\r
-cdebug = $(OPTIMIZATIONS)\r
-!else\r
-cdebug =\r
-!endif\r
-!else if "$(MACHINE)" == "IA64"\r
-### Warnings are too many, can't support warnings into errors.\r
-cdebug = -Z7 -Od -GZ\r
-!else\r
-cdebug = -Z7 -WX -Od -GZ\r
-!endif\r
-\r
-### Declarations common to all compiler options\r
-cwarn = $(WARNINGS) -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE\r
-cflags = -nologo -c $(COMPILERFLAGS) $(cwarn) -Fp$(TMP_DIR)^\\r
-\r
-!if $(MSVCRT)\r
-!if $(DEBUG)\r
-crt = -MDd\r
-!else\r
-crt = -MD\r
-!endif\r
-!else\r
-!if $(DEBUG)\r
-crt = -MTd\r
-!else\r
-crt = -MT\r
-!endif\r
-!endif\r
-\r
-INCLUDES       = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)" \\r
-                  -I"$(ROOT)\.."\r
-BASE_CLFAGS    = $(cflags) $(cdebug) $(crt) $(INCLUDES) \\r
-                  -DSQLITE_ENABLE_DBSTAT_VTAB=1 \\r
-                  -DSQLITE_ENABLE_FTS3_PARENTHESIS=1 -DSQLITE_ENABLE_FTS4=1 \\r
-                  -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 \\r
-                  -DSQLITE_ENABLE_JSON=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS=1 \\r
-                  -DSQLITE_3_SUFFIX_ONLY=1 -DSQLITE_ENABLE_RTREE=1 \\r
-                  -DSQLITE_UNTESTABLE=1 -DSQLITE_OMIT_LOOKASIDE=1 \\r
-                  -DSQLITE_SECURE_DELETE=1 -DSQLITE_SOUNDEX=1 \\r
-                  -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1 -DDSQLITE_USE_ALLOCA=1 \\r
-                  -DSQLITE_ENABLE_FTS4=1 -DSQLITE_OMIT_DEPRECATED=1\r
-CON_CFLAGS     = $(cflags) $(cdebug) $(crt) -DCONSOLE -DSQLITE_ENABLE_FTS4=1\r
-TCL_CFLAGS     = -DBUILD_sqlite -DUSE_TCL_STUBS \\r
-                  -DPACKAGE_VERSION="\"$(DOTVERSION)\"" $(BASE_CLFAGS) \\r
-                  $(OPTDEFINES)\r
-\r
-#---------------------------------------------------------------------\r
-# Link flags\r
-#---------------------------------------------------------------------\r
-\r
-!if $(DEBUG)\r
-ldebug = -debug -debugtype:cv\r
-!if $(MSVCRT)\r
-ldebug = $(ldebug) -nodefaultlib:msvcrt\r
-!endif\r
-!else\r
-ldebug = -release -opt:ref -opt:icf,3\r
-!endif\r
-\r
-### Declarations common to all linker options\r
-lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)\r
-\r
-!if $(PROFILE)\r
-lflags = $(lflags) -profile\r
-!endif\r
-\r
-!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900\r
-lflags = $(lflags) -nodefaultlib:libucrt.lib\r
-!endif\r
-\r
-!if $(ALIGN98_HACK) && !$(STATIC_BUILD)\r
-### Align sections for PE size savings.\r
-lflags = $(lflags) -opt:nowin98\r
-!else if !$(ALIGN98_HACK) && $(STATIC_BUILD)\r
-### Align sections for speed in loading by choosing the virtual page size.\r
-lflags = $(lflags) -align:4096\r
-!endif\r
-\r
-!if $(LOIMPACT)\r
-lflags = $(lflags) -ws:aggressive\r
-!endif\r
-\r
-dlllflags = $(lflags) -dll\r
-conlflags = $(lflags) -subsystem:console\r
-guilflags = $(lflags) -subsystem:windows\r
-!if !$(STATIC_BUILD)\r
-baselibs  = $(TCLSTUBLIB)\r
-!if defined(TKSTUBLIB)\r
-baselibs  = $(baselibs) $(TKSTUBLIB)\r
-!endif\r
-!endif\r
-\r
-# Avoid 'unresolved external symbol __security_cookie' errors.\r
-# c.f. http://support.microsoft.com/?id=894573\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500\r
-baselibs   = $(baselibs) bufferoverflowU.lib\r
-!endif\r
-!endif\r
-!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900\r
-baselibs   = $(baselibs) ucrt.lib\r
-!endif\r
-\r
-baselibs   = $(baselibs) user32.lib gdi32.lib\r
-\r
-#---------------------------------------------------------------------\r
-# TclTest flags\r
-#---------------------------------------------------------------------\r
-\r
-!IF "$(TESTPAT)" != ""\r
-TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)\r
-!ENDIF\r
-\r
-#---------------------------------------------------------------------\r
-# Project specific targets (EDIT)\r
-#---------------------------------------------------------------------\r
-\r
-all:       setup $(PROJECT)\r
-$(PROJECT): setup $(PRJLIB)\r
-install:    install-binaries install-libraries install-docs\r
-\r
-# Tests need to ensure we load the right dll file we\r
-# have to handle the output differently on Win9x.\r
-#\r
-!if "$(OS)" == "Windows_NT"  || "$(MSVCDIR)" == "IDE"\r
-test: setup $(PROJECT)\r
-        set TCL_LIBRARY=$(ROOT)/library\r
-        $(TCLSH) <<\r
-load $(PRJLIB:\=/) $(PROJECT)\r
-cd "$(ROOT)/tests"\r
-set argv "$(TESTFLAGS)"\r
-source all.tcl\r
-<<\r
-!else\r
-test: setup $(PROJECT)\r
-        echo Please wait while the test results are collected\r
-        set TCL_LIBRARY=$(ROOT)/library\r
-        $(TCLSH) << >tests.log\r
-load $(PRJLIB:\=/)\r
-cd "$(ROOT)/tests"\r
-set argv "$(TESTFLAGS)"\r
-source all.tcl\r
-<<\r
-        type tests.log | more\r
-!endif\r
-\r
-setup:\r
-       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)\r
-       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)\r
-\r
-$(PRJLIB): $(DLLOBJS)\r
-       $(link32) $(dlllflags) -out:$@ $(baselibs) @<<\r
-$**\r
-<<\r
-       -@del $*.exp\r
-\r
-$(PRJSTUBLIB): $(PRJSTUBOBJS)\r
-       $(lib32) -nologo -out:$@ $(PRJSTUBOBJS)\r
-\r
-#---------------------------------------------------------------------\r
-# Implicit rules\r
-#---------------------------------------------------------------------\r
-\r
-{$(WINDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(WINDIR)}.rc{$(TMP_DIR)}.res:\r
-       $(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \\r
-!if $(DEBUG)\r
-       -d DEBUG \\r
-!endif\r
-!if $(TCL_THREADS)\r
-       -d TCL_THREADS \\r
-!endif\r
-!if $(STATIC_BUILD)\r
-       -d STATIC_BUILD \\r
-!endif\r
-       $<\r
-\r
-.SUFFIXES:\r
-.SUFFIXES:.c .rc\r
-\r
-#---------------------------------------------------------------------\r
-# Installation. (EDIT)\r
-#\r
-# You may need to modify this section to reflect the final distribution\r
-# of your files and possibly to generate documentation.\r
-#\r
-#---------------------------------------------------------------------\r
-\r
-install-binaries:\r
-       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'\r
-       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"\r
-       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL\r
-\r
-install-libraries:\r
-        @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'\r
-        @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"\r
-        @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'\r
-        @type << >"$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"\r
-package ifneeded $(PROJECT) $(DOTVERSION) \\r
-    [list load [file join $$dir $(PRJLIBNAME)] sqlite3]\r
-<<\r
-\r
-install-docs:\r
-       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'\r
-       @if exist $(DOCDIR) $(CPY) $(DOCDIR)\*.n "$(DOC_INSTALL_DIR)"\r
-\r
-#---------------------------------------------------------------------\r
-# Clean up\r
-#---------------------------------------------------------------------\r
-\r
-clean:\r
-       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)\r
-       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc\r
-\r
-realclean: clean\r
-       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)\r
-\r
-distclean: realclean\r
-       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe\r
-       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj\r
diff --git a/pkgs/sqlite3.20.0/win/rules.vc b/pkgs/sqlite3.20.0/win/rules.vc
deleted file mode 100644 (file)
index 22cf2f0..0000000
+++ /dev/null
@@ -1,708 +0,0 @@
-#------------------------------------------------------------------------------\r
-# rules.vc --\r
-#\r
-#      Microsoft Visual C++ makefile include for decoding the commandline\r
-#      macros.  This file does not need editing to build Tcl.\r
-#\r
-# See the file "license.terms" for information on usage and redistribution\r
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
-#\r
-# Copyright (c) 2001-2003 David Gravereaux.\r
-# Copyright (c) 2003-2008 Patrick Thoyts\r
-#------------------------------------------------------------------------------\r
-\r
-!ifndef _RULES_VC\r
-_RULES_VC = 1\r
-\r
-cc32           = $(CC)   # built-in default.\r
-link32         = link\r
-lib32          = lib\r
-rc32           = $(RC)   # built-in default.\r
-\r
-!ifndef INSTALLDIR\r
-### Assume the normal default.\r
-_INSTALLDIR    = C:\Program Files\Tcl\r
-!else\r
-### Fix the path separators.\r
-_INSTALLDIR    = $(INSTALLDIR:/=\)\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Set the proper copy method to avoid overwrite questions\r
-# to the user when copying files and selecting the right\r
-# "delete all" method.\r
-#----------------------------------------------------------\r
-\r
-RMDIR  = rmdir /S /Q\r
-ERRNULL  = 2>NUL\r
-!if ![ver | find "4.0" > nul]\r
-CPY    = echo y | xcopy /i >NUL\r
-COPY   = copy >NUL\r
-!else\r
-CPY    = xcopy /i /y >NUL\r
-COPY   = copy /y >NUL\r
-!endif\r
-MKDIR   = mkdir\r
-\r
-#------------------------------------------------------------------------------\r
-# Determine the host and target architectures and compiler version.\r
-#------------------------------------------------------------------------------\r
-\r
-_HASH=^#\r
-_VC_MANIFEST_EMBED_EXE=\r
-_VC_MANIFEST_EMBED_DLL=\r
-VCVER=0\r
-!if ![echo VCVERSION=_MSC_VER > vercl.x] \\r
-    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \\r
-    && ![echo ARCH=IX86 >> vercl.x] \\r
-    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \\r
-    && ![echo ARCH=AMD64 >> vercl.x] \\r
-    && ![echo $(_HASH)endif >> vercl.x] \\r
-    && ![cl -nologo -TC -P vercl.x $(ERRNULL)]\r
-!include vercl.i\r
-!if ![echo VCVER= ^\> vercl.vc] \\r
-    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]\r
-!include vercl.vc\r
-!endif\r
-!endif\r
-!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]\r
-!endif\r
-\r
-!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]\r
-NATIVE_ARCH=IX86\r
-!else\r
-NATIVE_ARCH=AMD64\r
-!endif\r
-\r
-# Since MSVC8 we must deal with manifest resources.\r
-!if $(VCVERSION) >= 1400\r
-_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1\r
-_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2\r
-!endif\r
-\r
-!ifndef MACHINE\r
-MACHINE=$(ARCH)\r
-!endif\r
-\r
-!ifndef CFG_ENCODING\r
-CFG_ENCODING   = \"cp1252\"\r
-!endif\r
-\r
-!message ===============================================================================\r
-\r
-#----------------------------------------------------------\r
-# build the helper app we need to overcome nmake's limiting\r
-# environment.\r
-#----------------------------------------------------------\r
-\r
-!if !exist(nmakehlp.exe)\r
-!if [$(cc32) -nologo nmakehlp.c -link -subsystem:console > nul]\r
-!endif\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Test for compiler features\r
-#----------------------------------------------------------\r
-\r
-### test for optimizations\r
-!if [nmakehlp -c -Ot]\r
-!message *** Compiler has 'Optimizations'\r
-OPTIMIZING     = 1\r
-!else\r
-!message *** Compiler does not have 'Optimizations'\r
-OPTIMIZING     = 0\r
-!endif\r
-\r
-OPTIMIZATIONS   =\r
-\r
-!if [nmakehlp -c -Ot]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Ot\r
-!endif\r
-\r
-!if [nmakehlp -c -Oi]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Oi\r
-!endif\r
-\r
-!if [nmakehlp -c -Op]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Op\r
-!endif\r
-\r
-!if [nmakehlp -c -fp:strict]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -fp:strict\r
-!endif\r
-\r
-!if [nmakehlp -c -Gs]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Gs\r
-!endif\r
-\r
-!if [nmakehlp -c -GS]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS\r
-!endif\r
-\r
-!if [nmakehlp -c -GL]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL\r
-!endif\r
-\r
-DEBUGFLAGS     =\r
-\r
-!if [nmakehlp -c -RTC1]\r
-DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1\r
-!elseif [nmakehlp -c -GZ]\r
-DEBUGFLAGS     = $(DEBUGFLAGS) -GZ\r
-!endif\r
-\r
-COMPILERFLAGS  =-W3 /DUNICODE /D_UNICODE /D_ATL_XP_TARGETING\r
-\r
-# In v13 -GL and -YX are incompatible.\r
-!if [nmakehlp -c -YX]\r
-!if ![nmakehlp -c -GL]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for pentium errata\r
-!if [nmakehlp -c -QI0f]\r
-!message *** Compiler has 'Pentium 0x0f fix'\r
-COMPILERFLAGS  = $(COMPILERFLAGS) -QI0f\r
-!else\r
-!message *** Compiler does not have 'Pentium 0x0f fix'\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IA64"\r
-### test for Itanium errata\r
-!if [nmakehlp -c -QIA64_Bx]\r
-!message *** Compiler has 'B-stepping errata workarounds'\r
-COMPILERFLAGS   = $(COMPILERFLAGS) -QIA64_Bx\r
-!else\r
-!message *** Compiler does not have 'B-stepping errata workarounds'\r
-!endif\r
-!endif\r
-\r
-# Prevents "LNK1561: entry point must be defined" error compiling from VS-IDE:\r
-!ifndef LINKER_TESTFLAGS\r
-LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmhlp-out.txt\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for -align:4096, when align:512 will do.\r
-!if [nmakehlp -l -opt:nowin98 $(LINKER_TESTFLAGS)]\r
-!message *** Linker has 'Win98 alignment problem'\r
-ALIGN98_HACK   = 1\r
-!else\r
-!message *** Linker does not have 'Win98 alignment problem'\r
-ALIGN98_HACK   = 0\r
-!endif\r
-!else\r
-ALIGN98_HACK   = 0\r
-!endif\r
-\r
-LINKERFLAGS     =\r
-\r
-!if [nmakehlp -l -ltcg $(LINKER_TESTFLAGS)]\r
-LINKERFLAGS     =-ltcg\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Decode the options requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]\r
-STATIC_BUILD   = 0\r
-TCL_THREADS    = 1\r
-DEBUG          = 0\r
-SYMBOLS                = 0\r
-PROFILE                = 0\r
-PGO            = 0\r
-MSVCRT         = 0\r
-LOIMPACT       = 0\r
-TCL_USE_STATIC_PACKAGES        = 0\r
-USE_THREAD_ALLOC = 1\r
-UNCHECKED      = 0\r
-!else\r
-!if [nmakehlp -f $(OPTS) "static"]\r
-!message *** Doing static\r
-STATIC_BUILD   = 1\r
-!else\r
-STATIC_BUILD   = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "msvcrt"]\r
-!message *** Doing msvcrt\r
-MSVCRT         = 1\r
-!else\r
-MSVCRT         = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "staticpkg"]\r
-!message *** Doing staticpkg\r
-TCL_USE_STATIC_PACKAGES        = 1\r
-!else\r
-TCL_USE_STATIC_PACKAGES        = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "nothreads"]\r
-!message *** Compile explicitly for non-threaded tcl\r
-TCL_THREADS    = 0\r
-!else\r
-TCL_THREADS    = 1\r
-USE_THREAD_ALLOC= 1\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "symbols"]\r
-!message *** Doing symbols\r
-DEBUG          = 1\r
-!else\r
-DEBUG          = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "pdbs"]\r
-!message *** Doing pdbs\r
-SYMBOLS                = 1\r
-!else\r
-SYMBOLS                = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "profile"]\r
-!message *** Doing profile\r
-PROFILE                = 1\r
-!else\r
-PROFILE                = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "pgi"]\r
-!message *** Doing profile guided optimization instrumentation\r
-PGO            = 1\r
-!elseif [nmakehlp -f $(OPTS) "pgo"]\r
-!message *** Doing profile guided optimization\r
-PGO            = 2\r
-!else\r
-PGO            = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "loimpact"]\r
-!message *** Doing loimpact\r
-LOIMPACT       = 1\r
-!else\r
-LOIMPACT       = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "thrdalloc"]\r
-!message *** Doing thrdalloc\r
-USE_THREAD_ALLOC = 1\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "tclalloc"]\r
-!message *** Doing tclalloc\r
-USE_THREAD_ALLOC = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "unchecked"]\r
-!message *** Doing unchecked\r
-UNCHECKED = 1\r
-!else\r
-UNCHECKED = 0\r
-!endif\r
-!endif\r
-\r
-\r
-!if !$(STATIC_BUILD)\r
-# Make sure we don't build overly fat DLLs.\r
-MSVCRT         = 1\r
-# We shouldn't statically put the extensions inside the shell when dynamic.\r
-TCL_USE_STATIC_PACKAGES = 0\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Figure-out how to name our intermediate and output directories.\r
-# We wouldn't want different builds to use the same .obj files\r
-# by accident.\r
-#----------------------------------------------------------\r
-\r
-#----------------------------------------\r
-# Naming convention:\r
-#   t = full thread support.\r
-#   s = static library (as opposed to an\r
-#      import library)\r
-#   g = linked to the debug enabled C\r
-#      run-time.\r
-#   x = special static build when it\r
-#      links to the dynamic C run-time.\r
-#----------------------------------------\r
-SUFX       = tsgx\r
-\r
-!if $(DEBUG)\r
-BUILDDIRTOP = Debug\r
-!else\r
-BUILDDIRTOP = Release\r
-!endif\r
-\r
-!if "$(MACHINE)" != "IX86"\r
-BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)\r
-!endif\r
-!if $(VCVER) > 6\r
-BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)\r
-!endif\r
-\r
-!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)\r
-SUFX       = $(SUFX:g=)\r
-!endif\r
-\r
-TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX\r
-\r
-!if !$(STATIC_BUILD)\r
-TMP_DIRFULL = $(TMP_DIRFULL:Static=)\r
-SUFX       = $(SUFX:s=)\r
-EXT        = dll\r
-!if $(MSVCRT)\r
-TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
-SUFX       = $(SUFX:x=)\r
-!endif\r
-!else\r
-TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)\r
-EXT        = lib\r
-!if !$(MSVCRT)\r
-TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
-SUFX       = $(SUFX:x=)\r
-!endif\r
-!endif\r
-\r
-!if !$(TCL_THREADS)\r
-TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)\r
-SUFX       = $(SUFX:t=)\r
-!endif\r
-\r
-!ifndef TMP_DIR\r
-TMP_DIR            = $(TMP_DIRFULL)\r
-!ifndef OUT_DIR\r
-OUT_DIR            = .\$(BUILDDIRTOP)\r
-!endif\r
-!else\r
-!ifndef OUT_DIR\r
-OUT_DIR            = $(TMP_DIR)\r
-!endif\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Decode the statistics requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"]\r
-TCL_MEM_DEBUG      = 0\r
-TCL_COMPILE_DEBUG   = 0\r
-!else\r
-!if [nmakehlp -f $(STATS) "memdbg"]\r
-!message *** Doing memdbg\r
-TCL_MEM_DEBUG      = 1\r
-!else\r
-TCL_MEM_DEBUG      = 0\r
-!endif\r
-!if [nmakehlp -f $(STATS) "compdbg"]\r
-!message *** Doing compdbg\r
-TCL_COMPILE_DEBUG   = 1\r
-!else\r
-TCL_COMPILE_DEBUG   = 0\r
-!endif\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Decode the checks requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(CHECKS)" == "" || [nmakehlp -f "$(CHECKS)" "none"]\r
-TCL_NO_DEPRECATED          = 0\r
-WARNINGS                   = -W3\r
-!else\r
-!if [nmakehlp -f $(CHECKS) "nodep"]\r
-!message *** Doing nodep check\r
-TCL_NO_DEPRECATED          = 1\r
-!else\r
-TCL_NO_DEPRECATED          = 0\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "fullwarn"]\r
-!message *** Doing full warnings check\r
-WARNINGS                   = -W4\r
-!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)]\r
-LINKERFLAGS                = $(LINKERFLAGS) -warn:3\r
-!endif\r
-!else\r
-WARNINGS                   = -W3\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]\r
-!message *** Doing 64bit portability warnings\r
-WARNINGS                   = $(WARNINGS) -Wp64\r
-!endif\r
-!endif\r
-\r
-!if $(PGO) > 1\r
-!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)]\r
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize\r
-!else\r
-MSG=^\r
-This compiler does not support profile guided optimization.\r
-!error $(MSG)\r
-!endif\r
-!elseif $(PGO) > 0\r
-!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)]\r
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument\r
-!else\r
-MSG=^\r
-This compiler does not support profile guided optimization.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Set our defines now armed with our options.\r
-#----------------------------------------------------------\r
-\r
-OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS\r
-\r
-!if $(TCL_MEM_DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG\r
-!endif\r
-!if $(TCL_COMPILE_DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS\r
-!endif\r
-!if $(TCL_THREADS)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1\r
-!if $(USE_THREAD_ALLOC)\r
-OPTDEFINES     = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1\r
-!endif\r
-!endif\r
-!if $(STATIC_BUILD)\r
-OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD\r
-!endif\r
-!if $(TCL_NO_DEPRECATED)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED\r
-!endif\r
-\r
-!if !$(DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DNDEBUG\r
-!if $(OPTIMIZING)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED\r
-!endif\r
-!endif\r
-!if $(PROFILE)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED\r
-!endif\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT\r
-!endif\r
-!if $(VCVERSION) < 1300\r
-OPTDEFINES     = $(OPTDEFINES) -DNO_STRTOI64\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Locate the Tcl headers to build against\r
-#----------------------------------------------------------\r
-\r
-!if "$(PROJECT)" == "tcl"\r
-\r
-_TCL_H          = ..\generic\tcl.h\r
-\r
-!else\r
-\r
-# If INSTALLDIR set to tcl root dir then reset to the lib dir.\r
-!if exist("$(_INSTALLDIR)\include\tcl.h")\r
-_INSTALLDIR=$(_INSTALLDIR)\lib\r
-!endif\r
-\r
-!if !defined(TCLDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCLDIR                = $(_INSTALLDIR)\..\r
-_TCL_H          = $(_INSTALLDIR)\..\include\tcl.h\r
-TCLDIR          = $(_INSTALLDIR)\..\r
-!else\r
-MSG=^\r
-Failed to find tcl.h.  Set the TCLDIR macro.\r
-!error $(MSG)\r
-!endif\r
-!else\r
-_TCLDIR        = $(TCLDIR:/=\)\r
-!if exist("$(_TCLDIR)\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCL_H          = $(_TCLDIR)\include\tcl.h\r
-!elseif exist("$(_TCLDIR)\generic\tcl.h")\r
-TCLINSTALL     = 0\r
-_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
-!else\r
-MSG =^\r
-Failed to find tcl.h.  The TCLDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-!endif\r
-\r
-#--------------------------------------------------------------\r
-# Extract various version numbers from tcl headers\r
-# The generated file is then included in the makefile.\r
-#--------------------------------------------------------------\r
-\r
-!if [echo REM = This file is generated from rules.vc > versions.vc]\r
-!endif\r
-!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TCL_MINOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]\r
-!endif\r
-\r
-# If building the tcl core then we need additional package versions\r
-!if "$(PROJECT)" == "tcl"\r
-!if [echo PKG_HTTP_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\http\pkgIndex.tcl http >> versions.vc]\r
-!endif\r
-!if [echo PKG_TCLTEST_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\tcltest\pkgIndex.tcl tcltest >> versions.vc]\r
-!endif\r
-!if [echo PKG_MSGCAT_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\msgcat\pkgIndex.tcl msgcat >> versions.vc]\r
-!endif\r
-!if [echo PKG_PLATFORM_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform " >> versions.vc]\r
-!endif\r
-!if [echo PKG_SHELL_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform::shell" >> versions.vc]\r
-!endif\r
-!if [echo PKG_DDE_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\dde\pkgIndex.tcl "dde " >> versions.vc]\r
-!endif\r
-!if [echo PKG_REG_VER =\>> versions.vc] \\r
-   && [nmakehlp -V ..\library\reg\pkgIndex.tcl registry >> versions.vc]\r
-!endif\r
-!endif\r
-\r
-!include versions.vc\r
-\r
-#--------------------------------------------------------------\r
-# Setup tcl version dependent stuff headers\r
-#--------------------------------------------------------------\r
-\r
-!if "$(PROJECT)" != "tcl"\r
-\r
-TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)\r
-\r
-!if $(TCL_VERSION) < 81\r
-TCL_DOES_STUBS = 0\r
-!else\r
-TCL_DOES_STUBS = 1\r
-!endif\r
-\r
-!if $(TCLINSTALL)\r
-TCLSH          = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH           = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\lib\r
-TCLREGLIB      = "$(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib"\r
-TCLDDELIB      = "$(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib"\r
-COFFBASE       = \must\have\tcl\sources\to\build\this\target\r
-TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target\r
-TCL_INCLUDES    = -I"$(_TCLDIR)\include"\r
-!else\r
-TCLSH          = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH          = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\library\r
-TCLREGLIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib"\r
-TCLDDELIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib"\r
-COFFBASE       = "$(_TCLDIR)\win\coffbase.txt"\r
-TCLTOOLSDIR    = $(_TCLDIR)\tools\r
-TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"\r
-!endif\r
-\r
-!endif\r
-\r
-#-------------------------------------------------------------------------\r
-# Locate the Tk headers to build against\r
-#-------------------------------------------------------------------------\r
-\r
-!if "$(PROJECT)" == "tk"\r
-_TK_H          = ..\generic\tk.h\r
-_INSTALLDIR    = $(_INSTALLDIR)\..\r
-!endif\r
-\r
-!ifdef PROJECT_REQUIRES_TK\r
-!if !defined(TKDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_INSTALLDIR)\..\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
-!elseif exist("$(_TCLDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_TCLDIR)\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
-!endif\r
-!else\r
-_TKDIR = $(TKDIR:/=\)\r
-!if exist("$(_TKDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-!elseif exist("$(_TKDIR)\generic\tk.h")\r
-TKINSTALL      = 0\r
-_TK_H          = $(_TKDIR)\generic\tk.h\r
-!else\r
-MSG =^\r
-Failed to find tk.h. The TKDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-!endif\r
-\r
-#-------------------------------------------------------------------------\r
-# Extract Tk version numbers\r
-#-------------------------------------------------------------------------\r
-\r
-!if defined(PROJECT_REQUIRES_TK) || "$(PROJECT)" == "tk"\r
-\r
-!if [echo TK_MAJOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TK_MINOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TK_PATCH_LEVEL = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]\r
-!endif\r
-\r
-!include versions.vc\r
-\r
-TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)\r
-TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)\r
-\r
-!if "$(PROJECT)" != "tk"\r
-!if $(TKINSTALL)\r
-WISH           = "$(_TKDIR)\bin\wish$(TK_VERSION)$(SUFX).exe"\r
-TKSTUBLIB      = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"\r
-TKIMPLIB       = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"\r
-TK_INCLUDES     = -I"$(_TKDIR)\include"\r
-!else\r
-WISH           = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)$(SUFX).exe"\r
-TKSTUBLIB      = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"\r
-TKIMPLIB       = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"\r
-TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"\r
-!endif\r
-!endif\r
-\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Display stats being used.\r
-#----------------------------------------------------------\r
-\r
-!message *** Intermediate directory will be '$(TMP_DIR)'\r
-!message *** Output directory will be '$(OUT_DIR)'\r
-!message *** Suffix for binaries will be '$(SUFX)'\r
-!message *** Optional defines are '$(OPTDEFINES)'\r
-!message *** Compiler version $(VCVER). Target machine is $(MACHINE)\r
-!message *** Host architecture is $(NATIVE_ARCH)\r
-!message *** Compiler options '$(COMPILERFLAGS) $(OPTIMIZATIONS) $(DEBUGFLAGS) $(WARNINGS)'\r
-!message *** Link options '$(LINKERFLAGS)'\r
-\r
-!endif\r
-\r
similarity index 99%
rename from pkgs/sqlite3.20.0/compat/sqlite3/shell.c
rename to pkgs/sqlite3.21.0/compat/sqlite3/shell.c
index ee72706..6b9cc57 100644 (file)
@@ -1472,7 +1472,7 @@ static void sha3QueryFunc(
 
 
 #ifdef _WIN32
-__declspec(dllexport)
+
 #endif
 int sqlite3_shathree_init(
   sqlite3 *db,
@@ -1584,7 +1584,7 @@ static void writefileFunc(
 
 
 #ifdef _WIN32
-__declspec(dllexport)
+
 #endif
 int sqlite3_fileio_init(
   sqlite3 *db, 
@@ -2075,7 +2075,7 @@ static int completionBestIndex(
 ** This following structure defines all the methods for the 
 ** completion virtual table.
 */
-static sqlite3_module completionModule = {
+static const sqlite3_module completionModule = {
   0,                         /* iVersion */
   0,                         /* xCreate */
   completionConnect,         /* xConnect */
@@ -2112,7 +2112,7 @@ int sqlite3CompletionVtabInit(sqlite3 *db){
 }
 
 #ifdef _WIN32
-__declspec(dllexport)
+
 #endif
 int sqlite3_completion_init(
   sqlite3 *db, 
@@ -2204,14 +2204,13 @@ struct ShellState {
 /*
 ** These are the allowed shellFlgs values
 */
-#define SHFLG_Scratch        0x00000001 /* The --scratch option is used */
-#define SHFLG_Pagecache      0x00000002 /* The --pagecache option is used */
-#define SHFLG_Lookaside      0x00000004 /* Lookaside memory is used */
-#define SHFLG_Backslash      0x00000008 /* The --backslash option is used */
-#define SHFLG_PreserveRowid  0x00000010 /* .dump preserves rowid values */
-#define SHFLG_Newlines       0x00000020 /* .dump --newline flag */
-#define SHFLG_CountChanges   0x00000040 /* .changes setting */
-#define SHFLG_Echo           0x00000080 /* .echo or --echo setting */
+#define SHFLG_Pagecache      0x00000001 /* The --pagecache option is used */
+#define SHFLG_Lookaside      0x00000002 /* Lookaside memory is used */
+#define SHFLG_Backslash      0x00000004 /* The --backslash option is used */
+#define SHFLG_PreserveRowid  0x00000008 /* .dump preserves rowid values */
+#define SHFLG_Newlines       0x00000010 /* .dump --newline flag */
+#define SHFLG_CountChanges   0x00000020 /* .changes setting */
+#define SHFLG_Echo           0x00000040 /* .echo or --echo setting */
 
 /*
 ** Macros for testing and setting shellFlgs
@@ -2648,6 +2647,7 @@ static int shell_callback(
   int i;
   ShellState *p = (ShellState*)pArg;
 
+  if( azArg==0 ) return 0;
   switch( p->cMode ){
     case MODE_Line: {
       int w = 5;
@@ -2762,6 +2762,7 @@ static int shell_callback(
       for(i=0; IsSpace(z[i]); i++){}
       for(; (c = z[i])!=0; i++){
         if( IsSpace(c) ){
+          if( z[j-1]=='\r' ) z[j-1] = '\n';
           if( IsSpace(z[j-1]) || z[j-1]=='(' ) continue;
         }else if( (c=='(' || c==')') && j>0 && IsSpace(z[j-1]) ){
           j--;
@@ -2998,6 +2999,7 @@ static int captureOutputCallback(void *pArg, int nArg, char **azArg, char **az){
   ShellText *p = (ShellText*)pArg;
   int i;
   UNUSED_PARAMETER(az);
+  if( azArg==0 ) return 0;
   if( p->n ) appendText(p, "|", 0);
   for(i=0; i<nArg; i++){
     if( i ) appendText(p, ",", 0);
@@ -3062,7 +3064,7 @@ static void createSelftestTable(ShellState *p){
 */
 static void set_table_name(ShellState *p, const char *zName){
   int i, n;
-  int cQuote;
+  char cQuote;
   char *z;
 
   if( p->zDestTable ){
@@ -3244,18 +3246,10 @@ static int display_stats(
     }
     displayStatLine(pArg, "Number of Pcache Overflow Bytes:",
        "%lld (max %lld) bytes", SQLITE_STATUS_PAGECACHE_OVERFLOW, bReset);
-    if( pArg->shellFlgs & SHFLG_Scratch ){
-      displayStatLine(pArg, "Number of Scratch Allocations Used:",
-         "%lld (max %lld)", SQLITE_STATUS_SCRATCH_USED, bReset);
-    }
-    displayStatLine(pArg, "Number of Scratch Overflow Bytes:",
-       "%lld (max %lld) bytes", SQLITE_STATUS_SCRATCH_OVERFLOW, bReset);
     displayStatLine(pArg, "Largest Allocation:",
        "%lld bytes", SQLITE_STATUS_MALLOC_SIZE, bReset);
     displayStatLine(pArg, "Largest Pcache Allocation:",
        "%lld bytes", SQLITE_STATUS_PAGECACHE_SIZE, bReset);
-    displayStatLine(pArg, "Largest Scratch Allocation:",
-       "%lld bytes", SQLITE_STATUS_SCRATCH_SIZE, bReset);
 #ifdef YYTRACKMAXSTACKDEPTH
     displayStatLine(pArg, "Deepest Parser Stack:",
        "%lld (max %lld)", SQLITE_STATUS_PARSER_STACK, bReset);
@@ -3796,6 +3790,7 @@ static char **tableColumnList(ShellState *p, const char *zTab){
     }
   }
   sqlite3_finalize(pStmt);
+  if( azCol==0 ) return 0;
   azCol[0] = 0;
   azCol[nCol+1] = 0;
 
@@ -3879,7 +3874,7 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azNotUsed){
   ShellState *p = (ShellState *)pArg;
 
   UNUSED_PARAMETER(azNotUsed);
-  if( nArg!=3 ) return 1;
+  if( nArg!=3 || azArg==0 ) return 0;
   zTable = azArg[0];
   zType = azArg[1];
   zSql = azArg[2];
@@ -4965,20 +4960,24 @@ static int shell_dbinfo_command(ShellState *p, int nArg, char **azArg){
      { "schema size:",
        "SELECT total(length(sql)) FROM %s" },
   };
-  sqlite3_file *pFile = 0;
   int i;
   char *zSchemaTab;
   char *zDb = nArg>=2 ? azArg[1] : "main";
+  sqlite3_stmt *pStmt = 0;
   unsigned char aHdr[100];
   open_db(p, 0);
   if( p->db==0 ) return 1;
-  sqlite3_file_control(p->db, zDb, SQLITE_FCNTL_FILE_POINTER, &pFile);
-  if( pFile==0 || pFile->pMethods==0 || pFile->pMethods->xRead==0 ){
-    return 1;
-  }
-  i = pFile->pMethods->xRead(pFile, aHdr, 100, 0);
-  if( i!=SQLITE_OK ){
+  sqlite3_prepare_v2(p->db,"SELECT data FROM sqlite_dbpage(?1) WHERE pgno=1",
+                     -1, &pStmt, 0);
+  sqlite3_bind_text(pStmt, 1, zDb, -1, SQLITE_STATIC);
+  if( sqlite3_step(pStmt)==SQLITE_ROW
+   && sqlite3_column_bytes(pStmt,0)>100
+  ){
+    memcpy(aHdr, sqlite3_column_blob(pStmt,0), 100);
+    sqlite3_finalize(pStmt);
+  }else{
     raw_printf(stderr, "unable to read database header\n");
+    sqlite3_finalize(pStmt);
     return 1;
   }
   i = get2byteInt(aHdr+16);
@@ -5598,7 +5597,7 @@ static int do_meta_command(char *zLine, ShellState *p){
       utf8_printf(stderr,
                  "testcase-%s FAILED\n Expected: [%s]\n      Got: [%s]\n",
                  p->zTestcase, azArg[1], zRes);
-      rc = 2;
+      rc = 1;
     }else{
       utf8_printf(stdout, "testcase-%s ok\n", p->zTestcase);
       p->nCheck++;
@@ -7276,7 +7275,6 @@ static int do_meta_command(char *zLine, ShellState *p){
       { "reserve",               SQLITE_TESTCTRL_RESERVE                },
       { "optimizations",         SQLITE_TESTCTRL_OPTIMIZATIONS          },
       { "iskeyword",             SQLITE_TESTCTRL_ISKEYWORD              },
-      { "scratchmalloc",         SQLITE_TESTCTRL_SCRATCHMALLOC          },
       { "byteorder",             SQLITE_TESTCTRL_BYTEORDER              },
       { "never_corrupt",         SQLITE_TESTCTRL_NEVER_CORRUPT          },
       { "imposter",              SQLITE_TESTCTRL_IMPOSTER               },
@@ -7389,7 +7387,6 @@ static int do_meta_command(char *zLine, ShellState *p){
         case SQLITE_TESTCTRL_BITVEC_TEST:
         case SQLITE_TESTCTRL_FAULT_INSTALL:
         case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS:
-        case SQLITE_TESTCTRL_SCRATCHMALLOC:
         default:
           utf8_printf(stderr,
                       "Error: CLI support for testctrl %s not implemented\n",
@@ -7912,7 +7909,6 @@ static const char zOptions[] =
   "   -pagecache SIZE N    use N slots of SZ bytes each for page cache memory\n"
   "   -quote               set output mode to 'quote'\n"
   "   -scanstats           print scan stats before each finalize\n"
-  "   -scratch SIZE N      use N slots of SZ bytes each for scratch memory\n"
   "   -separator SEP       set output column separator. Default: '|'\n"
   "   -stats               print memory stats before each finalize\n"
   "   -version             show SQLite version\n"
@@ -8019,7 +8015,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
   stdout_is_console = isatty(1);
 
 #if USE_SYSTEM_SQLITE+0!=1
-  if( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)!=0 ){
+  if( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,60)!=0 ){
     utf8_printf(stderr, "SQLite header and source version mismatch\n%s\n%s\n",
             sqlite3_sourceid(), SQLITE_SOURCE_ID);
     exit(1);
@@ -8116,16 +8112,6 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
 #else
       (void)cmdline_option_value(argc, argv, ++i);
 #endif
-    }else if( strcmp(z,"-scratch")==0 ){
-      int n, sz;
-      sz = (int)integerValue(cmdline_option_value(argc,argv,++i));
-      if( sz>400000 ) sz = 400000;
-      if( sz<2500 ) sz = 2500;
-      n = (int)integerValue(cmdline_option_value(argc,argv,++i));
-      if( n>10 ) n = 10;
-      if( n<1 ) n = 1;
-      sqlite3_config(SQLITE_CONFIG_SCRATCH, malloc(n*sz+1), sz, n);
-      data.shellFlgs |= SHFLG_Scratch;
     }else if( strcmp(z,"-pagecache")==0 ){
       int n, sz;
       sz = (int)integerValue(cmdline_option_value(argc,argv,++i));
@@ -8269,8 +8255,6 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
       stdin_is_interactive = 0;
     }else if( strcmp(z,"-heap")==0 ){
       i++;
-    }else if( strcmp(z,"-scratch")==0 ){
-      i+=2;
     }else if( strcmp(z,"-pagecache")==0 ){
       i+=2;
     }else if( strcmp(z,"-lookaside")==0 ){
similarity index 97%
rename from pkgs/sqlite3.20.0/compat/sqlite3/sqlite3.c
rename to pkgs/sqlite3.21.0/compat/sqlite3/sqlite3.c
index 05f340b..240b71b 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************
 ** This file is an amalgamation of many separate C source files from SQLite
-** version 3.20.0.  By combining all the individual C code files into this
+** version 3.21.0.  By combining all the individual C code files into this
 ** single large file, the entire code can be compiled as a single translation
 ** unit.  This allows many compilers to do optimizations that would not be
 ** possible if the files were compiled separately.  Performance improvements
@@ -209,6 +209,9 @@ static const char * const sqlite3azCompileOpt[] = {
 #if SQLITE_ENABLE_ATOMIC_WRITE
   "ENABLE_ATOMIC_WRITE",
 #endif
+#if SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+  "ENABLE_BATCH_ATOMIC_WRITE",
+#endif
 #if SQLITE_ENABLE_CEROD
   "ENABLE_CEROD",
 #endif
@@ -825,14 +828,6 @@ SQLITE_PRIVATE const char **sqlite3CompileOptions(int *pnOpt){
 #endif
 
 /*
-** Make sure that rand_s() is available on Windows systems with MSVC 2005
-** or higher.
-*/
-#if defined(__MSVCRT__) || defined(_MSC_VER) && _MSC_VER>=1400
-#  define _CRT_RAND_S
-#endif
-
-/*
 ** Include the header file used to customize the compiler options for MSVC.
 ** This should be done first so that it can successfully prevent spurious
 ** compiler warnings due to subsequent content in this file and other files
@@ -1142,15 +1137,17 @@ extern "C" {
 ** a string which identifies a particular check-in of SQLite
 ** within its configuration management system.  ^The SQLITE_SOURCE_ID
 ** string contains the date and time of the check-in (UTC) and a SHA1
-** or SHA3-256 hash of the entire source tree.
+** or SHA3-256 hash of the entire source tree.  If the source code has
+** been edited in any way since it was last checked in, then the last
+** four hexadecimal digits of the hash may be modified.
 **
 ** See also: [sqlite3_libversion()],
 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
 ** [sqlite_version()] and [sqlite_source_id()].
 */
-#define SQLITE_VERSION        "3.20.0"
-#define SQLITE_VERSION_NUMBER 3020000
-#define SQLITE_SOURCE_ID      "2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8"
+#define SQLITE_VERSION        "3.21.0"
+#define SQLITE_VERSION_NUMBER 3021000
+#define SQLITE_SOURCE_ID      "2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827"
 
 /*
 ** CAPI3REF: Run-Time Library Version Numbers
@@ -1166,7 +1163,7 @@ extern "C" {
 **
 ** <blockquote><pre>
 ** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
-** assert( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)==0 );
+** assert( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,80)==0 );
 ** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
 ** </pre></blockquote>)^
 **
@@ -1176,9 +1173,11 @@ extern "C" {
 ** function is provided for use in DLLs since DLL users usually do not have
 ** direct access to string constants within the DLL.  ^The
 ** sqlite3_libversion_number() function returns an integer equal to
-** [SQLITE_VERSION_NUMBER].  ^The sqlite3_sourceid() function returns 
+** [SQLITE_VERSION_NUMBER].  ^(The sqlite3_sourceid() function returns 
 ** a pointer to a string constant whose value is the same as the 
-** [SQLITE_SOURCE_ID] C preprocessor macro.
+** [SQLITE_SOURCE_ID] C preprocessor macro.  Except if SQLite is built
+** using an edited copy of [the amalgamation], then the last four characters
+** of the hash might be different from [SQLITE_SOURCE_ID].)^
 **
 ** See also: [sqlite_version()] and [sqlite_source_id()].
 */
@@ -1459,7 +1458,7 @@ SQLITE_API int sqlite3_exec(
 #define SQLITE_FULL        13   /* Insertion failed because database is full */
 #define SQLITE_CANTOPEN    14   /* Unable to open the database file */
 #define SQLITE_PROTOCOL    15   /* Database lock protocol error */
-#define SQLITE_EMPTY       16   /* Not used */
+#define SQLITE_EMPTY       16   /* Internal use only */
 #define SQLITE_SCHEMA      17   /* The database schema changed */
 #define SQLITE_TOOBIG      18   /* String or BLOB exceeds size limit */
 #define SQLITE_CONSTRAINT  19   /* Abort due to constraint violation */
@@ -1521,6 +1520,9 @@ SQLITE_API int sqlite3_exec(
 #define SQLITE_IOERR_CONVPATH          (SQLITE_IOERR | (26<<8))
 #define SQLITE_IOERR_VNODE             (SQLITE_IOERR | (27<<8))
 #define SQLITE_IOERR_AUTH              (SQLITE_IOERR | (28<<8))
+#define SQLITE_IOERR_BEGIN_ATOMIC      (SQLITE_IOERR | (29<<8))
+#define SQLITE_IOERR_COMMIT_ATOMIC     (SQLITE_IOERR | (30<<8))
+#define SQLITE_IOERR_ROLLBACK_ATOMIC   (SQLITE_IOERR | (31<<8))
 #define SQLITE_LOCKED_SHAREDCACHE      (SQLITE_LOCKED |  (1<<8))
 #define SQLITE_BUSY_RECOVERY           (SQLITE_BUSY   |  (1<<8))
 #define SQLITE_BUSY_SNAPSHOT           (SQLITE_BUSY   |  (2<<8))
@@ -1607,6 +1609,11 @@ SQLITE_API int sqlite3_exec(
 ** SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on
 ** read-only media and cannot be changed even by processes with
 ** elevated privileges.
+**
+** The SQLITE_IOCAP_BATCH_ATOMIC property means that the underlying
+** filesystem supports doing multiple write operations atomically when those
+** write operations are bracketed by [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] and
+** [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE].
 */
 #define SQLITE_IOCAP_ATOMIC                 0x00000001
 #define SQLITE_IOCAP_ATOMIC512              0x00000002
@@ -1622,6 +1629,7 @@ SQLITE_API int sqlite3_exec(
 #define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN  0x00000800
 #define SQLITE_IOCAP_POWERSAFE_OVERWRITE    0x00001000
 #define SQLITE_IOCAP_IMMUTABLE              0x00002000
+#define SQLITE_IOCAP_BATCH_ATOMIC           0x00004000
 
 /*
 ** CAPI3REF: File Locking Levels
@@ -1756,6 +1764,7 @@ struct sqlite3_file {
 ** <li> [SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN]
 ** <li> [SQLITE_IOCAP_POWERSAFE_OVERWRITE]
 ** <li> [SQLITE_IOCAP_IMMUTABLE]
+** <li> [SQLITE_IOCAP_BATCH_ATOMIC]
 ** </ul>
 **
 ** The SQLITE_IOCAP_ATOMIC property means that all writes of
@@ -2039,6 +2048,40 @@ struct sqlite3_io_methods {
 ** The [SQLITE_FCNTL_RBU] opcode is implemented by the special VFS used by
 ** the RBU extension only.  All other VFS should return SQLITE_NOTFOUND for
 ** this opcode.  
+**
+** <li>[[SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]]
+** If the [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] opcode returns SQLITE_OK, then
+** the file descriptor is placed in "batch write mode", which
+** means all subsequent write operations will be deferred and done
+** atomically at the next [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE].  Systems
+** that do not support batch atomic writes will return SQLITE_NOTFOUND.
+** ^Following a successful SQLITE_FCNTL_BEGIN_ATOMIC_WRITE and prior to
+** the closing [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] or
+** [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE], SQLite will make
+** no VFS interface calls on the same [sqlite3_file] file descriptor
+** except for calls to the xWrite method and the xFileControl method
+** with [SQLITE_FCNTL_SIZE_HINT].
+**
+** <li>[[SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]]
+** The [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] opcode causes all write
+** operations since the previous successful call to 
+** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be performed atomically.
+** This file control returns [SQLITE_OK] if and only if the writes were
+** all performed successfully and have been committed to persistent storage.
+** ^Regardless of whether or not it is successful, this file control takes
+** the file descriptor out of batch write mode so that all subsequent
+** write operations are independent.
+** ^SQLite will never invoke SQLITE_FCNTL_COMMIT_ATOMIC_WRITE without
+** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE].
+**
+** <li>[[SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE]]
+** The [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE] opcode causes all write
+** operations since the previous successful call to 
+** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be rolled back.
+** ^This file control takes the file descriptor out of batch write mode
+** so that all subsequent write operations are independent.
+** ^SQLite will never invoke SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE without
+** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE].
 ** </ul>
 */
 #define SQLITE_FCNTL_LOCKSTATE               1
@@ -2070,6 +2113,9 @@ struct sqlite3_io_methods {
 #define SQLITE_FCNTL_JOURNAL_POINTER        28
 #define SQLITE_FCNTL_WIN32_GET_HANDLE       29
 #define SQLITE_FCNTL_PDB                    30
+#define SQLITE_FCNTL_BEGIN_ATOMIC_WRITE     31
+#define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE    32
+#define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE  33
 
 /* deprecated names */
 #define SQLITE_GET_LOCKPROXYFILE      SQLITE_FCNTL_GET_LOCKPROXYFILE
@@ -2642,6 +2688,16 @@ struct sqlite3_mem_methods {
 ** routines with a wrapper that simulations memory allocation failure or
 ** tracks memory usage, for example. </dd>
 **
+** [[SQLITE_CONFIG_SMALL_MALLOC]] <dt>SQLITE_CONFIG_SMALL_MALLOC</dt>
+** <dd> ^The SQLITE_CONFIG_SMALL_MALLOC option takes single argument of
+** type int, interpreted as a boolean, which if true provides a hint to
+** SQLite that it should avoid large memory allocations if possible.
+** SQLite will run faster if it is free to make large memory allocations,
+** but some application might prefer to run slower in exchange for
+** guarantees about memory fragmentation that are possible if large
+** allocations are avoided.  This hint is normally off.
+** </dd>
+**
 ** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
 ** <dd> ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int,
 ** interpreted as a boolean, which enables or disables the collection of
@@ -2659,25 +2715,7 @@ struct sqlite3_mem_methods {
 ** </dd>
 **
 ** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
-** <dd> ^The SQLITE_CONFIG_SCRATCH option specifies a static memory buffer
-** that SQLite can use for scratch memory.  ^(There are three arguments
-** to SQLITE_CONFIG_SCRATCH:  A pointer an 8-byte
-** aligned memory buffer from which the scratch allocations will be
-** drawn, the size of each scratch allocation (sz),
-** and the maximum number of scratch allocations (N).)^
-** The first argument must be a pointer to an 8-byte aligned buffer
-** of at least sz*N bytes of memory.
-** ^SQLite will not use more than one scratch buffers per thread.
-** ^SQLite will never request a scratch buffer that is more than 6
-** times the database page size.
-** ^If SQLite needs needs additional
-** scratch memory beyond what is provided by this configuration option, then 
-** [sqlite3_malloc()] will be used to obtain the memory needed.<p>
-** ^When the application provides any amount of scratch memory using
-** SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary large
-** [sqlite3_malloc|heap allocations].
-** This can help [Robson proof|prevent memory allocation failures] due to heap
-** fragmentation in low-memory embedded systems.
+** <dd> The SQLITE_CONFIG_SCRATCH option is no longer used.
 ** </dd>
 **
 ** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
@@ -2713,8 +2751,7 @@ struct sqlite3_mem_methods {
 ** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
 ** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer 
 ** that SQLite will use for all of its dynamic memory allocation needs
-** beyond those provided for by [SQLITE_CONFIG_SCRATCH] and
-** [SQLITE_CONFIG_PAGECACHE].
+** beyond those provided for by [SQLITE_CONFIG_PAGECACHE].
 ** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
 ** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns
 ** [SQLITE_ERROR] if invoked otherwise.
@@ -2907,7 +2944,7 @@ struct sqlite3_mem_methods {
 #define SQLITE_CONFIG_SERIALIZED    3  /* nil */
 #define SQLITE_CONFIG_MALLOC        4  /* sqlite3_mem_methods* */
 #define SQLITE_CONFIG_GETMALLOC     5  /* sqlite3_mem_methods* */
-#define SQLITE_CONFIG_SCRATCH       6  /* void*, int sz, int N */
+#define SQLITE_CONFIG_SCRATCH       6  /* No longer used */
 #define SQLITE_CONFIG_PAGECACHE     7  /* void*, int sz, int N */
 #define SQLITE_CONFIG_HEAP          8  /* void*, int nByte, int min */
 #define SQLITE_CONFIG_MEMSTATUS     9  /* boolean */
@@ -2928,6 +2965,7 @@ struct sqlite3_mem_methods {
 #define SQLITE_CONFIG_PCACHE_HDRSZ        24  /* int *psz */
 #define SQLITE_CONFIG_PMASZ               25  /* unsigned int szPma */
 #define SQLITE_CONFIG_STMTJRNL_SPILL      26  /* int nByte */
+#define SQLITE_CONFIG_SMALL_MALLOC        27  /* boolean */
 
 /*
 ** CAPI3REF: Database Connection Configuration Options
@@ -4132,10 +4170,10 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
 ** ^If [URI filename] interpretation is enabled, and the filename argument
 ** begins with "file:", then the filename is interpreted as a URI. ^URI
 ** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is
-** set in the fourth argument to sqlite3_open_v2(), or if it has
+** set in the third argument to sqlite3_open_v2(), or if it has
 ** been enabled globally using the [SQLITE_CONFIG_URI] option with the
 ** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option.
-** As of SQLite version 3.7.7, URI filename interpretation is turned off
+** URI filename interpretation is turned off
 ** by default, but future releases of SQLite might enable URI filename
 ** interpretation by default.  See "[URI filenames]" for additional
 ** information.
@@ -4809,8 +4847,9 @@ SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*);
 ** implementation of [application-defined SQL functions] are protected.
 ** ^The sqlite3_value object returned by
 ** [sqlite3_column_value()] is unprotected.
-** Unprotected sqlite3_value objects may only be used with
-** [sqlite3_result_value()] and [sqlite3_bind_value()].
+** Unprotected sqlite3_value objects may only be used as arguments
+** to [sqlite3_result_value()], [sqlite3_bind_value()], and
+** [sqlite3_value_dup()].
 ** The [sqlite3_value_blob | sqlite3_value_type()] family of
 ** interfaces require protected sqlite3_value objects.
 */
@@ -5232,7 +5271,7 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
 ** other than [SQLITE_ROW] before any subsequent invocation of
 ** sqlite3_step().  Failure to reset the prepared statement using 
 ** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from
-** sqlite3_step().  But after [version 3.6.23.1] ([dateof:3.6.23.1]),
+** sqlite3_step().  But after [version 3.6.23.1] ([dateof:3.6.23.1],
 ** sqlite3_step() began
 ** calling [sqlite3_reset()] automatically in this circumstance rather
 ** than returning [SQLITE_MISUSE].  This is not considered a compatibility
@@ -7250,15 +7289,20 @@ struct sqlite3_index_info {
 ** an operator that is part of a constraint term in the wHERE clause of
 ** a query that uses a [virtual table].
 */
-#define SQLITE_INDEX_CONSTRAINT_EQ      2
-#define SQLITE_INDEX_CONSTRAINT_GT      4
-#define SQLITE_INDEX_CONSTRAINT_LE      8
-#define SQLITE_INDEX_CONSTRAINT_LT     16
-#define SQLITE_INDEX_CONSTRAINT_GE     32
-#define SQLITE_INDEX_CONSTRAINT_MATCH  64
-#define SQLITE_INDEX_CONSTRAINT_LIKE   65
-#define SQLITE_INDEX_CONSTRAINT_GLOB   66
-#define SQLITE_INDEX_CONSTRAINT_REGEXP 67
+#define SQLITE_INDEX_CONSTRAINT_EQ         2
+#define SQLITE_INDEX_CONSTRAINT_GT         4
+#define SQLITE_INDEX_CONSTRAINT_LE         8
+#define SQLITE_INDEX_CONSTRAINT_LT        16
+#define SQLITE_INDEX_CONSTRAINT_GE        32
+#define SQLITE_INDEX_CONSTRAINT_MATCH     64
+#define SQLITE_INDEX_CONSTRAINT_LIKE      65
+#define SQLITE_INDEX_CONSTRAINT_GLOB      66
+#define SQLITE_INDEX_CONSTRAINT_REGEXP    67
+#define SQLITE_INDEX_CONSTRAINT_NE        68
+#define SQLITE_INDEX_CONSTRAINT_ISNOT     69
+#define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70
+#define SQLITE_INDEX_CONSTRAINT_ISNULL    71
+#define SQLITE_INDEX_CONSTRAINT_IS        72
 
 /*
 ** CAPI3REF: Register A Virtual Table Implementation
@@ -8010,7 +8054,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
 #define SQLITE_TESTCTRL_RESERVE                 14
 #define SQLITE_TESTCTRL_OPTIMIZATIONS           15
 #define SQLITE_TESTCTRL_ISKEYWORD               16
-#define SQLITE_TESTCTRL_SCRATCHMALLOC           17
+#define SQLITE_TESTCTRL_SCRATCHMALLOC           17  /* NOT USED */
 #define SQLITE_TESTCTRL_LOCALTIME_FAULT         18
 #define SQLITE_TESTCTRL_EXPLAIN_STMT            19  /* NOT USED */
 #define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD    19
@@ -8069,8 +8113,7 @@ SQLITE_API int sqlite3_status64(
 ** <dd>This parameter is the current amount of memory checked out
 ** using [sqlite3_malloc()], either directly or indirectly.  The
 ** figure includes calls made to [sqlite3_malloc()] by the application
-** and internal memory usage by the SQLite library.  Scratch memory
-** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache
+** and internal memory usage by the SQLite library.  Auxiliary page-cache
 ** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in
 ** this parameter.  The amount returned is the sum of the allocation
 ** sizes as reported by the xSize method in [sqlite3_mem_methods].</dd>)^
@@ -8108,29 +8151,14 @@ SQLITE_API int sqlite3_status64(
 ** *pHighwater parameter to [sqlite3_status()] is of interest.  
 ** The value written into the *pCurrent parameter is undefined.</dd>)^
 **
-** [[SQLITE_STATUS_SCRATCH_USED]] ^(<dt>SQLITE_STATUS_SCRATCH_USED</dt>
-** <dd>This parameter returns the number of allocations used out of the
-** [scratch memory allocator] configured using
-** [SQLITE_CONFIG_SCRATCH].  The value returned is in allocations, not
-** in bytes.  Since a single thread may only have one scratch allocation
-** outstanding at time, this parameter also reports the number of threads
-** using scratch memory at the same time.</dd>)^
+** [[SQLITE_STATUS_SCRATCH_USED]] <dt>SQLITE_STATUS_SCRATCH_USED</dt>
+** <dd>No longer used.</dd>
 **
 ** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(<dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
-** <dd>This parameter returns the number of bytes of scratch memory
-** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH]
-** buffer and where forced to overflow to [sqlite3_malloc()].  The values
-** returned include overflows because the requested allocation was too
-** larger (that is, because the requested allocation was larger than the
-** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer
-** slots were available.
-** </dd>)^
-**
-** [[SQLITE_STATUS_SCRATCH_SIZE]] ^(<dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
-** <dd>This parameter records the largest memory allocation request
-** handed to [scratch memory allocator].  Only the value returned in the
-** *pHighwater parameter to [sqlite3_status()] is of interest.  
-** The value written into the *pCurrent parameter is undefined.</dd>)^
+** <dd>No longer used.</dd>
+**
+** [[SQLITE_STATUS_SCRATCH_SIZE]] <dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
+** <dd>No longer used.</dd>
 **
 ** [[SQLITE_STATUS_PARSER_STACK]] ^(<dt>SQLITE_STATUS_PARSER_STACK</dt>
 ** <dd>The *pHighwater parameter records the deepest parser stack. 
@@ -8143,12 +8171,12 @@ SQLITE_API int sqlite3_status64(
 #define SQLITE_STATUS_MEMORY_USED          0
 #define SQLITE_STATUS_PAGECACHE_USED       1
 #define SQLITE_STATUS_PAGECACHE_OVERFLOW   2
-#define SQLITE_STATUS_SCRATCH_USED         3
-#define SQLITE_STATUS_SCRATCH_OVERFLOW     4
+#define SQLITE_STATUS_SCRATCH_USED         3  /* NOT USED */
+#define SQLITE_STATUS_SCRATCH_OVERFLOW     4  /* NOT USED */
 #define SQLITE_STATUS_MALLOC_SIZE          5
 #define SQLITE_STATUS_PARSER_STACK         6
 #define SQLITE_STATUS_PAGECACHE_SIZE       7
-#define SQLITE_STATUS_SCRATCH_SIZE         8
+#define SQLITE_STATUS_SCRATCH_SIZE         8  /* NOT USED */
 #define SQLITE_STATUS_MALLOC_COUNT         9
 
 /*
@@ -10245,8 +10273,8 @@ SQLITE_API int sqlite3session_diff(
 */
 SQLITE_API int sqlite3session_patchset(
   sqlite3_session *pSession,      /* Session object */
-  int *pnPatchset,                /* OUT: Size of buffer at *ppChangeset */
-  void **ppPatchset               /* OUT: Buffer containing changeset */
+  int *pnPatchset,                /* OUT: Size of buffer at *ppPatchset */
+  void **ppPatchset               /* OUT: Buffer containing patchset */
 );
 
 /*
@@ -11013,12 +11041,12 @@ SQLITE_API int sqlite3changeset_apply(
 **
 ** <table border=1 style="margin-left:8ex;margin-right:8ex">
 **   <tr><th>Streaming function<th>Non-streaming equivalent</th>
-**   <tr><td>sqlite3changeset_apply_str<td>[sqlite3changeset_apply] 
-**   <tr><td>sqlite3changeset_concat_str<td>[sqlite3changeset_concat] 
-**   <tr><td>sqlite3changeset_invert_str<td>[sqlite3changeset_invert] 
-**   <tr><td>sqlite3changeset_start_str<td>[sqlite3changeset_start] 
-**   <tr><td>sqlite3session_changeset_str<td>[sqlite3session_changeset] 
-**   <tr><td>sqlite3session_patchset_str<td>[sqlite3session_patchset] 
+**   <tr><td>sqlite3changeset_apply_strm<td>[sqlite3changeset_apply] 
+**   <tr><td>sqlite3changeset_concat_strm<td>[sqlite3changeset_concat] 
+**   <tr><td>sqlite3changeset_invert_strm<td>[sqlite3changeset_invert] 
+**   <tr><td>sqlite3changeset_start_strm<td>[sqlite3changeset_start] 
+**   <tr><td>sqlite3session_changeset_strm<td>[sqlite3session_changeset] 
+**   <tr><td>sqlite3session_patchset_strm<td>[sqlite3session_patchset] 
 ** </table>
 **
 ** Non-streaming functions that accept changesets (or patchsets) as input
@@ -12246,6 +12274,21 @@ SQLITE_PRIVATE   void sqlite3Coverage(int);
 #endif
 
 /*
+** Some conditionals are optimizations only.  In other words, if the
+** conditionals are replaced with a constant 1 (true) or 0 (false) then
+** the correct answer is still obtained, though perhaps not as quickly.
+**
+** The following macros mark these optimizations conditionals.
+*/
+#if defined(SQLITE_MUTATION_TEST)
+# define OK_IF_ALWAYS_TRUE(X)  (1)
+# define OK_IF_ALWAYS_FALSE(X) (0)
+#else
+# define OK_IF_ALWAYS_TRUE(X)  (X)
+# define OK_IF_ALWAYS_FALSE(X) (X)
+#endif
+
+/*
 ** Some malloc failures are only possible if SQLITE_TEST_REALLOC_STRESS is
 ** defined.  We need to defend against those failures when testing with
 ** SQLITE_TEST_REALLOC_STRESS, but we don't want the unreachable branches
@@ -12439,63 +12482,63 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
 #define TK_AS                              24
 #define TK_WITHOUT                         25
 #define TK_COMMA                           26
-#define TK_ID                              27
-#define TK_ABORT                           28
-#define TK_ACTION                          29
-#define TK_AFTER                           30
-#define TK_ANALYZE                         31
-#define TK_ASC                             32
-#define TK_ATTACH                          33
-#define TK_BEFORE                          34
-#define TK_BY                              35
-#define TK_CASCADE                         36
-#define TK_CAST                            37
-#define TK_COLUMNKW                        38
-#define TK_CONFLICT                        39
-#define TK_DATABASE                        40
-#define TK_DESC                            41
-#define TK_DETACH                          42
-#define TK_EACH                            43
-#define TK_FAIL                            44
-#define TK_FOR                             45
-#define TK_IGNORE                          46
-#define TK_INITIALLY                       47
-#define TK_INSTEAD                         48
-#define TK_LIKE_KW                         49
-#define TK_MATCH                           50
-#define TK_NO                              51
-#define TK_KEY                             52
-#define TK_OF                              53
-#define TK_OFFSET                          54
-#define TK_PRAGMA                          55
-#define TK_RAISE                           56
-#define TK_RECURSIVE                       57
-#define TK_REPLACE                         58
-#define TK_RESTRICT                        59
-#define TK_ROW                             60
-#define TK_TRIGGER                         61
-#define TK_VACUUM                          62
-#define TK_VIEW                            63
-#define TK_VIRTUAL                         64
-#define TK_WITH                            65
-#define TK_REINDEX                         66
-#define TK_RENAME                          67
-#define TK_CTIME_KW                        68
-#define TK_ANY                             69
-#define TK_OR                              70
-#define TK_AND                             71
-#define TK_IS                              72
-#define TK_BETWEEN                         73
-#define TK_IN                              74
-#define TK_ISNULL                          75
-#define TK_NOTNULL                         76
-#define TK_NE                              77
-#define TK_EQ                              78
-#define TK_GT                              79
-#define TK_LE                              80
-#define TK_LT                              81
-#define TK_GE                              82
-#define TK_ESCAPE                          83
+#define TK_ABORT                           27
+#define TK_ACTION                          28
+#define TK_AFTER                           29
+#define TK_ANALYZE                         30
+#define TK_ASC                             31
+#define TK_ATTACH                          32
+#define TK_BEFORE                          33
+#define TK_BY                              34
+#define TK_CASCADE                         35
+#define TK_CAST                            36
+#define TK_CONFLICT                        37
+#define TK_DATABASE                        38
+#define TK_DESC                            39
+#define TK_DETACH                          40
+#define TK_EACH                            41
+#define TK_FAIL                            42
+#define TK_OR                              43
+#define TK_AND                             44
+#define TK_IS                              45
+#define TK_MATCH                           46
+#define TK_LIKE_KW                         47
+#define TK_BETWEEN                         48
+#define TK_IN                              49
+#define TK_ISNULL                          50
+#define TK_NOTNULL                         51
+#define TK_NE                              52
+#define TK_EQ                              53
+#define TK_GT                              54
+#define TK_LE                              55
+#define TK_LT                              56
+#define TK_GE                              57
+#define TK_ESCAPE                          58
+#define TK_ID                              59
+#define TK_COLUMNKW                        60
+#define TK_FOR                             61
+#define TK_IGNORE                          62
+#define TK_INITIALLY                       63
+#define TK_INSTEAD                         64
+#define TK_NO                              65
+#define TK_KEY                             66
+#define TK_OF                              67
+#define TK_OFFSET                          68
+#define TK_PRAGMA                          69
+#define TK_RAISE                           70
+#define TK_RECURSIVE                       71
+#define TK_REPLACE                         72
+#define TK_RESTRICT                        73
+#define TK_ROW                             74
+#define TK_TRIGGER                         75
+#define TK_VACUUM                          76
+#define TK_VIEW                            77
+#define TK_VIRTUAL                         78
+#define TK_WITH                            79
+#define TK_REINDEX                         80
+#define TK_RENAME                          81
+#define TK_CTIME_KW                        82
+#define TK_ANY                             83
 #define TK_BITAND                          84
 #define TK_BITOR                           85
 #define TK_LSHIFT                          86
@@ -12555,28 +12598,23 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
 #define TK_INDEX                          140
 #define TK_ALTER                          141
 #define TK_ADD                            142
-#define TK_TO_TEXT                        143
-#define TK_TO_BLOB                        144
-#define TK_TO_NUMERIC                     145
-#define TK_TO_INT                         146
-#define TK_TO_REAL                        147
-#define TK_ISNOT                          148
-#define TK_END_OF_FILE                    149
-#define TK_UNCLOSED_STRING                150
-#define TK_FUNCTION                       151
-#define TK_COLUMN                         152
-#define TK_AGG_FUNCTION                   153
-#define TK_AGG_COLUMN                     154
-#define TK_UMINUS                         155
-#define TK_UPLUS                          156
-#define TK_REGISTER                       157
-#define TK_VECTOR                         158
-#define TK_SELECT_COLUMN                  159
-#define TK_IF_NULL_ROW                    160
-#define TK_ASTERISK                       161
-#define TK_SPAN                           162
-#define TK_SPACE                          163
-#define TK_ILLEGAL                        164
+#define TK_ISNOT                          143
+#define TK_FUNCTION                       144
+#define TK_COLUMN                         145
+#define TK_AGG_FUNCTION                   146
+#define TK_AGG_COLUMN                     147
+#define TK_UMINUS                         148
+#define TK_UPLUS                          149
+#define TK_REGISTER                       150
+#define TK_VECTOR                         151
+#define TK_SELECT_COLUMN                  152
+#define TK_IF_NULL_ROW                    153
+#define TK_ASTERISK                       154
+#define TK_SPAN                           155
+#define TK_END_OF_FILE                    156
+#define TK_UNCLOSED_STRING                157
+#define TK_SPACE                          158
+#define TK_ILLEGAL                        159
 
 /* The token codes above must all fit in 8 bits */
 #define TKFLG_MASK           0xff  
@@ -12697,6 +12735,15 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
 #endif
 
 /*
+** The compile-time options SQLITE_MMAP_READWRITE and 
+** SQLITE_ENABLE_BATCH_ATOMIC_WRITE are not compatible with one another.
+** You must choose one or the other (or neither) but not both.
+*/
+#if defined(SQLITE_MMAP_READWRITE) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
+#error Cannot use both SQLITE_MMAP_READWRITE and SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+#endif
+
+/*
 ** GCC does not define the offsetof() macro so we'll have to do it
 ** ourselves.
 */
@@ -12995,7 +13042,7 @@ typedef INT16_TYPE LogEst;
 ** SELECTTRACE_ENABLED will be either 1 or 0 depending on whether or not
 ** the Select query generator tracing logic is turned on.
 */
-#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_SELECTTRACE)
+#if defined(SQLITE_ENABLE_SELECTTRACE)
 # define SELECTTRACE_ENABLED 1
 #else
 # define SELECTTRACE_ENABLED 0
@@ -13399,6 +13446,7 @@ SQLITE_PRIVATE int sqlite3BtreeCursor(
   struct KeyInfo*,                     /* First argument to compare function */
   BtCursor *pCursor                    /* Space to write cursor structure */
 );
+SQLITE_PRIVATE BtCursor *sqlite3BtreeFakeValidCursor(void);
 SQLITE_PRIVATE int sqlite3BtreeCursorSize(void);
 SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor*);
 SQLITE_PRIVATE void sqlite3BtreeCursorHintFlags(BtCursor*, unsigned);
@@ -13717,87 +13765,87 @@ typedef struct VdbeOpList VdbeOpList;
 #define OP_Savepoint       0
 #define OP_AutoCommit      1
 #define OP_Transaction     2
-#define OP_SorterNext      3
-#define OP_PrevIfOpen      4
-#define OP_NextIfOpen      5
-#define OP_Prev            6
-#define OP_Next            7
+#define OP_SorterNext      3 /* jump                                       */
+#define OP_PrevIfOpen      4 /* jump                                       */
+#define OP_NextIfOpen      5 /* jump                                       */
+#define OP_Prev            6 /* jump                                       */
+#define OP_Next            7 /* jump                                       */
 #define OP_Checkpoint      8
 #define OP_JournalMode     9
 #define OP_Vacuum         10
-#define OP_VFilter        11 /* synopsis: iplan=r[P3] zplan='P4'           */
+#define OP_VFilter        11 /* jump, synopsis: iplan=r[P3] zplan='P4'     */
 #define OP_VUpdate        12 /* synopsis: data=r[P3@P2]                    */
-#define OP_Goto           13
-#define OP_Gosub          14
-#define OP_InitCoroutine  15
-#define OP_Yield          16
-#define OP_MustBeInt      17
-#define OP_Jump           18
+#define OP_Goto           13 /* jump                                       */
+#define OP_Gosub          14 /* jump                                       */
+#define OP_InitCoroutine  15 /* jump                                       */
+#define OP_Yield          16 /* jump                                       */
+#define OP_MustBeInt      17 /* jump                                       */
+#define OP_Jump           18 /* jump                                       */
 #define OP_Not            19 /* same as TK_NOT, synopsis: r[P2]= !r[P1]    */
-#define OP_Once           20
-#define OP_If             21
-#define OP_IfNot          22
-#define OP_IfNullRow      23 /* synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */
-#define OP_SeekLT         24 /* synopsis: key=r[P3@P4]                     */
-#define OP_SeekLE         25 /* synopsis: key=r[P3@P4]                     */
-#define OP_SeekGE         26 /* synopsis: key=r[P3@P4]                     */
-#define OP_SeekGT         27 /* synopsis: key=r[P3@P4]                     */
-#define OP_NoConflict     28 /* synopsis: key=r[P3@P4]                     */
-#define OP_NotFound       29 /* synopsis: key=r[P3@P4]                     */
-#define OP_Found          30 /* synopsis: key=r[P3@P4]                     */
-#define OP_SeekRowid      31 /* synopsis: intkey=r[P3]                     */
-#define OP_NotExists      32 /* synopsis: intkey=r[P3]                     */
-#define OP_Last           33
-#define OP_IfSmaller      34
-#define OP_SorterSort     35
-#define OP_Sort           36
-#define OP_Rewind         37
-#define OP_IdxLE          38 /* synopsis: key=r[P3@P4]                     */
-#define OP_IdxGT          39 /* synopsis: key=r[P3@P4]                     */
-#define OP_IdxLT          40 /* synopsis: key=r[P3@P4]                     */
-#define OP_IdxGE          41 /* synopsis: key=r[P3@P4]                     */
-#define OP_RowSetRead     42 /* synopsis: r[P3]=rowset(P1)                 */
-#define OP_RowSetTest     43 /* synopsis: if r[P3] in rowset(P1) goto P2   */
-#define OP_Program        44
-#define OP_FkIfZero       45 /* synopsis: if fkctr[P1]==0 goto P2          */
-#define OP_IfPos          46 /* synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */
-#define OP_IfNotZero      47 /* synopsis: if r[P1]!=0 then r[P1]--, goto P2 */
-#define OP_DecrJumpZero   48 /* synopsis: if (--r[P1])==0 goto P2          */
-#define OP_IncrVacuum     49
-#define OP_VNext          50
-#define OP_Init           51 /* synopsis: Start at P2                      */
-#define OP_Return         52
-#define OP_EndCoroutine   53
-#define OP_HaltIfNull     54 /* synopsis: if r[P3]=null halt               */
-#define OP_Halt           55
-#define OP_Integer        56 /* synopsis: r[P2]=P1                         */
-#define OP_Int64          57 /* synopsis: r[P2]=P4                         */
-#define OP_String         58 /* synopsis: r[P2]='P4' (len=P1)              */
-#define OP_Null           59 /* synopsis: r[P2..P3]=NULL                   */
-#define OP_SoftNull       60 /* synopsis: r[P1]=NULL                       */
-#define OP_Blob           61 /* synopsis: r[P2]=P4 (len=P1)                */
-#define OP_Variable       62 /* synopsis: r[P2]=parameter(P1,P4)           */
-#define OP_Move           63 /* synopsis: r[P2@P3]=r[P1@P3]                */
-#define OP_Copy           64 /* synopsis: r[P2@P3+1]=r[P1@P3+1]            */
-#define OP_SCopy          65 /* synopsis: r[P2]=r[P1]                      */
-#define OP_IntCopy        66 /* synopsis: r[P2]=r[P1]                      */
-#define OP_ResultRow      67 /* synopsis: output=r[P1@P2]                  */
-#define OP_CollSeq        68
-#define OP_AddImm         69 /* synopsis: r[P1]=r[P1]+P2                   */
-#define OP_Or             70 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */
-#define OP_And            71 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */
-#define OP_RealAffinity   72
-#define OP_Cast           73 /* synopsis: affinity(r[P1])                  */
-#define OP_Permutation    74
-#define OP_IsNull         75 /* same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */
-#define OP_NotNull        76 /* same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */
-#define OP_Ne             77 /* same as TK_NE, synopsis: IF r[P3]!=r[P1]   */
-#define OP_Eq             78 /* same as TK_EQ, synopsis: IF r[P3]==r[P1]   */
-#define OP_Gt             79 /* same as TK_GT, synopsis: IF r[P3]>r[P1]    */
-#define OP_Le             80 /* same as TK_LE, synopsis: IF r[P3]<=r[P1]   */
-#define OP_Lt             81 /* same as TK_LT, synopsis: IF r[P3]<r[P1]    */
-#define OP_Ge             82 /* same as TK_GE, synopsis: IF r[P3]>=r[P1]   */
-#define OP_ElseNotEq      83 /* same as TK_ESCAPE                          */
+#define OP_Once           20 /* jump                                       */
+#define OP_If             21 /* jump                                       */
+#define OP_IfNot          22 /* jump                                       */
+#define OP_IfNullRow      23 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */
+#define OP_SeekLT         24 /* jump, synopsis: key=r[P3@P4]               */
+#define OP_SeekLE         25 /* jump, synopsis: key=r[P3@P4]               */
+#define OP_SeekGE         26 /* jump, synopsis: key=r[P3@P4]               */
+#define OP_SeekGT         27 /* jump, synopsis: key=r[P3@P4]               */
+#define OP_NoConflict     28 /* jump, synopsis: key=r[P3@P4]               */
+#define OP_NotFound       29 /* jump, synopsis: key=r[P3@P4]               */
+#define OP_Found          30 /* jump, synopsis: key=r[P3@P4]               */
+#define OP_SeekRowid      31 /* jump, synopsis: intkey=r[P3]               */
+#define OP_NotExists      32 /* jump, synopsis: intkey=r[P3]               */
+#define OP_Last           33 /* jump                                       */
+#define OP_IfSmaller      34 /* jump                                       */
+#define OP_SorterSort     35 /* jump                                       */
+#define OP_Sort           36 /* jump                                       */
+#define OP_Rewind         37 /* jump                                       */
+#define OP_IdxLE          38 /* jump, synopsis: key=r[P3@P4]               */
+#define OP_IdxGT          39 /* jump, synopsis: key=r[P3@P4]               */
+#define OP_IdxLT          40 /* jump, synopsis: key=r[P3@P4]               */
+#define OP_IdxGE          41 /* jump, synopsis: key=r[P3@P4]               */
+#define OP_RowSetRead     42 /* jump, synopsis: r[P3]=rowset(P1)           */
+#define OP_Or             43 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */
+#define OP_And            44 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */
+#define OP_RowSetTest     45 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */
+#define OP_Program        46 /* jump                                       */
+#define OP_FkIfZero       47 /* jump, synopsis: if fkctr[P1]==0 goto P2    */
+#define OP_IfPos          48 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */
+#define OP_IfNotZero      49 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */
+#define OP_IsNull         50 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */
+#define OP_NotNull        51 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */
+#define OP_Ne             52 /* jump, same as TK_NE, synopsis: IF r[P3]!=r[P1] */
+#define OP_Eq             53 /* jump, same as TK_EQ, synopsis: IF r[P3]==r[P1] */
+#define OP_Gt             54 /* jump, same as TK_GT, synopsis: IF r[P3]>r[P1] */
+#define OP_Le             55 /* jump, same as TK_LE, synopsis: IF r[P3]<=r[P1] */
+#define OP_Lt             56 /* jump, same as TK_LT, synopsis: IF r[P3]<r[P1] */
+#define OP_Ge             57 /* jump, same as TK_GE, synopsis: IF r[P3]>=r[P1] */
+#define OP_ElseNotEq      58 /* jump, same as TK_ESCAPE                    */
+#define OP_DecrJumpZero   59 /* jump, synopsis: if (--r[P1])==0 goto P2    */
+#define OP_IncrVacuum     60 /* jump                                       */
+#define OP_VNext          61 /* jump                                       */
+#define OP_Init           62 /* jump, synopsis: Start at P2                */
+#define OP_Return         63
+#define OP_EndCoroutine   64
+#define OP_HaltIfNull     65 /* synopsis: if r[P3]=null halt               */
+#define OP_Halt           66
+#define OP_Integer        67 /* synopsis: r[P2]=P1                         */
+#define OP_Int64          68 /* synopsis: r[P2]=P4                         */
+#define OP_String         69 /* synopsis: r[P2]='P4' (len=P1)              */
+#define OP_Null           70 /* synopsis: r[P2..P3]=NULL                   */
+#define OP_SoftNull       71 /* synopsis: r[P1]=NULL                       */
+#define OP_Blob           72 /* synopsis: r[P2]=P4 (len=P1)                */
+#define OP_Variable       73 /* synopsis: r[P2]=parameter(P1,P4)           */
+#define OP_Move           74 /* synopsis: r[P2@P3]=r[P1@P3]                */
+#define OP_Copy           75 /* synopsis: r[P2@P3+1]=r[P1@P3+1]            */
+#define OP_SCopy          76 /* synopsis: r[P2]=r[P1]                      */
+#define OP_IntCopy        77 /* synopsis: r[P2]=r[P1]                      */
+#define OP_ResultRow      78 /* synopsis: output=r[P1@P2]                  */
+#define OP_CollSeq        79
+#define OP_AddImm         80 /* synopsis: r[P1]=r[P1]+P2                   */
+#define OP_RealAffinity   81
+#define OP_Cast           82 /* synopsis: affinity(r[P1])                  */
+#define OP_Permutation    83
 #define OP_BitAnd         84 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */
 #define OP_BitOr          85 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */
 #define OP_ShiftLeft      86 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<<r[P1] */
@@ -13839,17 +13887,17 @@ typedef struct VdbeOpList VdbeOpList;
 #define OP_RowData       122 /* synopsis: r[P2]=data                       */
 #define OP_Rowid         123 /* synopsis: r[P2]=rowid                      */
 #define OP_NullRow       124
-#define OP_SorterInsert  125 /* synopsis: key=r[P2]                        */
-#define OP_IdxInsert     126 /* synopsis: key=r[P2]                        */
-#define OP_IdxDelete     127 /* synopsis: key=r[P2@P3]                     */
-#define OP_DeferredSeek  128 /* synopsis: Move P3 to P1.rowid if needed    */
-#define OP_IdxRowid      129 /* synopsis: r[P2]=rowid                      */
-#define OP_Destroy       130
-#define OP_Clear         131
+#define OP_SeekEnd       125
+#define OP_SorterInsert  126 /* synopsis: key=r[P2]                        */
+#define OP_IdxInsert     127 /* synopsis: key=r[P2]                        */
+#define OP_IdxDelete     128 /* synopsis: key=r[P2@P3]                     */
+#define OP_DeferredSeek  129 /* synopsis: Move P3 to P1.rowid if needed    */
+#define OP_IdxRowid      130 /* synopsis: r[P2]=rowid                      */
+#define OP_Destroy       131
 #define OP_Real          132 /* same as TK_FLOAT, synopsis: r[P2]=P4       */
-#define OP_ResetSorter   133
-#define OP_CreateIndex   134 /* synopsis: r[P2]=root iDb=P1                */
-#define OP_CreateTable   135 /* synopsis: r[P2]=root iDb=P1                */
+#define OP_Clear         133
+#define OP_ResetSorter   134
+#define OP_CreateBtree   135 /* synopsis: r[P2]=root iDb=P1 flags=P3       */
 #define OP_SqlExec       136
 #define OP_ParseSchema   137
 #define OP_LoadAnalysis  138
@@ -13899,18 +13947,18 @@ typedef struct VdbeOpList VdbeOpList;
 /*  16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x03, 0x03, 0x01,\
 /*  24 */ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,\
 /*  32 */ 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\
-/*  40 */ 0x01, 0x01, 0x23, 0x0b, 0x01, 0x01, 0x03, 0x03,\
-/*  48 */ 0x03, 0x01, 0x01, 0x01, 0x02, 0x02, 0x08, 0x00,\
-/*  56 */ 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x00,\
-/*  64 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x02, 0x26, 0x26,\
-/*  72 */ 0x02, 0x02, 0x00, 0x03, 0x03, 0x0b, 0x0b, 0x0b,\
-/*  80 */ 0x0b, 0x0b, 0x0b, 0x01, 0x26, 0x26, 0x26, 0x26,\
+/*  40 */ 0x01, 0x01, 0x23, 0x26, 0x26, 0x0b, 0x01, 0x01,\
+/*  48 */ 0x03, 0x03, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\
+/*  56 */ 0x0b, 0x0b, 0x01, 0x03, 0x01, 0x01, 0x01, 0x02,\
+/*  64 */ 0x02, 0x08, 0x00, 0x10, 0x10, 0x10, 0x10, 0x00,\
+/*  72 */ 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\
+/*  80 */ 0x02, 0x02, 0x02, 0x00, 0x26, 0x26, 0x26, 0x26,\
 /*  88 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x00, 0x12,\
 /*  96 */ 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\
 /* 104 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
 /* 112 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,\
-/* 120 */ 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x04, 0x00,\
-/* 128 */ 0x00, 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10,\
+/* 120 */ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x04, 0x04,\
+/* 128 */ 0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10,\
 /* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,\
 /* 144 */ 0x10, 0x00, 0x04, 0x1a, 0x00, 0x00, 0x00, 0x00,\
 /* 152 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,\
@@ -13923,7 +13971,7 @@ typedef struct VdbeOpList VdbeOpList;
 ** generated this include file strives to group all JUMP opcodes
 ** together near the beginning of the list.
 */
-#define SQLITE_MX_JUMP_OPCODE  83  /* Maximum JUMP opcode */
+#define SQLITE_MX_JUMP_OPCODE  62  /* Maximum JUMP opcode */
 
 /************** End of opcodes.h *********************************************/
 /************** Continuing where we left off in vdbe.h ***********************/
@@ -14241,6 +14289,7 @@ SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno);
 SQLITE_PRIVATE void sqlite3PagerRef(DbPage*);
 SQLITE_PRIVATE void sqlite3PagerUnref(DbPage*);
 SQLITE_PRIVATE void sqlite3PagerUnrefNotNull(DbPage*);
+SQLITE_PRIVATE void sqlite3PagerUnrefPageOne(DbPage*);
 
 /* Operations on page references. */
 SQLITE_PRIVATE int sqlite3PagerWrite(DbPage*);
@@ -14377,6 +14426,8 @@ struct PgHdr {
   i16 nRef;                      /* Number of users of this page */
   PgHdr *pDirtyNext;             /* Next element in list of dirty pages */
   PgHdr *pDirtyPrev;             /* Previous element in list of dirty pages */
+                          /* NB: pDirtyNext and pDirtyPrev are undefined if the
+                          ** PgHdr object is not dirty */
 };
 
 /* Bit values for PgHdr.flags */
@@ -14758,10 +14809,12 @@ SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file*,int,void*);
 #define SQLITE_FCNTL_DB_UNCHANGED 0xca093fa0
 SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id);
 SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id);
+#ifndef SQLITE_OMIT_WAL
 SQLITE_PRIVATE int sqlite3OsShmMap(sqlite3_file *,int,int,int,void volatile **);
 SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int, int, int);
 SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id);
 SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int);
+#endif /* SQLITE_OMIT_WAL */
 SQLITE_PRIVATE int sqlite3OsFetch(sqlite3_file *id, i64, int, void **);
 SQLITE_PRIVATE int sqlite3OsUnfetch(sqlite3_file *, i64, void *);
 
@@ -14970,6 +15023,7 @@ struct Schema {
 #define DB_SchemaLoaded    0x0001  /* The schema has been loaded */
 #define DB_UnresetViews    0x0002  /* Some views have defined column names */
 #define DB_Empty           0x0004  /* The file is empty (length 0 bytes) */
+#define DB_ResetWanted     0x0008  /* Reset the schema when nSchemaLock==0 */
 
 /*
 ** The number of different kinds of things that can be limited
@@ -15001,9 +15055,9 @@ struct Lookaside {
   u32 bDisable;           /* Only operate the lookaside when zero */
   u16 sz;                 /* Size of each buffer in bytes */
   u8 bMalloced;           /* True if pStart obtained from sqlite3_malloc() */
-  int nOut;               /* Number of buffers currently checked out */
-  int mxOut;              /* Highwater mark for nOut */
-  int anStat[3];          /* 0: hits.  1: size misses.  2: full misses */
+  u32 nSlot;              /* Number of lookaside slots allocated */
+  u32 anStat[3];          /* 0: hits.  1: size misses.  2: full misses */
+  LookasideSlot *pInit;   /* List of buffers not previously used */
   LookasideSlot *pFree;   /* List of available buffers */
   void *pStart;           /* First byte of available memory space */
   void *pEnd;             /* First byte past end of available space */
@@ -15082,9 +15136,11 @@ struct sqlite3 {
   sqlite3_mutex *mutex;         /* Connection mutex */
   Db *aDb;                      /* All backends */
   int nDb;                      /* Number of backends currently in use */
-  int flags;                    /* Miscellaneous flags. See below */
+  u32 mDbFlags;                 /* flags recording internal state */
+  u32 flags;                    /* flags settable by pragmas. See below */
   i64 lastRowid;                /* ROWID of most recent insert (see above) */
   i64 szMmap;                   /* Default mmap_size setting */
+  u32 nSchemaLock;              /* Do not reset the schema when non-zero */
   unsigned int openFlags;       /* Flags passed to sqlite3_vfs.xOpen() */
   int errCode;                  /* Most recent error code (SQLITE_*) */
   int errMask;                  /* & result codes with this before returning */
@@ -15236,18 +15292,13 @@ struct sqlite3 {
 #define SQLITE_ForeignKeys    0x00004000  /* Enforce foreign key constraints  */
 #define SQLITE_AutoIndex      0x00008000  /* Enable automatic indexes */
 #define SQLITE_LoadExtension  0x00010000  /* Enable load_extension */
-#define SQLITE_EnableTrigger  0x00020000  /* True to enable triggers */
-#define SQLITE_DeferFKs       0x00040000  /* Defer all FK constraints */
-#define SQLITE_QueryOnly      0x00080000  /* Disable database changes */
-#define SQLITE_CellSizeCk     0x00100000  /* Check btree cell sizes on load */
-#define SQLITE_Fts3Tokenizer  0x00200000  /* Enable fts3_tokenizer(2) */
-#define SQLITE_EnableQPSG     0x00400000  /* Query Planner Stability Guarantee */
-/* The next four values are not used by PRAGMAs or by sqlite3_dbconfig() and
-** could be factored out into a separate bit vector of the sqlite3 object. */
-#define SQLITE_InternChanges  0x00800000  /* Uncommitted Hash table changes */
-#define SQLITE_LoadExtFunc    0x01000000  /* Enable load_extension() SQL func */
-#define SQLITE_PreferBuiltin  0x02000000  /* Preference to built-in funcs */
-#define SQLITE_Vacuum         0x04000000  /* Currently in a VACUUM */
+#define SQLITE_LoadExtFunc    0x00020000  /* Enable load_extension() SQL func */
+#define SQLITE_EnableTrigger  0x00040000  /* True to enable triggers */
+#define SQLITE_DeferFKs       0x00080000  /* Defer all FK constraints */
+#define SQLITE_QueryOnly      0x00100000  /* Disable database changes */
+#define SQLITE_CellSizeCk     0x00200000  /* Check btree cell sizes on load */
+#define SQLITE_Fts3Tokenizer  0x00400000  /* Enable fts3_tokenizer(2) */
+#define SQLITE_EnableQPSG     0x00800000  /* Query Planner Stability Guarantee */
 /* Flags used only if debugging */
 #ifdef SQLITE_DEBUG
 #define SQLITE_SqlTrace       0x08000000  /* Debug print SQL as it executes */
@@ -15257,6 +15308,12 @@ struct sqlite3 {
 #define SQLITE_VdbeEQP        0x80000000  /* Debug EXPLAIN QUERY PLAN */
 #endif
 
+/*
+** Allowed values for sqlite3.mDbFlags
+*/
+#define DBFLAG_SchemaChange   0x0001  /* Uncommitted Hash table changes */
+#define DBFLAG_PreferBuiltin  0x0002  /* Preference to built-in funcs */
+#define DBFLAG_Vacuum         0x0004  /* Currently in a VACUUM */
 
 /*
 ** Bits of the sqlite3.dbOptFlags field that are used by the
@@ -15267,16 +15324,15 @@ struct sqlite3 {
 #define SQLITE_ColumnCache    0x0002   /* Column cache */
 #define SQLITE_GroupByOrder   0x0004   /* GROUPBY cover of ORDERBY */
 #define SQLITE_FactorOutConst 0x0008   /* Constant factoring */
-/*                not used    0x0010   // Was: SQLITE_IdxRealAsInt */
-#define SQLITE_DistinctOpt    0x0020   /* DISTINCT using indexes */
-#define SQLITE_CoverIdxScan   0x0040   /* Covering index scans */
-#define SQLITE_OrderByIdxJoin 0x0080   /* ORDER BY of joins via index */
-#define SQLITE_SubqCoroutine  0x0100   /* Evaluate subqueries as coroutines */
-#define SQLITE_Transitive     0x0200   /* Transitive constraints */
-#define SQLITE_OmitNoopJoin   0x0400   /* Omit unused tables in joins */
+#define SQLITE_DistinctOpt    0x0010   /* DISTINCT using indexes */
+#define SQLITE_CoverIdxScan   0x0020   /* Covering index scans */
+#define SQLITE_OrderByIdxJoin 0x0040   /* ORDER BY of joins via index */
+#define SQLITE_Transitive     0x0080   /* Transitive constraints */
+#define SQLITE_OmitNoopJoin   0x0100   /* Omit unused tables in joins */
+#define SQLITE_CountOfView    0x0200   /* The count-of-view optimization */
+#define SQLITE_CursorHints    0x0400   /* Add OP_CursorHint opcodes */
 #define SQLITE_Stat34         0x0800   /* Use STAT3 or STAT4 data */
-#define SQLITE_CountOfView    0x1000   /* The count-of-view optimization */
-#define SQLITE_CursorHints    0x2000   /* Add OP_CursorHint opcodes */
+   /* TH3 expects the Stat34  ^^^^^^ value to be 0x0800.  Don't change it */
 #define SQLITE_AllOpts        0xffff   /* All optimizations */
 
 /*
@@ -15807,8 +15863,8 @@ struct FKey {
 struct KeyInfo {
   u32 nRef;           /* Number of references to this KeyInfo object */
   u8 enc;             /* Text encoding - one of the SQLITE_UTF* values */
-  u16 nField;         /* Number of key columns in the index */
-  u16 nXField;        /* Number of columns beyond the key columns */
+  u16 nKeyField;      /* Number of key columns in the index */
+  u16 nAllField;      /* Total columns, including key plus others */
   sqlite3 *db;        /* The database connection */
   u8 *aSortOrder;     /* Sort order for each column. */
   CollSeq *aColl[1];  /* Collating sequence for each term of the key */
@@ -15855,8 +15911,8 @@ struct UnpackedRecord {
   u16 nField;         /* Number of entries in apMem[] */
   i8 default_rc;      /* Comparison result if keys are equal */
   u8 errCode;         /* Error detected by xRecordCompare (CORRUPT or NOMEM) */
-  i8 r1;              /* Value to return if (lhs > rhs) */
-  i8 r2;              /* Value to return if (rhs < lhs) */
+  i8 r1;              /* Value to return if (lhs < rhs) */
+  i8 r2;              /* Value to return if (lhs > rhs) */
   u8 eqSeen;          /* True if an equality comparison has been seen */
 };
 
@@ -16140,7 +16196,8 @@ struct Expr {
                          ** TK_COLUMN: the value of p5 for OP_Column
                          ** TK_AGG_FUNCTION: nesting depth */
   AggInfo *pAggInfo;     /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */
-  Table *pTab;           /* Table for TK_COLUMN expressions. */
+  Table *pTab;           /* Table for TK_COLUMN expressions.  Can be NULL
+                         ** for a column of an index on an expression */
 };
 
 /*
@@ -16228,7 +16285,6 @@ struct Expr {
 */
 struct ExprList {
   int nExpr;             /* Number of expressions on the list */
-  int nAlloc;            /* Number of a[] slots allocated */
   struct ExprList_item { /* For each expression in the list */
     Expr *pExpr;            /* The parse tree for this expression */
     char *zName;            /* Token associated with this expression */
@@ -16757,7 +16813,7 @@ struct Parse {
   AutoincInfo *pAinc;  /* Information about AUTOINCREMENT counters */
   Parse *pToplevel;    /* Parse structure for main program (or NULL) */
   Table *pTriggerTab;  /* Table triggers are being coded for */
-  int addrCrTab;       /* Address of OP_CreateTable opcode on CREATE TABLE */
+  int addrCrTab;       /* Address of OP_CreateBtree opcode on CREATE TABLE */
   u32 nQueryLoop;      /* Est number of iterations of a query (10*log2(N)) */
   u32 oldmask;         /* Mask of old.* columns referenced */
   u32 newmask;         /* Mask of new.* columns referenced */
@@ -16986,11 +17042,10 @@ struct DbFixer {
 */
 struct StrAccum {
   sqlite3 *db;         /* Optional database for lookaside.  Can be NULL */
-  char *zBase;         /* A base allocation.  Not from malloc. */
   char *zText;         /* The string collected so far */
-  u32  nChar;          /* Length of the string so far */
   u32  nAlloc;         /* Amount of space allocated in zText */
   u32  mxAlloc;        /* Maximum allowed allocation.  0 for no malloc usage */
+  u32  nChar;          /* Length of the string so far */
   u8   accError;       /* STRACCUM_NOMEM or STRACCUM_TOOBIG */
   u8   printfFlags;    /* SQLITE_PRINTF flags below */
 };
@@ -17041,6 +17096,7 @@ struct Sqlite3Config {
   int bFullMutex;                   /* True to enable full mutexing */
   int bOpenUri;                     /* True to interpret filenames as URIs */
   int bUseCis;                      /* Use covering indices for full-scans */
+  int bSmallMalloc;                 /* Avoid large memory allocations if true */
   int mxStrlen;                     /* Maximum string length */
   int neverCorrupt;                 /* Database is always well-formed */
   int szLookaside;                  /* Default lookaside buffer size */
@@ -17054,9 +17110,6 @@ struct Sqlite3Config {
   int mnReq, mxReq;                 /* Min and max heap requests sizes */
   sqlite3_int64 szMmap;             /* mmap() space per open file */
   sqlite3_int64 mxMmap;             /* Maximum value for szMmap */
-  void *pScratch;                   /* Scratch memory */
-  int szScratch;                    /* Size of each scratch buffer */
-  int nScratch;                     /* Number of scratch buffers */
   void *pPage;                      /* Page cache memory */
   int szPage;                       /* Size of each page in pPage[] */
   int nPage;                        /* Number of pages in pPage[] */
@@ -17143,6 +17196,7 @@ SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker*, Select*);
 SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker*, Select*);
 SQLITE_PRIVATE int sqlite3ExprWalkNoop(Walker*, Expr*);
 SQLITE_PRIVATE int sqlite3SelectWalkNoop(Walker*, Select*);
+SQLITE_PRIVATE int sqlite3SelectWalkFail(Walker*, Select*);
 #ifdef SQLITE_DEBUG
 SQLITE_PRIVATE void sqlite3SelectWalkAssert2(Walker*, Select*);
 #endif
@@ -17295,8 +17349,6 @@ SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*);
 SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3*, void*);
 SQLITE_PRIVATE size_t sqlite3MallocSize(void*);
 SQLITE_PRIVATE size_t sqlite3DbMallocSize(sqlite3*, void*);
-SQLITE_PRIVATE void *sqlite3ScratchMalloc(size_t);
-SQLITE_PRIVATE void sqlite3ScratchFree(void*);
 SQLITE_PRIVATE void *sqlite3PageMalloc(size_t);
 SQLITE_PRIVATE void sqlite3PageFree(void*);
 SQLITE_PRIVATE void sqlite3MemSetDefault(void);
@@ -17355,6 +17407,7 @@ SQLITE_PRIVATE size_t sqlite3StatusValue(int);
 SQLITE_PRIVATE void sqlite3StatusUp(int, size_t);
 SQLITE_PRIVATE void sqlite3StatusDown(int, size_t);
 SQLITE_PRIVATE void sqlite3StatusHighwater(int, size_t);
+SQLITE_PRIVATE int sqlite3LookasideUsed(sqlite3*,int*);
 
 /* Access to mutexes used by sqlite3_status() */
 SQLITE_PRIVATE sqlite3_mutex *sqlite3Pcache1Mutex(void);
@@ -17791,6 +17844,8 @@ SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse);
 SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int);
 SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName);
 SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr);
+SQLITE_PRIVATE CollSeq *sqlite3ExprNNCollSeq(Parse *pParse, Expr *pExpr);
+SQLITE_PRIVATE int sqlite3ExprCollSeqMatch(Parse*,Expr*,Expr*);
 SQLITE_PRIVATE Expr *sqlite3ExprAddCollateToken(Parse *pParse, Expr*, const Token*, int);
 SQLITE_PRIVATE Expr *sqlite3ExprAddCollateString(Parse*,Expr*,const char*);
 SQLITE_PRIVATE Expr *sqlite3ExprSkipCollate(Expr*);
@@ -18074,7 +18129,8 @@ SQLITE_PRIVATE int sqlite3FindInIndex(Parse *, Expr *, u32, int*, int*);
 
 SQLITE_PRIVATE int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int);
 SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *);
-#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \
+ || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
 SQLITE_PRIVATE   int sqlite3JournalCreate(sqlite3_file *);
 #endif
 
@@ -18160,8 +18216,7 @@ SQLITE_PRIVATE   int sqlite3MemdebugNoType(void*,u8);
 #endif
 #define MEMTYPE_HEAP       0x01  /* General heap allocations */
 #define MEMTYPE_LOOKASIDE  0x02  /* Heap that might have been lookaside */
-#define MEMTYPE_SCRATCH    0x04  /* Scratch allocations */
-#define MEMTYPE_PCACHE     0x08  /* Page cache allocations */
+#define MEMTYPE_PCACHE     0x04  /* Page cache allocations */
 
 /*
 ** Threading interface
@@ -18171,6 +18226,9 @@ SQLITE_PRIVATE int sqlite3ThreadCreate(SQLiteThread**,void*(*)(void*),void*);
 SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread*, void**);
 #endif
 
+#if defined(SQLITE_ENABLE_DBPAGE_VTAB) || defined(SQLITE_TEST)
+SQLITE_PRIVATE int sqlite3DbpageRegister(sqlite3*);
+#endif
 #if defined(SQLITE_ENABLE_DBSTAT_VTAB) || defined(SQLITE_TEST)
 SQLITE_PRIVATE int sqlite3DbstatRegister(sqlite3*);
 #endif
@@ -18390,6 +18448,7 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = {
    SQLITE_THREADSAFE==1,      /* bFullMutex */
    SQLITE_USE_URI,            /* bOpenUri */
    SQLITE_ALLOW_COVERING_INDEX_SCAN,   /* bUseCis */
+   0,                         /* bSmallMalloc */
    0x7ffffffe,                /* mxStrlen */
    0,                         /* neverCorrupt */
    SQLITE_DEFAULT_LOOKASIDE,  /* szLookaside, nLookaside */
@@ -18402,9 +18461,6 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = {
    0, 0,                      /* mnHeap, mxHeap */
    SQLITE_DEFAULT_MMAP_SIZE,  /* szMmap */
    SQLITE_MAX_MMAP_SIZE,      /* mxMmap */
-   (void*)0,                  /* pScratch */
-   0,                         /* szScratch */
-   0,                         /* nScratch */
    (void*)0,                  /* pPage */
    0,                         /* szPage */
    SQLITE_DEFAULT_PCACHE_INITSZ, /* nPage */
@@ -18606,18 +18662,18 @@ struct VdbeCursor {
   u32 cacheStatus;        /* Cache is valid if this matches Vdbe.cacheCtr */
   int seekResult;         /* Result of previous sqlite3BtreeMoveto() or 0
                           ** if there have been no prior seeks on the cursor. */
-  /* NB: seekResult does not distinguish between "no seeks have ever occurred
-  ** on this cursor" and "the most recent seek was an exact match". */
+  /* seekResult does not distinguish between "no seeks have ever occurred
+  ** on this cursor" and "the most recent seek was an exact match".
+  ** For CURTYPE_PSEUDO, seekResult is the register holding the record */
 
   /* When a new VdbeCursor is allocated, only the fields above are zeroed.
   ** The fields that follow are uninitialized, and must be individually
   ** initialized prior to first use. */
   VdbeCursor *pAltCursor; /* Associated index cursor from which to read */
   union {
-    BtCursor *pCursor;          /* CURTYPE_BTREE.  Btree cursor */
-    sqlite3_vtab_cursor *pVCur; /* CURTYPE_VTAB.   Vtab cursor */
-    int pseudoTableReg;         /* CURTYPE_PSEUDO. Reg holding content. */
-    VdbeSorter *pSorter;        /* CURTYPE_SORTER. Sorter object */
+    BtCursor *pCursor;          /* CURTYPE_BTREE or _PSEUDO.  Btree cursor */
+    sqlite3_vtab_cursor *pVCur; /* CURTYPE_VTAB.              Vtab cursor */
+    VdbeSorter *pSorter;        /* CURTYPE_SORTER.            Sorter object */
   } uc;
   KeyInfo *pKeyInfo;      /* Info about index keys needed by index cursors */
   u32 iHdrOffset;         /* Offset to next unparsed byte of the header */
@@ -19166,7 +19222,6 @@ SQLITE_PRIVATE void sqlite3StatusHighwater(int op, size_t newValue){
                                            : sqlite3MallocMutex()) );
   assert( op==SQLITE_STATUS_MALLOC_SIZE
           || op==SQLITE_STATUS_PAGECACHE_SIZE
-          || op==SQLITE_STATUS_SCRATCH_SIZE
           || op==SQLITE_STATUS_PARSER_STACK );
   if( newValue>wsdStat.mxValue[op] ){
     wsdStat.mxValue[op] = newValue;
@@ -19216,6 +19271,28 @@ SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetF
 }
 
 /*
+** Return the number of LookasideSlot elements on the linked list
+*/
+static u32 countLookasideSlots(LookasideSlot *p){
+  u32 cnt = 0;
+  while( p ){
+    p = p->pNext;
+    cnt++;
+  }
+  return cnt;
+}
+
+/*
+** Count the number of slots of lookaside memory that are outstanding
+*/
+SQLITE_PRIVATE int sqlite3LookasideUsed(sqlite3 *db, int *pHighwater){
+  u32 nInit = countLookasideSlots(db->lookaside.pInit);
+  u32 nFree = countLookasideSlots(db->lookaside.pFree);
+  if( pHighwater ) *pHighwater = db->lookaside.nSlot - nInit;
+  return db->lookaside.nSlot - (nInit+nFree);
+}
+
+/*
 ** Query status information for a single database connection
 */
 SQLITE_API int sqlite3_db_status(
@@ -19234,10 +19311,15 @@ SQLITE_API int sqlite3_db_status(
   sqlite3_mutex_enter(db->mutex);
   switch( op ){
     case SQLITE_DBSTATUS_LOOKASIDE_USED: {
-      *pCurrent = db->lookaside.nOut;
-      *pHighwater = db->lookaside.mxOut;
+      *pCurrent = sqlite3LookasideUsed(db, pHighwater);
       if( resetFlag ){
-        db->lookaside.mxOut = db->lookaside.nOut;
+        LookasideSlot *p = db->lookaside.pFree;
+        if( p ){
+          while( p->pNext ) p = p->pNext;
+          p->pNext = db->lookaside.pInit;
+          db->lookaside.pInit = db->lookaside.pFree;
+          db->lookaside.pFree = 0;
+        }
       }
       break;
     }
@@ -20759,7 +20841,7 @@ SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file *id, i64 size){
 }
 SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file *id, int flags){
   DO_OS_MALLOC_TEST(id);
-  return id->pMethods->xSync(id, flags);
+  return flags ? id->pMethods->xSync(id, flags) : SQLITE_OK;
 }
 SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file *id, i64 *pSize){
   DO_OS_MALLOC_TEST(id);
@@ -20814,6 +20896,7 @@ SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id){
 SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id){
   return id->pMethods->xDeviceCharacteristics(id);
 }
+#ifndef SQLITE_OMIT_WAL
 SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int offset, int n, int flags){
   return id->pMethods->xShmLock(id, offset, n, flags);
 }
@@ -20833,6 +20916,7 @@ SQLITE_PRIVATE int sqlite3OsShmMap(
   DO_OS_MALLOC_TEST(id);
   return id->pMethods->xShmMap(id, iPage, pgsz, bExtend, pp);
 }
+#endif /* SQLITE_OMIT_WAL */
 
 #if SQLITE_MAX_MMAP_SIZE>0
 /* The real implementation of xFetch and xUnfetch */
@@ -24839,14 +24923,6 @@ SQLITE_API int sqlite3_release_memory(int n){
 }
 
 /*
-** An instance of the following object records the location of
-** each unused scratch buffer.
-*/
-typedef struct ScratchFreeslot {
-  struct ScratchFreeslot *pNext;   /* Next unused scratch buffer */
-} ScratchFreeslot;
-
-/*
 ** State information local to the memory allocation subsystem.
 */
 static SQLITE_WSD struct Mem0Global {
@@ -24854,21 +24930,11 @@ static SQLITE_WSD struct Mem0Global {
   size_t alarmThreshold;        /* The soft heap limit */
 
   /*
-  ** Pointers to the end of sqlite3GlobalConfig.pScratch memory
-  ** (so that a range test can be used to determine if an allocation
-  ** being freed came from pScratch) and a pointer to the list of
-  ** unused scratch allocations.
-  */
-  void *pScratchEnd;
-  ScratchFreeslot *pScratchFree;
-  u32 nScratchFree;
-
-  /*
   ** True if heap is nearly "full" where "full" is defined by the
   ** sqlite3_soft_heap_limit() setting.
   */
   int nearlyFull;
-} mem0 = { 0, 0, 0, 0, 0, 0 };
+} mem0 = { 0, 0, 0 };
 
 #define mem0 GLOBAL(struct Mem0Global, mem0)
 
@@ -24941,28 +25007,6 @@ SQLITE_PRIVATE int sqlite3MallocInit(void){
   }
   memset(&mem0, 0, sizeof(mem0));
   mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
-  if( sqlite3GlobalConfig.pScratch && sqlite3GlobalConfig.szScratch>=100
-      && sqlite3GlobalConfig.nScratch>0 ){
-    int i, n, sz;
-    ScratchFreeslot *pSlot;
-    sz = ROUNDDOWN8(sqlite3GlobalConfig.szScratch);
-    sqlite3GlobalConfig.szScratch = sz;
-    pSlot = (ScratchFreeslot*)sqlite3GlobalConfig.pScratch;
-    n = sqlite3GlobalConfig.nScratch;
-    mem0.pScratchFree = pSlot;
-    mem0.nScratchFree = n;
-    for(i=0; i<n-1; i++){
-      pSlot->pNext = (ScratchFreeslot*)(sz+(char*)pSlot);
-      pSlot = pSlot->pNext;
-    }
-    pSlot->pNext = 0;
-    mem0.pScratchEnd = (void*)&pSlot[1];
-  }else{
-    mem0.pScratchEnd = 0;
-    sqlite3GlobalConfig.pScratch = 0;
-    sqlite3GlobalConfig.szScratch = 0;
-    sqlite3GlobalConfig.nScratch = 0;
-  }
   if( sqlite3GlobalConfig.pPage==0 || sqlite3GlobalConfig.szPage<512
       || sqlite3GlobalConfig.nPage<=0 ){
     sqlite3GlobalConfig.pPage = 0;
@@ -25124,105 +25168,6 @@ SQLITE_API void *sqlite3_malloc64(sqlite3_uint64 n){
 #define sqlite3_malloc64(x) sqlite3Malloc(x)
 
 /*
-** Each thread may only have a single outstanding allocation from
-** xScratchMalloc().  We verify this constraint in the single-threaded
-** case by setting scratchAllocOut to 1 when an allocation
-** is outstanding clearing it when the allocation is freed.
-*/
-#if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
-static int scratchAllocOut = 0;
-#endif
-
-
-/*
-** Allocate memory that is to be used and released right away.
-** This routine is similar to alloca() in that it is not intended
-** for situations where the memory might be held long-term.  This
-** routine is intended to get memory to old large transient data
-** structures that would not normally fit on the stack of an
-** embedded processor.
-*/
-SQLITE_PRIVATE void *sqlite3ScratchMalloc(size_t n){
-  void *p;
-  assert( n>0 );
-
-  sqlite3_mutex_enter(mem0.mutex);
-  sqlite3StatusHighwater(SQLITE_STATUS_SCRATCH_SIZE, n);
-  if( mem0.nScratchFree && (size_t)sqlite3GlobalConfig.szScratch>=n ){
-    p = mem0.pScratchFree;
-    mem0.pScratchFree = mem0.pScratchFree->pNext;
-    mem0.nScratchFree--;
-    sqlite3StatusUp(SQLITE_STATUS_SCRATCH_USED, 1);
-    sqlite3_mutex_leave(mem0.mutex);
-  }else{
-    sqlite3_mutex_leave(mem0.mutex);
-    p = sqlite3Malloc(n);
-    if( sqlite3GlobalConfig.bMemstat && p ){
-      sqlite3_mutex_enter(mem0.mutex);
-      sqlite3StatusUp(SQLITE_STATUS_SCRATCH_OVERFLOW, sqlite3MallocSize(p));
-      sqlite3_mutex_leave(mem0.mutex);
-    }
-    sqlite3MemdebugSetType(p, MEMTYPE_SCRATCH);
-  }
-  assert( sqlite3_mutex_notheld(mem0.mutex) );
-
-
-#if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
-  /* EVIDENCE-OF: R-12970-05880 SQLite will not use more than one scratch
-  ** buffers per thread.
-  **
-  ** This can only be checked in single-threaded mode.
-  */
-  assert( scratchAllocOut==0 );
-  if( p ) scratchAllocOut++;
-#endif
-
-  return p;
-}
-SQLITE_PRIVATE void sqlite3ScratchFree(void *p){
-  if( p ){
-
-#if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
-    /* Verify that no more than two scratch allocation per thread
-    ** is outstanding at one time.  (This is only checked in the
-    ** single-threaded case since checking in the multi-threaded case
-    ** would be much more complicated.) */
-    assert( scratchAllocOut>=1 && scratchAllocOut<=2 );
-    scratchAllocOut--;
-#endif
-
-    if( SQLITE_WITHIN(p, sqlite3GlobalConfig.pScratch, mem0.pScratchEnd) ){
-      /* Release memory from the SQLITE_CONFIG_SCRATCH allocation */
-      ScratchFreeslot *pSlot;
-      pSlot = (ScratchFreeslot*)p;
-      sqlite3_mutex_enter(mem0.mutex);
-      pSlot->pNext = mem0.pScratchFree;
-      mem0.pScratchFree = pSlot;
-      mem0.nScratchFree++;
-      assert( mem0.nScratchFree <= (u32)sqlite3GlobalConfig.nScratch );
-      sqlite3StatusDown(SQLITE_STATUS_SCRATCH_USED, 1);
-      sqlite3_mutex_leave(mem0.mutex);
-    }else{
-      /* Release memory back to the heap */
-      assert( sqlite3MemdebugHasType(p, MEMTYPE_SCRATCH) );
-      assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_SCRATCH) );
-      sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
-      if( sqlite3GlobalConfig.bMemstat ){
-        size_t iSize = sqlite3MallocSize(p);
-        sqlite3_mutex_enter(mem0.mutex);
-        sqlite3StatusDown(SQLITE_STATUS_SCRATCH_OVERFLOW, iSize);
-        sqlite3StatusDown(SQLITE_STATUS_MEMORY_USED, iSize);
-        sqlite3StatusDown(SQLITE_STATUS_MALLOC_COUNT, 1);
-        sqlite3GlobalConfig.m.xFree(p);
-        sqlite3_mutex_leave(mem0.mutex);
-      }else{
-        sqlite3GlobalConfig.m.xFree(p);
-      }
-    }
-  }
-}
-
-/*
 ** TRUE if p is a lookaside memory allocation from db
 */
 #ifndef SQLITE_OMIT_LOOKASIDE
@@ -25312,7 +25257,6 @@ SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3 *db, void *p){
 #endif
       pBuf->pNext = db->lookaside.pFree;
       db->lookaside.pFree = pBuf;
-      db->lookaside.nOut--;
       return;
     }
   }
@@ -25476,16 +25420,16 @@ SQLITE_PRIVATE void *sqlite3DbMallocRawNN(sqlite3 *db, u64 n){
     assert( db->mallocFailed==0 );
     if( n>db->lookaside.sz ){
       db->lookaside.anStat[1]++;
-    }else if( (pBuf = db->lookaside.pFree)==0 ){
-      db->lookaside.anStat[2]++;
-    }else{
+    }else if( (pBuf = db->lookaside.pFree)!=0 ){
       db->lookaside.pFree = pBuf->pNext;
-      db->lookaside.nOut++;
       db->lookaside.anStat[0]++;
-      if( db->lookaside.nOut>db->lookaside.mxOut ){
-        db->lookaside.mxOut = db->lookaside.nOut;
-      }
       return (void*)pBuf;
+    }else if( (pBuf = db->lookaside.pInit)!=0 ){
+      db->lookaside.pInit = pBuf->pNext;
+      db->lookaside.anStat[0]++;
+      return (void*)pBuf;
+    }else{
+      db->lookaside.anStat[2]++;
     }
   }else if( db->mallocFailed ){
     return 0;
@@ -26335,7 +26279,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf(
         if( precision>=0 ){
           for(length=0; length<precision && bufpt[length]; length++){}
         }else{
-          length = sqlite3Strlen30(bufpt);
+          length = 0x7fffffff & (int)strlen(bufpt);
         }
         break;
       case etSQLESCAPE:           /* Escape ' characters */
@@ -26461,7 +26405,6 @@ static int sqlite3StrAccumEnlarge(StrAccum *p, int N){
   }else{
     char *zOld = isMalloced(p) ? p->zText : 0;
     i64 szNew = p->nChar;
-    assert( (p->zText==0 || p->zText==p->zBase)==!isMalloced(p) );
     szNew += N + 1;
     if( szNew+p->nChar<=p->mxAlloc ){
       /* Force exponential buffer size growth as long as it does not overflow,
@@ -26503,7 +26446,6 @@ SQLITE_PRIVATE void sqlite3AppendChar(StrAccum *p, int N, char c){
   if( p->nChar+(i64)N >= p->nAlloc && (N = sqlite3StrAccumEnlarge(p, N))<=0 ){
     return;
   }
-  assert( (p->zText==p->zBase)==!isMalloced(p) );
   while( (N--)>0 ) p->zText[p->nChar++] = c;
 }
 
@@ -26521,7 +26463,6 @@ static void SQLITE_NOINLINE enlargeAndAppend(StrAccum *p, const char *z, int N){
     memcpy(&p->zText[p->nChar], z, N);
     p->nChar += N;
   }
-  assert( (p->zText==0 || p->zText==p->zBase)==!isMalloced(p) );
 }
 
 /*
@@ -26556,19 +26497,20 @@ SQLITE_PRIVATE void sqlite3StrAccumAppendAll(StrAccum *p, const char *z){
 ** pointer if any kind of error was encountered.
 */
 static SQLITE_NOINLINE char *strAccumFinishRealloc(StrAccum *p){
+  char *zText;
   assert( p->mxAlloc>0 && !isMalloced(p) );
-  p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 );
-  if( p->zText ){
-    memcpy(p->zText, p->zBase, p->nChar+1);
+  zText = sqlite3DbMallocRaw(p->db, p->nChar+1 );
+  if( zText ){
+    memcpy(zText, p->zText, p->nChar+1);
     p->printfFlags |= SQLITE_PRINTF_MALLOCED;
   }else{
     setStrAccumError(p, STRACCUM_NOMEM);
   }
-  return p->zText;
+  p->zText = zText;
+  return zText;
 }
 SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){
   if( p->zText ){
-    assert( (p->zText==p->zBase)==!isMalloced(p) );
     p->zText[p->nChar] = 0;
     if( p->mxAlloc>0 && !isMalloced(p) ){
       return strAccumFinishRealloc(p);
@@ -26581,7 +26523,6 @@ SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){
 ** Reset an StrAccum string.  Reclaim all malloced memory.
 */
 SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum *p){
-  assert( (p->zText==0 || p->zText==p->zBase)==!isMalloced(p) );
   if( isMalloced(p) ){
     sqlite3DbFree(p->db, p->zText);
     p->printfFlags &= ~SQLITE_PRINTF_MALLOCED;
@@ -26604,11 +26545,11 @@ SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum *p){
 **        allocations will ever occur.
 */
 SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum *p, sqlite3 *db, char *zBase, int n, int mx){
-  p->zText = p->zBase = zBase;
+  p->zText = zBase;
   p->db = db;
-  p->nChar = 0;
   p->nAlloc = n;
   p->mxAlloc = mx;
+  p->nChar = 0;
   p->accError = 0;
   p->printfFlags = 0;
 }
@@ -28767,7 +28708,11 @@ do_atof_calc:
           if( esign<0 ){
             result = 0.0*s;
           }else{
+#ifdef INFINITY
+            result = INFINITY*s;
+#else
             result = 1e308*1e308*s;  /* Infinity */
+#endif
           }
         }
       }else{
@@ -28829,16 +28774,12 @@ static int compare2pow63(const char *zNum, int incr){
 ** Convert zNum to a 64-bit signed integer.  zNum must be decimal. This
 ** routine does *not* accept hexadecimal notation.
 **
-** If the zNum value is representable as a 64-bit twos-complement 
-** integer, then write that value into *pNum and return 0.
-**
-** If zNum is exactly 9223372036854775808, return 2.  This special
-** case is broken out because while 9223372036854775808 cannot be a 
-** signed 64-bit integer, its negative -9223372036854775808 can be.
+** Returns:
 **
-** If zNum is too big for a 64-bit integer and is not
-** 9223372036854775808  or if zNum contains any non-numeric text,
-** then return 1.
+**     0    Successful transformation.  Fits in a 64-bit signed integer.
+**     1    Excess text after the integer value
+**     2    Integer too large for a 64-bit signed integer or is malformed
+**     3    Special case of 9223372036854775808
 **
 ** length is the number of bytes in the string (bytes, not characters).
 ** The string is not necessarily zero-terminated.  The encoding is
@@ -28851,6 +28792,7 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc
   int i;
   int c = 0;
   int nonNum = 0;  /* True if input contains UTF16 with high byte non-zero */
+  int rc;          /* Baseline return code */
   const char *zStart;
   const char *zEnd = zNum + length;
   assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE );
@@ -28890,31 +28832,35 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc
   testcase( i==20 );
   if( &zNum[i]<zEnd              /* Extra bytes at the end */
    || (i==0 && zStart==zNum)     /* No digits */
-   || i>19*incr                  /* Too many digits */
    || nonNum                     /* UTF16 with high-order bytes non-zero */
   ){
+    rc = 1;
+  }else{
+    rc = 0;
+  }
+  if( i>19*incr ){                /* Too many digits */
     /* zNum is empty or contains non-numeric text or is longer
     ** than 19 digits (thus guaranteeing that it is too large) */
-    return 1;
+    return 2;
   }else if( i<19*incr ){
     /* Less than 19 digits, so we know that it fits in 64 bits */
     assert( u<=LARGEST_INT64 );
-    return 0;
+    return rc;
   }else{
     /* zNum is a 19-digit numbers.  Compare it against 9223372036854775808. */
     c = compare2pow63(zNum, incr);
     if( c<0 ){
       /* zNum is less than 9223372036854775808 so it fits */
       assert( u<=LARGEST_INT64 );
-      return 0;
+      return rc;
     }else if( c>0 ){
       /* zNum is greater than 9223372036854775808 so it overflows */
-      return 1;
+      return 2;
     }else{
       /* zNum is exactly 9223372036854775808.  Fits if negative.  The
       ** special case 2 overflow if positive */
       assert( u-1==LARGEST_INT64 );
-      return neg ? 0 : 2;
+      return neg ? rc : 3;
     }
   }
 }
@@ -28927,8 +28873,9 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc
 ** Returns:
 **
 **     0    Successful transformation.  Fits in a 64-bit signed integer.
-**     1    Integer too large for a 64-bit signed integer or is malformed
-**     2    Special case of 9223372036854775808
+**     1    Excess text after the integer value
+**     2    Integer too large for a 64-bit signed integer or is malformed
+**     3    Special case of 9223372036854775808
 */
 SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char *z, i64 *pOut){
 #ifndef SQLITE_OMIT_HEX_INTEGER
@@ -28942,7 +28889,7 @@ SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char *z, i64 *pOut){
       u = u*16 + sqlite3HexToInt(z[k]);
     }
     memcpy(pOut, &u, 8);
-    return (z[k]==0 && k-i<=16) ? 0 : 1;
+    return (z[k]==0 && k-i<=16) ? 0 : 2;
   }else
 #endif /* SQLITE_OMIT_HEX_INTEGER */
   {
@@ -29552,7 +29499,7 @@ SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
 ** overflow, leave *pA unchanged and return 1.
 */
 SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){
-#if GCC_VERSION>=5004000
+#if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER)
   return __builtin_add_overflow(*pA, iB, pA);
 #else
   i64 iA = *pA;
@@ -29572,7 +29519,7 @@ SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){
 #endif
 }
 SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){
-#if GCC_VERSION>=5004000
+#if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER)
   return __builtin_sub_overflow(*pA, iB, pA);
 #else
   testcase( iB==SMALLEST_INT64+1 );
@@ -29587,7 +29534,7 @@ SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){
 #endif
 }
 SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){
-#if GCC_VERSION>=5004000
+#if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER)
   return __builtin_mul_overflow(*pA, iB, pA);
 #else
   i64 iA = *pA;
@@ -29689,8 +29636,14 @@ SQLITE_PRIVATE LogEst sqlite3LogEst(u64 x){
     if( x<2 ) return 0;
     while( x<8 ){  y -= 10; x <<= 1; }
   }else{
+#if GCC_VERSION>=5004000
+    int i = 60 - __builtin_clzll(x);
+    y += i*10;
+    x >>= i;
+#else
     while( x>255 ){ y += 40; x >>= 4; }  /*OPTIMIZATION-IF-TRUE*/
     while( x>15 ){  y += 10; x >>= 1; }
+#endif
   }
   return a[x&7] + y - 10;
 }
@@ -30171,47 +30124,47 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
     /*  40 */ "IdxLT"            OpHelp("key=r[P3@P4]"),
     /*  41 */ "IdxGE"            OpHelp("key=r[P3@P4]"),
     /*  42 */ "RowSetRead"       OpHelp("r[P3]=rowset(P1)"),
-    /*  43 */ "RowSetTest"       OpHelp("if r[P3] in rowset(P1) goto P2"),
-    /*  44 */ "Program"          OpHelp(""),
-    /*  45 */ "FkIfZero"         OpHelp("if fkctr[P1]==0 goto P2"),
-    /*  46 */ "IfPos"            OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"),
-    /*  47 */ "IfNotZero"        OpHelp("if r[P1]!=0 then r[P1]--, goto P2"),
-    /*  48 */ "DecrJumpZero"     OpHelp("if (--r[P1])==0 goto P2"),
-    /*  49 */ "IncrVacuum"       OpHelp(""),
-    /*  50 */ "VNext"            OpHelp(""),
-    /*  51 */ "Init"             OpHelp("Start at P2"),
-    /*  52 */ "Return"           OpHelp(""),
-    /*  53 */ "EndCoroutine"     OpHelp(""),
-    /*  54 */ "HaltIfNull"       OpHelp("if r[P3]=null halt"),
-    /*  55 */ "Halt"             OpHelp(""),
-    /*  56 */ "Integer"          OpHelp("r[P2]=P1"),
-    /*  57 */ "Int64"            OpHelp("r[P2]=P4"),
-    /*  58 */ "String"           OpHelp("r[P2]='P4' (len=P1)"),
-    /*  59 */ "Null"             OpHelp("r[P2..P3]=NULL"),
-    /*  60 */ "SoftNull"         OpHelp("r[P1]=NULL"),
-    /*  61 */ "Blob"             OpHelp("r[P2]=P4 (len=P1)"),
-    /*  62 */ "Variable"         OpHelp("r[P2]=parameter(P1,P4)"),
-    /*  63 */ "Move"             OpHelp("r[P2@P3]=r[P1@P3]"),
-    /*  64 */ "Copy"             OpHelp("r[P2@P3+1]=r[P1@P3+1]"),
-    /*  65 */ "SCopy"            OpHelp("r[P2]=r[P1]"),
-    /*  66 */ "IntCopy"          OpHelp("r[P2]=r[P1]"),
-    /*  67 */ "ResultRow"        OpHelp("output=r[P1@P2]"),
-    /*  68 */ "CollSeq"          OpHelp(""),
-    /*  69 */ "AddImm"           OpHelp("r[P1]=r[P1]+P2"),
-    /*  70 */ "Or"               OpHelp("r[P3]=(r[P1] || r[P2])"),
-    /*  71 */ "And"              OpHelp("r[P3]=(r[P1] && r[P2])"),
-    /*  72 */ "RealAffinity"     OpHelp(""),
-    /*  73 */ "Cast"             OpHelp("affinity(r[P1])"),
-    /*  74 */ "Permutation"      OpHelp(""),
-    /*  75 */ "IsNull"           OpHelp("if r[P1]==NULL goto P2"),
-    /*  76 */ "NotNull"          OpHelp("if r[P1]!=NULL goto P2"),
-    /*  77 */ "Ne"               OpHelp("IF r[P3]!=r[P1]"),
-    /*  78 */ "Eq"               OpHelp("IF r[P3]==r[P1]"),
-    /*  79 */ "Gt"               OpHelp("IF r[P3]>r[P1]"),
-    /*  80 */ "Le"               OpHelp("IF r[P3]<=r[P1]"),
-    /*  81 */ "Lt"               OpHelp("IF r[P3]<r[P1]"),
-    /*  82 */ "Ge"               OpHelp("IF r[P3]>=r[P1]"),
-    /*  83 */ "ElseNotEq"        OpHelp(""),
+    /*  43 */ "Or"               OpHelp("r[P3]=(r[P1] || r[P2])"),
+    /*  44 */ "And"              OpHelp("r[P3]=(r[P1] && r[P2])"),
+    /*  45 */ "RowSetTest"       OpHelp("if r[P3] in rowset(P1) goto P2"),
+    /*  46 */ "Program"          OpHelp(""),
+    /*  47 */ "FkIfZero"         OpHelp("if fkctr[P1]==0 goto P2"),
+    /*  48 */ "IfPos"            OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"),
+    /*  49 */ "IfNotZero"        OpHelp("if r[P1]!=0 then r[P1]--, goto P2"),
+    /*  50 */ "IsNull"           OpHelp("if r[P1]==NULL goto P2"),
+    /*  51 */ "NotNull"          OpHelp("if r[P1]!=NULL goto P2"),
+    /*  52 */ "Ne"               OpHelp("IF r[P3]!=r[P1]"),
+    /*  53 */ "Eq"               OpHelp("IF r[P3]==r[P1]"),
+    /*  54 */ "Gt"               OpHelp("IF r[P3]>r[P1]"),
+    /*  55 */ "Le"               OpHelp("IF r[P3]<=r[P1]"),
+    /*  56 */ "Lt"               OpHelp("IF r[P3]<r[P1]"),
+    /*  57 */ "Ge"               OpHelp("IF r[P3]>=r[P1]"),
+    /*  58 */ "ElseNotEq"        OpHelp(""),
+    /*  59 */ "DecrJumpZero"     OpHelp("if (--r[P1])==0 goto P2"),
+    /*  60 */ "IncrVacuum"       OpHelp(""),
+    /*  61 */ "VNext"            OpHelp(""),
+    /*  62 */ "Init"             OpHelp("Start at P2"),
+    /*  63 */ "Return"           OpHelp(""),
+    /*  64 */ "EndCoroutine"     OpHelp(""),
+    /*  65 */ "HaltIfNull"       OpHelp("if r[P3]=null halt"),
+    /*  66 */ "Halt"             OpHelp(""),
+    /*  67 */ "Integer"          OpHelp("r[P2]=P1"),
+    /*  68 */ "Int64"            OpHelp("r[P2]=P4"),
+    /*  69 */ "String"           OpHelp("r[P2]='P4' (len=P1)"),
+    /*  70 */ "Null"             OpHelp("r[P2..P3]=NULL"),
+    /*  71 */ "SoftNull"         OpHelp("r[P1]=NULL"),
+    /*  72 */ "Blob"             OpHelp("r[P2]=P4 (len=P1)"),
+    /*  73 */ "Variable"         OpHelp("r[P2]=parameter(P1,P4)"),
+    /*  74 */ "Move"             OpHelp("r[P2@P3]=r[P1@P3]"),
+    /*  75 */ "Copy"             OpHelp("r[P2@P3+1]=r[P1@P3+1]"),
+    /*  76 */ "SCopy"            OpHelp("r[P2]=r[P1]"),
+    /*  77 */ "IntCopy"          OpHelp("r[P2]=r[P1]"),
+    /*  78 */ "ResultRow"        OpHelp("output=r[P1@P2]"),
+    /*  79 */ "CollSeq"          OpHelp(""),
+    /*  80 */ "AddImm"           OpHelp("r[P1]=r[P1]+P2"),
+    /*  81 */ "RealAffinity"     OpHelp(""),
+    /*  82 */ "Cast"             OpHelp("affinity(r[P1])"),
+    /*  83 */ "Permutation"      OpHelp(""),
     /*  84 */ "BitAnd"           OpHelp("r[P3]=r[P1]&r[P2]"),
     /*  85 */ "BitOr"            OpHelp("r[P3]=r[P1]|r[P2]"),
     /*  86 */ "ShiftLeft"        OpHelp("r[P3]=r[P2]<<r[P1]"),
@@ -30253,17 +30206,17 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
     /* 122 */ "RowData"          OpHelp("r[P2]=data"),
     /* 123 */ "Rowid"            OpHelp("r[P2]=rowid"),
     /* 124 */ "NullRow"          OpHelp(""),
-    /* 125 */ "SorterInsert"     OpHelp("key=r[P2]"),
-    /* 126 */ "IdxInsert"        OpHelp("key=r[P2]"),
-    /* 127 */ "IdxDelete"        OpHelp("key=r[P2@P3]"),
-    /* 128 */ "DeferredSeek"     OpHelp("Move P3 to P1.rowid if needed"),
-    /* 129 */ "IdxRowid"         OpHelp("r[P2]=rowid"),
-    /* 130 */ "Destroy"          OpHelp(""),
-    /* 131 */ "Clear"            OpHelp(""),
+    /* 125 */ "SeekEnd"          OpHelp(""),
+    /* 126 */ "SorterInsert"     OpHelp("key=r[P2]"),
+    /* 127 */ "IdxInsert"        OpHelp("key=r[P2]"),
+    /* 128 */ "IdxDelete"        OpHelp("key=r[P2@P3]"),
+    /* 129 */ "DeferredSeek"     OpHelp("Move P3 to P1.rowid if needed"),
+    /* 130 */ "IdxRowid"         OpHelp("r[P2]=rowid"),
+    /* 131 */ "Destroy"          OpHelp(""),
     /* 132 */ "Real"             OpHelp("r[P2]=P4"),
-    /* 133 */ "ResetSorter"      OpHelp(""),
-    /* 134 */ "CreateIndex"      OpHelp("r[P2]=root iDb=P1"),
-    /* 135 */ "CreateTable"      OpHelp("r[P2]=root iDb=P1"),
+    /* 133 */ "Clear"            OpHelp(""),
+    /* 134 */ "ResetSorter"      OpHelp(""),
+    /* 135 */ "CreateBtree"      OpHelp("r[P2]=root iDb=P1 flags=P3"),
     /* 136 */ "SqlExec"          OpHelp(""),
     /* 137 */ "ParseSchema"      OpHelp(""),
     /* 138 */ "LoadAnalysis"     OpHelp(""),
@@ -30395,6 +30348,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <sys/ioctl.h>
 #include <unistd.h>
 /* #include <time.h> */
 #include <sys/time.h>
@@ -30404,7 +30358,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
 #endif
 
 #if SQLITE_ENABLE_LOCKING_STYLE || defined(__CYGWIN__) || defined(__GNU__) || defined(HAVE_FLOCK)
-# include <sys/ioctl.h>
+/* # include <sys/ioctl.h> */
 # include <sys/file.h>
 # include <sys/param.h>
 #endif /* SQLITE_ENABLE_LOCKING_STYLE */
@@ -30514,7 +30468,7 @@ struct unixFile {
   unsigned short int ctrlFlags;       /* Behavioral bits.  UNIXFILE_* flags */
   int lastErrno;                      /* The unix errno from last I/O error */
   void *lockingContext;               /* Locking style specific state */
-  UnixUnusedFd *pUnused;              /* Pre-allocated UnixUnusedFd */
+  UnixUnusedFd *pPreallocatedUnused;  /* Pre-allocated UnixUnusedFd */
   const char *zPath;                  /* Name of the file */
   unixShm *pShm;                      /* Shared memory segment information */
   int szChunk;                        /* Configured by FCNTL_CHUNK_SIZE */
@@ -30525,10 +30479,8 @@ struct unixFile {
   sqlite3_int64 mmapSizeMax;          /* Configured FCNTL_MMAP_SIZE value */
   void *pMapRegion;                   /* Memory mapped region */
 #endif
-#ifdef __QNXNTO__
   int sectorSize;                     /* Device sector size */
   int deviceCharacteristics;          /* Precomputed device characteristics */
-#endif
 #if SQLITE_ENABLE_LOCKING_STYLE
   int openFlags;                      /* The flags specified at open() */
 #endif
@@ -30831,6 +30783,20 @@ SQLITE_API extern int sqlite3_open_file_count;
 # define lseek lseek64
 #endif
 
+#ifdef __linux__
+/*
+** Linux-specific IOCTL magic numbers used for controlling F2FS
+*/
+#define F2FS_IOCTL_MAGIC        0xf5
+#define F2FS_IOC_START_ATOMIC_WRITE     _IO(F2FS_IOCTL_MAGIC, 1)
+#define F2FS_IOC_COMMIT_ATOMIC_WRITE    _IO(F2FS_IOCTL_MAGIC, 2)
+#define F2FS_IOC_START_VOLATILE_WRITE   _IO(F2FS_IOCTL_MAGIC, 3)
+#define F2FS_IOC_ABORT_VOLATILE_WRITE   _IO(F2FS_IOCTL_MAGIC, 5)
+#define F2FS_IOC_GET_FEATURES           _IOR(F2FS_IOCTL_MAGIC, 12, u32)
+#define F2FS_FEATURE_ATOMIC_WRITE 0x0004
+#endif /* __linux__ */
+
+
 /*
 ** Different Unix systems declare open() in different ways.  Same use
 ** open(const char*,int,mode_t).  Others use open(const char*,int,...).
@@ -30853,6 +30819,7 @@ static int unixGetpagesize(void);
 ** testing and sandboxing.  The following array holds the names and pointers
 ** to all overrideable system calls.
 */
+#define aSyscall aUnixSyscall
 static struct unix_syscall {
   const char *zName;            /* Name of the system call */
   sqlite3_syscall_ptr pCurrent; /* Current value of the system call */
@@ -31003,6 +30970,9 @@ static struct unix_syscall {
 #endif
 #define osLstat      ((int(*)(const char*,struct stat*))aSyscall[27].pCurrent)
 
+  { "ioctl",         (sqlite3_syscall_ptr)ioctl,          0 },
+#define osIoctl ((int(*)(int,int,...))aSyscall[28].pCurrent)
+
 }; /* End of the overrideable system calls */
 
 
@@ -31607,7 +31577,8 @@ struct unixInodeInfo {
 /*
 ** A lists of all unixInodeInfo objects.
 */
-static unixInodeInfo *inodeList = 0;
+static unixInodeInfo *inodeList = 0;  /* All unixInodeInfo objects */
+static unsigned int nUnusedFd = 0;    /* Total unused file descriptors */
 
 /*
 **
@@ -31717,6 +31688,7 @@ static void closePendingFds(unixFile *pFile){
     pNext = p->pNext;
     robust_close(pFile, p->fd, __LINE__);
     sqlite3_free(p);
+    nUnusedFd--;
   }
   pInode->pUnused = 0;
 }
@@ -31749,6 +31721,7 @@ static void releaseInodeInfo(unixFile *pFile){
       sqlite3_free(pInode);
     }
   }
+  assert( inodeList!=0 || nUnusedFd==0 );
 }
 
 /*
@@ -31818,6 +31791,7 @@ static int findInodeInfo(
 #else
   fileId.ino = (u64)statbuf.st_ino;
 #endif
+  assert( inodeList!=0 || nUnusedFd==0 );
   pInode = inodeList;
   while( pInode && memcmp(&fileId, &pInode->fileId, sizeof(fileId)) ){
     pInode = pInode->pNext;
@@ -32237,11 +32211,12 @@ end_lock:
 */
 static void setPendingFd(unixFile *pFile){
   unixInodeInfo *pInode = pFile->pInode;
-  UnixUnusedFd *p = pFile->pUnused;
+  UnixUnusedFd *p = pFile->pPreallocatedUnused;
   p->pNext = pInode->pUnused;
   pInode->pUnused = p;
   pFile->h = -1;
-  pFile->pUnused = 0;
+  pFile->pPreallocatedUnused = 0;
+  nUnusedFd++;
 }
 
 /*
@@ -32466,7 +32441,7 @@ static int closeUnixFile(sqlite3_file *id){
 #endif
   OSTRACE(("CLOSE   %-3d\n", pFile->h));
   OpenCounter(-1);
-  sqlite3_free(pFile->pUnused);
+  sqlite3_free(pFile->pPreallocatedUnused);
   memset(pFile, 0, sizeof(unixFile));
   return SQLITE_OK;
 }
@@ -32803,7 +32778,7 @@ static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){
   OSTRACE(("TEST WR-LOCK %d %d %d (flock)\n", pFile->h, rc, reserved));
 
 #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
-  if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
+  if( (rc & 0xff) == SQLITE_IOERR ){
     rc = SQLITE_OK;
     reserved=1;
   }
@@ -32870,7 +32845,7 @@ static int flockLock(sqlite3_file *id, int eFileLock) {
   OSTRACE(("LOCK    %d %s %s (flock)\n", pFile->h, azFileLock(eFileLock), 
            rc==SQLITE_OK ? "ok" : "failed"));
 #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
-  if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
+  if( (rc & 0xff) == SQLITE_IOERR ){
     rc = SQLITE_BUSY;
   }
 #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
@@ -33407,7 +33382,7 @@ static int afpLock(sqlite3_file *id, int eFileLock){
           /* Can't reestablish the shared lock.  Sqlite can't deal, this is
           ** a critical I/O error
           */
-          rc = ((failed & SQLITE_IOERR) == SQLITE_IOERR) ? failed2 : 
+          rc = ((failed & 0xff) == SQLITE_IOERR) ? failed2 : 
                SQLITE_IOERR_LOCK;
           goto afp_end_lock;
         } 
@@ -33687,7 +33662,7 @@ static int unixRead(
   /* If this is a database file (not a journal, master-journal or temp
   ** file), the bytes in the locking range should never be read or written. */
 #if 0
-  assert( pFile->pUnused==0
+  assert( pFile->pPreallocatedUnused==0
        || offset>=PENDING_BYTE+512
        || offset+amt<=PENDING_BYTE 
   );
@@ -33800,7 +33775,7 @@ static int unixWrite(
   /* If this is a database file (not a journal, master-journal or temp
   ** file), the bytes in the locking range should never be read or written. */
 #if 0
-  assert( pFile->pUnused==0
+  assert( pFile->pPreallocatedUnused==0
        || offset>=PENDING_BYTE+512
        || offset+amt<=PENDING_BYTE 
   );
@@ -33871,9 +33846,13 @@ static int unixWrite(
 ** Count the number of fullsyncs and normal syncs.  This is used to test
 ** that syncs and fullsyncs are occurring at the right times.
 */
+#if SQLITE_OS_WIN
+extern int sqlite3_sync_count, sqlite3_fullsync_count;
+#else
 SQLITE_API int sqlite3_sync_count = 0;
 SQLITE_API int sqlite3_fullsync_count = 0;
 #endif
+#endif
 
 /*
 ** We do not trust systems to provide a working fdatasync().  Some do.
@@ -34280,6 +34259,21 @@ static int unixGetTempname(int nBuf, char *zBuf);
 static int unixFileControl(sqlite3_file *id, int op, void *pArg){
   unixFile *pFile = (unixFile*)id;
   switch( op ){
+#if defined(__linux__) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
+    case SQLITE_FCNTL_BEGIN_ATOMIC_WRITE: {
+      int rc = osIoctl(pFile->h, F2FS_IOC_START_ATOMIC_WRITE);
+      return rc ? SQLITE_IOERR_BEGIN_ATOMIC : SQLITE_OK;
+    }
+    case SQLITE_FCNTL_COMMIT_ATOMIC_WRITE: {
+      int rc = osIoctl(pFile->h, F2FS_IOC_COMMIT_ATOMIC_WRITE);
+      return rc ? SQLITE_IOERR_COMMIT_ATOMIC : SQLITE_OK;
+    }
+    case SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE: {
+      int rc = osIoctl(pFile->h, F2FS_IOC_ABORT_VOLATILE_WRITE);
+      return rc ? SQLITE_IOERR_ROLLBACK_ATOMIC : SQLITE_OK;
+    }
+#endif /* __linux__ && SQLITE_ENABLE_BATCH_ATOMIC_WRITE */
+
     case SQLITE_FCNTL_LOCKSTATE: {
       *(int*)pArg = pFile->eFileLock;
       return SQLITE_OK;
@@ -34330,6 +34324,14 @@ static int unixFileControl(sqlite3_file *id, int op, void *pArg){
       if( newLimit>sqlite3GlobalConfig.mxMmap ){
         newLimit = sqlite3GlobalConfig.mxMmap;
       }
+
+      /* The value of newLimit may be eventually cast to (size_t) and passed
+      ** to mmap(). Restrict its value to 2GB if (size_t) is not at least a
+      ** 64-bit type. */
+      if( newLimit>0 && sizeof(size_t)<8 ){
+        newLimit = (newLimit & 0x7FFFFFFF);
+      }
+
       *(i64*)pArg = pFile->mmapSizeMax;
       if( newLimit>=0 && newLimit!=pFile->mmapSizeMax && pFile->nFetchOut==0 ){
         pFile->mmapSizeMax = newLimit;
@@ -34363,30 +34365,41 @@ static int unixFileControl(sqlite3_file *id, int op, void *pArg){
 }
 
 /*
-** Return the sector size in bytes of the underlying block device for
-** the specified file. This is almost always 512 bytes, but may be
-** larger for some devices.
+** If pFd->sectorSize is non-zero when this function is called, it is a
+** no-op. Otherwise, the values of pFd->sectorSize and 
+** pFd->deviceCharacteristics are set according to the file-system 
+** characteristics. 
 **
-** SQLite code assumes this function cannot fail. It also assumes that
-** if two files are created in the same file-system directory (i.e.
-** a database and its journal file) that the sector size will be the
-** same for both.
+** There are two versions of this function. One for QNX and one for all
+** other systems.
 */
-#ifndef __QNXNTO__ 
-static int unixSectorSize(sqlite3_file *NotUsed){
-  UNUSED_PARAMETER(NotUsed);
-  return SQLITE_DEFAULT_SECTOR_SIZE;
-}
-#endif
+#ifndef __QNXNTO__
+static void setDeviceCharacteristics(unixFile *pFd){
+  assert( pFd->deviceCharacteristics==0 || pFd->sectorSize!=0 );
+  if( pFd->sectorSize==0 ){
+#if defined(__linux__) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
+    int res;
+    u32 f = 0;
 
-/*
-** The following version of unixSectorSize() is optimized for QNX.
-*/
-#ifdef __QNXNTO__
+    /* Check for support for F2FS atomic batch writes. */
+    res = osIoctl(pFd->h, F2FS_IOC_GET_FEATURES, &f);
+    if( res==0 && (f & F2FS_FEATURE_ATOMIC_WRITE) ){
+      pFd->deviceCharacteristics = SQLITE_IOCAP_BATCH_ATOMIC;
+    }
+#endif /* __linux__ && SQLITE_ENABLE_BATCH_ATOMIC_WRITE */
+
+    /* Set the POWERSAFE_OVERWRITE flag if requested. */
+    if( pFd->ctrlFlags & UNIXFILE_PSOW ){
+      pFd->deviceCharacteristics |= SQLITE_IOCAP_POWERSAFE_OVERWRITE;
+    }
+
+    pFd->sectorSize = SQLITE_DEFAULT_SECTOR_SIZE;
+  }
+}
+#else
 #include <sys/dcmd_blk.h>
 #include <sys/statvfs.h>
-static int unixSectorSize(sqlite3_file *id){
-  unixFile *pFile = (unixFile*)id;
+static void setDeviceCharacteristics(unixFile *pFile){
   if( pFile->sectorSize == 0 ){
     struct statvfs fsInfo;
        
@@ -34455,9 +34468,24 @@ static int unixSectorSize(sqlite3_file *id){
     pFile->deviceCharacteristics = 0;
     pFile->sectorSize = SQLITE_DEFAULT_SECTOR_SIZE;
   }
-  return pFile->sectorSize;
 }
-#endif /* __QNXNTO__ */
+#endif
+
+/*
+** Return the sector size in bytes of the underlying block device for
+** the specified file. This is almost always 512 bytes, but may be
+** larger for some devices.
+**
+** SQLite code assumes this function cannot fail. It also assumes that
+** if two files are created in the same file-system directory (i.e.
+** a database and its journal file) that the sector size will be the
+** same for both.
+*/
+static int unixSectorSize(sqlite3_file *id){
+  unixFile *pFd = (unixFile*)id;
+  setDeviceCharacteristics(pFd);
+  return pFd->sectorSize;
+}
 
 /*
 ** Return the device characteristics for the file.
@@ -34473,16 +34501,9 @@ static int unixSectorSize(sqlite3_file *id){
 ** available to turn it off and URI query parameter available to turn it off.
 */
 static int unixDeviceCharacteristics(sqlite3_file *id){
-  unixFile *p = (unixFile*)id;
-  int rc = 0;
-#ifdef __QNXNTO__
-  if( p->sectorSize==0 ) unixSectorSize(id);
-  rc = p->deviceCharacteristics;
-#endif
-  if( p->ctrlFlags & UNIXFILE_PSOW ){
-    rc |= SQLITE_IOCAP_POWERSAFE_OVERWRITE;
-  }
-  return rc;
+  unixFile *pFd = (unixFile*)id;
+  setDeviceCharacteristics(pFd);
+  return pFd->deviceCharacteristics;
 }
 
 #if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0
@@ -35753,17 +35774,6 @@ static int fillInUnixFile(
 
   assert( pNew->pInode==NULL );
 
-  /* Usually the path zFilename should not be a relative pathname. The
-  ** exception is when opening the proxy "conch" file in builds that
-  ** include the special Apple locking styles.
-  */
-#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
-  assert( zFilename==0 || zFilename[0]=='/' 
-    || pVfs->pAppData==(void*)&autolockIoFinder );
-#else
-  assert( zFilename==0 || zFilename[0]=='/' );
-#endif
-
   /* No locking occurs in temporary files */
   assert( zFilename!=0 || (ctrlFlags & UNIXFILE_NOLOCK)!=0 );
 
@@ -36035,6 +36045,8 @@ static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
 #if !OS_VXWORKS
   struct stat sStat;                   /* Results of stat() call */
 
+  unixEnterMutex();
+
   /* A stat() call may fail for various reasons. If this happens, it is
   ** almost certain that an open() call on the same path will also fail.
   ** For this reason, if an error occurs in the stat() call here, it is
@@ -36043,10 +36055,9 @@ static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
   **
   ** Even if a subsequent open() call does succeed, the consequences of
   ** not searching for a reusable file descriptor are not dire.  */
-  if( 0==osStat(zPath, &sStat) ){
+  if( nUnusedFd>0 && 0==osStat(zPath, &sStat) ){
     unixInodeInfo *pInode;
 
-    unixEnterMutex();
     pInode = inodeList;
     while( pInode && (pInode->fileId.dev!=sStat.st_dev
                      || pInode->fileId.ino!=(u64)sStat.st_ino) ){
@@ -36057,11 +36068,12 @@ static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
       for(pp=&pInode->pUnused; *pp && (*pp)->flags!=flags; pp=&((*pp)->pNext));
       pUnused = *pp;
       if( pUnused ){
+        nUnusedFd--;
         *pp = pUnused->pNext;
       }
     }
-    unixLeaveMutex();
   }
+  unixLeaveMutex();
 #endif    /* if !OS_VXWORKS */
   return pUnused;
 }
@@ -36137,16 +36149,11 @@ static int findCreateFileMode(
     */
     nDb = sqlite3Strlen30(zPath) - 1; 
     while( zPath[nDb]!='-' ){
-#ifndef SQLITE_ENABLE_8_3_NAMES
-      /* In the normal case (8+3 filenames disabled) the journal filename
-      ** is guaranteed to contain a '-' character. */
-      assert( nDb>0 );
-      assert( sqlite3Isalnum(zPath[nDb]) );
-#else
-      /* If 8+3 names are possible, then the journal file might not contain
-      ** a '-' character.  So check for that case and return early. */
+      /* In normal operation, the journal file name will always contain
+      ** a '-' character.  However in 8+3 filename mode, or if a corrupt
+      ** rollback journal specifies a master journal with a goofy name, then
+      ** the '-' might be missing. */
       if( nDb==0 || zPath[nDb]=='.' ) return SQLITE_OK;
-#endif
       nDb--;
     }
     memcpy(zDb, zPath, nDb);
@@ -36282,7 +36289,7 @@ static int unixOpen(
         return SQLITE_NOMEM_BKPT;
       }
     }
-    p->pUnused = pUnused;
+    p->pPreallocatedUnused = pUnused;
 
     /* Database filenames are double-zero terminated if they are not
     ** URIs with parameters.  Hence, they can always be passed into
@@ -36319,7 +36326,7 @@ static int unixOpen(
     gid_t gid;                    /* Groupid for the file */
     rc = findCreateFileMode(zName, flags, &openMode, &uid, &gid);
     if( rc!=SQLITE_OK ){
-      assert( !p->pUnused );
+      assert( !p->pPreallocatedUnused );
       assert( eType==SQLITE_OPEN_WAL || eType==SQLITE_OPEN_MAIN_JOURNAL );
       return rc;
     }
@@ -36353,9 +36360,9 @@ static int unixOpen(
     *pOutFlags = flags;
   }
 
-  if( p->pUnused ){
-    p->pUnused->fd = fd;
-    p->pUnused->flags = flags;
+  if( p->pPreallocatedUnused ){
+    p->pPreallocatedUnused->fd = fd;
+    p->pPreallocatedUnused->flags = flags;
   }
 
   if( isDelete ){
@@ -36432,11 +36439,14 @@ static int unixOpen(
   }
 #endif
   
+  assert( zPath==0 || zPath[0]=='/' 
+      || eType==SQLITE_OPEN_MASTER_JOURNAL || eType==SQLITE_OPEN_MAIN_JOURNAL 
+  );
   rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags);
 
 open_finished:
   if( rc!=SQLITE_OK ){
-    sqlite3_free(p->pUnused);
+    sqlite3_free(p->pPreallocatedUnused);
   }
   return rc;
 }
@@ -36776,7 +36786,11 @@ static int unixSleep(sqlite3_vfs *NotUsed, int microseconds){
 ** sqlite3OsCurrentTime() during testing.
 */
 #ifdef SQLITE_TEST
+# if SQLITE_OS_WIN
+SQLITE_API extern int sqlite3_current_time;  /* Fake system time in seconds since 1970. */
+# else
 SQLITE_API int sqlite3_current_time = 0;  /* Fake system time in seconds since 1970. */
+# endif
 #endif
 
 /*
@@ -37177,7 +37191,7 @@ static int proxyCreateUnixFile(
   dummyVfs.zName = "dummy";
   pUnused->fd = fd;
   pUnused->flags = openFlags;
-  pNew->pUnused = pUnused;
+  pNew->pPreallocatedUnused = pUnused;
   
   rc = fillInUnixFile(&dummyVfs, fd, (sqlite3_file*)pNew, path, 0);
   if( rc==SQLITE_OK ){
@@ -38044,7 +38058,14 @@ static int proxyClose(sqlite3_file *id) {
 ** necessarily been initialized when this routine is called, and so they
 ** should not be used.
 */
+#if SQLITE_OS_WIN
+#if defined(SQLITE_AMALGAMATION)
+static
+#endif
+SQLITE_API int sqlite3_os_unix_init(void){
+#else
 SQLITE_API int sqlite3_os_init(void){ 
+#endif
   /* 
   ** The following macro defines an initializer for an sqlite3_vfs object.
   ** The name of the VFS is NAME.  The pAppData is a pointer to a pointer
@@ -38104,11 +38125,14 @@ SQLITE_API int sqlite3_os_init(void){
     UNIXVFS("unix",          cygwinIoFinder ),
 #elif OS_VXWORKS
     UNIXVFS("unix",          vxworksIoFinder ),
-#elif defined(__GNU__)
+#elif defined(__GNU__) || defined(HAVE_FLOCK)
     UNIXVFS("unix",          flockIoFinder ),
 #else
     UNIXVFS("unix",          posixIoFinder ),
 #endif
+#if !SQLITE_OS_WIN
+    UNIXVFS("none",          nolockIoFinder ),
+#endif
     UNIXVFS("unix-none",     nolockIoFinder ),
     UNIXVFS("unix-dotfile",  dotlockIoFinder ),
 #if defined(__CYGWIN__)
@@ -38122,7 +38146,7 @@ SQLITE_API int sqlite3_os_init(void){
 #if SQLITE_ENABLE_LOCKING_STYLE || OS_VXWORKS || defined(__CYGWIN__) || defined(__GNU__)
     UNIXVFS("unix-posix",    posixIoFinder ),
 #endif
-#if SQLITE_ENABLE_LOCKING_STYLE || defined(__GNU__) || defined(HAVE_FLOCK)
+#if SQLITE_ENABLE_LOCKING_STYLE || defined(__CYGWIN__) || defined(__GNU__) || defined(HAVE_FLOCK)
     UNIXVFS("unix-flock",    flockIoFinder ),
 #endif
 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
@@ -38135,7 +38159,7 @@ SQLITE_API int sqlite3_os_init(void){
 
   /* Double-check that the aSyscall[] array has been constructed
   ** correctly.  See ticket [bb3a86e890c8e96ab] */
-  assert( ArraySize(aSyscall)==28 );
+  assert( ArraySize(aSyscall)==29 );
 
   /* Register all VFSes defined in the aVfs[] array */
   for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
@@ -38144,6 +38168,8 @@ SQLITE_API int sqlite3_os_init(void){
   return SQLITE_OK; 
 }
 
+#undef aSyscall
+#if !SQLITE_OS_WIN
 /*
 ** Shutdown the operating system interface.
 **
@@ -38154,6 +38180,7 @@ SQLITE_API int sqlite3_os_init(void){
 SQLITE_API int sqlite3_os_end(void){ 
   return SQLITE_OK; 
 }
+#endif /* !SQLITE_OS_WIN */
  
 #endif /* SQLITE_OS_UNIX */
 
@@ -41919,6 +41946,14 @@ static int winFileControl(sqlite3_file *id, int op, void *pArg){
       if( newLimit>sqlite3GlobalConfig.mxMmap ){
         newLimit = sqlite3GlobalConfig.mxMmap;
       }
+
+      /* The value of newLimit may be eventually cast to (SIZE_T) and passed
+      ** to MapViewOfFile(). Restrict its value to 2GB if (SIZE_T) is not at
+      ** least a 64-bit type. */
+      if( newLimit>0 && sizeof(SIZE_T)<8 ){
+        newLimit = (newLimit & 0x7FFFFFFF);
+      }
+
       *(i64*)pArg = pFile->mmapSizeMax;
       if( newLimit>=0 && newLimit!=pFile->mmapSizeMax && pFile->nFetchOut==0 ){
         pFile->mmapSizeMax = newLimit;
@@ -42527,7 +42562,7 @@ static int winShmMap(
     }
 
     /* Map the requested memory region into this processes address space. */
-    apNew = (struct ShmRegion *)sqlite3Realloc(
+    apNew = (struct ShmRegion *)sqlite3_realloc64(
         pShmNode->aRegion, (iRegion+1)*sizeof(apNew[0])
     );
     if( !apNew ){
@@ -43259,6 +43294,14 @@ static int winIsDir(const void *zConverted){
   return (attr!=INVALID_FILE_ATTRIBUTES) && (attr&FILE_ATTRIBUTE_DIRECTORY);
 }
 
+/* forward reference */
+static int winAccess(
+  sqlite3_vfs *pVfs,         /* Not used on win32 */
+  const char *zFilename,     /* Name of file to check */
+  int flags,                 /* Type of test to make on this file */
+  int *pResOut               /* OUT: Result */
+);
+
 /*
 ** Open a file.
 */
@@ -43435,37 +43478,52 @@ static int winOpen(
     extendedParameters.dwSecurityQosFlags = SECURITY_ANONYMOUS;
     extendedParameters.lpSecurityAttributes = NULL;
     extendedParameters.hTemplateFile = NULL;
-    while( (h = osCreateFile2((LPCWSTR)zConverted,
-                              dwDesiredAccess,
-                              dwShareMode,
-                              dwCreationDisposition,
-                              &extendedParameters))==INVALID_HANDLE_VALUE &&
-                              winRetryIoerr(&cnt, &lastErrno) ){
-               /* Noop */
-    }
+    do{
+      h = osCreateFile2((LPCWSTR)zConverted,
+                        dwDesiredAccess,
+                        dwShareMode,
+                        dwCreationDisposition,
+                        &extendedParameters);
+      if( h!=INVALID_HANDLE_VALUE ) break;
+      if( isReadWrite ){
+        int isRO = 0;
+        int rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO);
+        if( rc2==SQLITE_OK && isRO ) break;
+      }
+    }while( winRetryIoerr(&cnt, &lastErrno) );
 #else
-    while( (h = osCreateFileW((LPCWSTR)zConverted,
-                              dwDesiredAccess,
-                              dwShareMode, NULL,
-                              dwCreationDisposition,
-                              dwFlagsAndAttributes,
-                              NULL))==INVALID_HANDLE_VALUE &&
-                              winRetryIoerr(&cnt, &lastErrno) ){
-               /* Noop */
-    }
+    do{
+      h = osCreateFileW((LPCWSTR)zConverted,
+                        dwDesiredAccess,
+                        dwShareMode, NULL,
+                        dwCreationDisposition,
+                        dwFlagsAndAttributes,
+                        NULL);
+      if( h!=INVALID_HANDLE_VALUE ) break;
+      if( isReadWrite ){
+        int isRO = 0;
+        int rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO);
+        if( rc2==SQLITE_OK && isRO ) break;
+      }
+    }while( winRetryIoerr(&cnt, &lastErrno) );
 #endif
   }
 #ifdef SQLITE_WIN32_HAS_ANSI
   else{
-    while( (h = osCreateFileA((LPCSTR)zConverted,
-                              dwDesiredAccess,
-                              dwShareMode, NULL,
-                              dwCreationDisposition,
-                              dwFlagsAndAttributes,
-                              NULL))==INVALID_HANDLE_VALUE &&
-                              winRetryIoerr(&cnt, &lastErrno) ){
-               /* Noop */
-    }
+    do{
+      h = osCreateFileA((LPCSTR)zConverted,
+                        dwDesiredAccess,
+                        dwShareMode, NULL,
+                        dwCreationDisposition,
+                        dwFlagsAndAttributes,
+                        NULL);
+      if( h!=INVALID_HANDLE_VALUE ) break;
+      if( isReadWrite ){
+        int isRO = 0;
+        int rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO);
+        if( rc2==SQLITE_OK && isRO ) break;
+      }
+    }while( winRetryIoerr(&cnt, &lastErrno) );
   }
 #endif
   winLogIoerr(cnt, __LINE__);
@@ -43474,8 +43532,6 @@ static int winOpen(
            dwDesiredAccess, (h==INVALID_HANDLE_VALUE) ? "failed" : "ok"));
 
   if( h==INVALID_HANDLE_VALUE ){
-    pFile->lastErrno = lastErrno;
-    winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name);
     sqlite3_free(zConverted);
     sqlite3_free(zTmpname);
     if( isReadWrite && !isExclusive ){
@@ -43484,6 +43540,8 @@ static int winOpen(
                      ~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)),
          pOutFlags);
     }else{
+      pFile->lastErrno = lastErrno;
+      winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name);
       return SQLITE_CANTOPEN_BKPT;
     }
   }
@@ -43751,6 +43809,7 @@ static BOOL winIsDriveLetterAndColon(
   return ( sqlite3Isalpha(zPathname[0]) && zPathname[1]==':' );
 }
 
+#ifdef _WIN32
 /*
 ** Returns non-zero if the specified path name should be used verbatim.  If
 ** non-zero is returned from this function, the calling function must simply
@@ -43787,6 +43846,7 @@ static BOOL winIsVerbatimPathname(
   */
   return FALSE;
 }
+#endif /* _WIN32 */
 
 /*
 ** Turn a relative pathname into a full pathname.  Write the full
@@ -43812,7 +43872,9 @@ static int winFullPathname(
     zRelative++;
   }
 
-#if defined(__CYGWIN__)
+#if 0 /* This doesn't work correctly at all! See:
+  <http://sqlite.1065341.n5.nabble.com/Wrong-filename-handling-in-sqlite3-load-extension-for-Cygwin-td74049.html>
+*/
   SimulateIOError( return SQLITE_ERROR );
   UNUSED_PARAMETER(nFull);
   assert( nFull>=pVfs->mxPathname );
@@ -43979,7 +44041,9 @@ static int winFullPathname(
 */
 static void *winDlOpen(sqlite3_vfs *pVfs, const char *zFilename){
   HANDLE h;
-#if defined(__CYGWIN__)
+#if 0 /* This doesn't work correctly at all! See:
+  <http://sqlite.1065341.n5.nabble.com/Wrong-filename-handling-in-sqlite3-load-extension-for-Cygwin-td74049.html>
+*/
   int nFull = pVfs->mxPathname+1;
   char *zFull = sqlite3MallocZero( nFull );
   void *zConverted = 0;
@@ -44076,9 +44140,6 @@ static int winRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
   EntropyGatherer e;
   UNUSED_PARAMETER(pVfs);
   memset(zBuf, 0, nBuf);
-#ifdef HAVE_RAND_S
-  rand_s((unsigned int*)zBuf); /* rand_s() is not available with MinGW */
-#endif /* defined(_MSC_VER) && _MSC_VER>=1400 */
   e.a = (unsigned char*)zBuf;
   e.na = nBuf;
   e.nXor = 0;
@@ -44258,6 +44319,10 @@ static int winGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
   return e;
 }
 
+#if SQLITE_OS_UNIX && !defined(SQLITE_AMALGAMATION)
+SQLITE_API int sqlite3_os_unix_init(void);
+#endif
+
 /*
 ** Initialize and deinitialize the operating system interface.
 */
@@ -44377,6 +44442,10 @@ SQLITE_API int sqlite3_os_init(void){
   assert( winSysInfo.dwAllocationGranularity>0 );
   assert( winSysInfo.dwPageSize>0 );
 
+#if SQLITE_OS_UNIX
+  sqlite3_os_unix_init();
+#endif
+
   sqlite3_vfs_register(&winVfs, 1);
 
 #if defined(SQLITE_WIN32_HAS_WIDE)
@@ -45013,12 +45082,9 @@ static void pcacheManageDirtyList(PgHdr *pPage, u8 addRemove){
         p->eCreate = 2;
       }
     }
-    pPage->pDirtyNext = 0;
-    pPage->pDirtyPrev = 0;
   }
   if( addRemove & PCACHE_DIRTYLIST_ADD ){
-    assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage );
-  
+    pPage->pDirtyPrev = 0;
     pPage->pDirtyNext = p->pDirty;
     if( pPage->pDirtyNext ){
       assert( pPage->pDirtyNext->pDirtyPrev==0 );
@@ -45335,11 +45401,7 @@ SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3PcacheRelease(PgHdr *p){
   if( (--p->nRef)==0 ){
     if( p->flags&PGHDR_CLEAN ){
       pcacheUnpin(p);
-    }else if( p->pDirtyPrev!=0 ){ /*OPTIMIZATION-IF-FALSE*/
-      /* Move the page to the head of the dirty list. If p->pDirtyPrev==0,
-      ** then page p is already at the head of the dirty list and the
-      ** following call would be a no-op. Hence the OPTIMIZATION-IF-FALSE
-      ** tag above.  */
+    }else{
       pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
     }
   }
@@ -45800,7 +45862,6 @@ typedef struct PGroup PGroup;
 struct PgHdr1 {
   sqlite3_pcache_page page;      /* Base class. Must be first. pBuf & pExtra */
   unsigned int iKey;             /* Key value (page number) */
-  u8 isPinned;                   /* Page in use, not on the LRU list */
   u8 isBulkLocal;                /* This page from bulk local storage */
   u8 isAnchor;                   /* This is the PGroup.lru element */
   PgHdr1 *pNext;                 /* Next in hash table chain */
@@ -45809,6 +45870,12 @@ struct PgHdr1 {
   PgHdr1 *pLruPrev;              /* Previous in LRU list of unpinned pages */
 };
 
+/*
+** A page is pinned if it is no on the LRU list
+*/
+#define PAGE_IS_PINNED(p)    ((p)->pLruNext==0)
+#define PAGE_IS_UNPINNED(p)  ((p)->pLruNext!=0)
+
 /* Each page cache (or PCache) belongs to a PGroup.  A PGroup is a set 
 ** of one or more PCaches that are able to recycle each other's unpinned
 ** pages when they are under memory pressure.  A PGroup is an instance of
@@ -45836,7 +45903,7 @@ struct PGroup {
   unsigned int nMaxPage;         /* Sum of nMax for purgeable caches */
   unsigned int nMinPage;         /* Sum of nMin for purgeable caches */
   unsigned int mxPinned;         /* nMaxpage + 10 - nMinPage */
-  unsigned int nCurrentPage;     /* Number of purgeable pages allocated */
+  unsigned int nPurgeable;       /* Number of purgeable pages allocated */
   PgHdr1 lru;                    /* The beginning and end of the LRU list */
 };
 
@@ -45850,11 +45917,13 @@ struct PGroup {
 */
 struct PCache1 {
   /* Cache configuration parameters. Page size (szPage) and the purgeable
-  ** flag (bPurgeable) are set when the cache is created. nMax may be 
+  ** flag (bPurgeable) and the pnPurgeable pointer are all set when the
+  ** cache is created and are never changed thereafter. nMax may be 
   ** modified at any time by a call to the pcache1Cachesize() method.
   ** The PGroup mutex must be held when accessing nMax.
   */
   PGroup *pGroup;                     /* PGroup this cache belongs to */
+  unsigned int *pnPurgeable;          /* Pointer to pGroup->nPurgeable */
   size_t szPage;                      /* Size of database content section */
   size_t szExtra;                     /* sizeof(MemPage)+sizeof(PgHdr) */
   int szAlloc;                        /* Total size of one pcache line */
@@ -45949,6 +46018,7 @@ SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *pBuf, size_t sz, int n){
   if( pcache1.isInit ){
     PgFreeslot *p;
     if( pBuf==0 ) sz = n = 0;
+    if( n==0 ) sz = 0;
     sz = ROUNDDOWN8(sz);
     pcache1.szSlot = sz;
     pcache1.nSlot = pcache1.nFreeSlot = n;
@@ -46141,9 +46211,7 @@ static PgHdr1 *pcache1AllocPage(PCache1 *pCache, int benignMalloc){
     p->isBulkLocal = 0;
     p->isAnchor = 0;
   }
-  if( pCache->bPurgeable ){
-    pCache->pGroup->nCurrentPage++;
-  }
+  (*pCache->pnPurgeable)++;
   return p;
 }
 
@@ -46164,9 +46232,7 @@ static void pcache1FreePage(PgHdr1 *p){
     sqlite3_free(p);
 #endif
   }
-  if( pCache->bPurgeable ){
-    pCache->pGroup->nCurrentPage--;
-  }
+  (*pCache->pnPurgeable)--;
 }
 
 /*
@@ -46261,22 +46327,18 @@ static void pcache1ResizeHash(PCache1 *p){
 ** The PGroup mutex must be held when this function is called.
 */
 static PgHdr1 *pcache1PinPage(PgHdr1 *pPage){
-  PCache1 *pCache;
-
   assert( pPage!=0 );
-  assert( pPage->isPinned==0 );
-  pCache = pPage->pCache;
+  assert( PAGE_IS_UNPINNED(pPage) );
   assert( pPage->pLruNext );
   assert( pPage->pLruPrev );
-  assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
+  assert( sqlite3_mutex_held(pPage->pCache->pGroup->mutex) );
   pPage->pLruPrev->pLruNext = pPage->pLruNext;
   pPage->pLruNext->pLruPrev = pPage->pLruPrev;
   pPage->pLruNext = 0;
   pPage->pLruPrev = 0;
-  pPage->isPinned = 1;
   assert( pPage->isAnchor==0 );
-  assert( pCache->pGroup->lru.isAnchor==1 );
-  pCache->nRecyclable--;
+  assert( pPage->pCache->pGroup->lru.isAnchor==1 );
+  pPage->pCache->nRecyclable--;
   return pPage;
 }
 
@@ -46310,11 +46372,11 @@ static void pcache1EnforceMaxPage(PCache1 *pCache){
   PGroup *pGroup = pCache->pGroup;
   PgHdr1 *p;
   assert( sqlite3_mutex_held(pGroup->mutex) );
-  while( pGroup->nCurrentPage>pGroup->nMaxPage
+  while( pGroup->nPurgeable>pGroup->nMaxPage
       && (p=pGroup->lru.pLruPrev)->isAnchor==0
   ){
     assert( p->pCache->pGroup==pGroup );
-    assert( p->isPinned==0 );
+    assert( PAGE_IS_UNPINNED(p) );
     pcache1PinPage(p);
     pcache1RemoveFromHash(p, 1);
   }
@@ -46363,7 +46425,7 @@ static void pcache1TruncateUnsafe(
       if( pPage->iKey>=iLimit ){
         pCache->nPage--;
         *pp = pPage->pNext;
-        if( !pPage->isPinned ) pcache1PinPage(pPage);
+        if( PAGE_IS_UNPINNED(pPage) ) pcache1PinPage(pPage);
         pcache1FreePage(pPage);
       }else{
         pp = &pPage->pNext;
@@ -46481,6 +46543,10 @@ static sqlite3_pcache *pcache1Create(int szPage, int szExtra, int bPurgeable){
       pCache->nMin = 10;
       pGroup->nMinPage += pCache->nMin;
       pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
+      pCache->pnPurgeable = &pGroup->nPurgeable;
+    }else{
+      static unsigned int dummyCurrentPage;
+      pCache->pnPurgeable = &dummyCurrentPage;
     }
     pcache1LeaveMutex(pGroup);
     if( pCache->nHash==0 ){
@@ -46582,7 +46648,7 @@ static SQLITE_NOINLINE PgHdr1 *pcache1FetchStage2(
   ){
     PCache1 *pOther;
     pPage = pGroup->lru.pLruPrev;
-    assert( pPage->isPinned==0 );
+    assert( PAGE_IS_UNPINNED(pPage) );
     pcache1RemoveFromHash(pPage, 0);
     pcache1PinPage(pPage);
     pOther = pPage->pCache;
@@ -46590,7 +46656,7 @@ static SQLITE_NOINLINE PgHdr1 *pcache1FetchStage2(
       pcache1FreePage(pPage);
       pPage = 0;
     }else{
-      pGroup->nCurrentPage -= (pOther->bPurgeable - pCache->bPurgeable);
+      pGroup->nPurgeable -= (pOther->bPurgeable - pCache->bPurgeable);
     }
   }
 
@@ -46609,7 +46675,6 @@ static SQLITE_NOINLINE PgHdr1 *pcache1FetchStage2(
     pPage->pCache = pCache;
     pPage->pLruPrev = 0;
     pPage->pLruNext = 0;
-    pPage->isPinned = 1;
     *(void **)pPage->page.pExtra = 0;
     pCache->apHash[h] = pPage;
     if( iKey>pCache->iMaxKey ){
@@ -46695,7 +46760,7 @@ static PgHdr1 *pcache1FetchNoMutex(
   ** Otherwise (page not in hash and createFlag!=0) continue with
   ** subsequent steps to try to create the page. */
   if( pPage ){
-    if( !pPage->isPinned ){
+    if( PAGE_IS_UNPINNED(pPage) ){
       return pcache1PinPage(pPage);
     }else{
       return pPage;
@@ -46770,9 +46835,9 @@ static void pcache1Unpin(
   ** part of the PGroup LRU list.
   */
   assert( pPage->pLruPrev==0 && pPage->pLruNext==0 );
-  assert( pPage->isPinned==1 );
+  assert( PAGE_IS_PINNED(pPage) );
 
-  if( reuseUnlikely || pGroup->nCurrentPage>pGroup->nMaxPage ){
+  if( reuseUnlikely || pGroup->nPurgeable>pGroup->nMaxPage ){
     pcache1RemoveFromHash(pPage, 1);
   }else{
     /* Add the page to the PGroup LRU list. */
@@ -46781,7 +46846,6 @@ static void pcache1Unpin(
     (pPage->pLruNext = *ppFirst)->pLruPrev = pPage;
     *ppFirst = pPage;
     pCache->nRecyclable++;
-    pPage->isPinned = 0;
   }
 
   pcache1LeaveMutex(pCache->pGroup);
@@ -46925,7 +46989,7 @@ SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){
 #ifdef SQLITE_PCACHE_SEPARATE_HEADER
       nFree += sqlite3MemSize(p);
 #endif
-      assert( p->isPinned==0 );
+      assert( PAGE_IS_UNPINNED(p) );
       pcache1PinPage(p);
       pcache1RemoveFromHash(p, 1);
     }
@@ -46949,10 +47013,10 @@ SQLITE_PRIVATE void sqlite3PcacheStats(
   PgHdr1 *p;
   int nRecyclable = 0;
   for(p=pcache1.grp.lru.pLruNext; p && !p->isAnchor; p=p->pLruNext){
-    assert( p->isPinned==0 );
+    assert( PAGE_IS_UNPINNED(p) );
     nRecyclable++;
   }
-  *pnCurrent = pcache1.grp.nCurrentPage;
+  *pnCurrent = pcache1.grp.nPurgeable;
   *pnMax = (int)pcache1.grp.nMaxPage;
   *pnMin = (int)pcache1.grp.nMinPage;
   *pnRecyclable = nRecyclable;
@@ -47507,11 +47571,11 @@ SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, int iBatch, sqlite3_int64
 
 /* #include "sqliteInt.h" */
 
-/* Additional values that can be added to the sync_flags argument of
-** sqlite3WalFrames():
+/* Macros for extracting appropriate sync flags for either transaction
+** commits (WAL_SYNC_FLAGS(X)) or for checkpoint ops (CKPT_SYNC_FLAGS(X)):
 */
-#define WAL_SYNC_TRANSACTIONS  0x20   /* Sync at the end of each transaction */
-#define SQLITE_SYNC_MASK       0x13   /* Mask off the SQLITE_SYNC_* values */
+#define WAL_SYNC_FLAGS(X)   ((X)&0x03)
+#define CKPT_SYNC_FLAGS(X)  (((X)>>2)&0x03)
 
 #ifdef SQLITE_OMIT_WAL
 # define sqlite3WalOpen(x,y,z)                   0
@@ -47744,8 +47808,8 @@ int sqlite3PagerTrace=1;  /* True to enable tracing */
 ** associated file-descriptor is returned. FILEHANDLEID() takes an sqlite3_file
 ** struct as its argument.
 */
-#define PAGERID(p) ((int)(p->fd))
-#define FILEHANDLEID(fd) ((int)fd)
+#define PAGERID(p) (SQLITE_PTR_TO_INT(p->fd))
+#define FILEHANDLEID(fd) (SQLITE_PTR_TO_INT(fd))
 
 /*
 ** The Pager.eState variable stores the current 'state' of a pager. A
@@ -48232,6 +48296,18 @@ struct PagerSavepoint {
 **   is set to zero in all other states. In PAGER_ERROR state, Pager.errCode 
 **   is always set to SQLITE_FULL, SQLITE_IOERR or one of the SQLITE_IOERR_XXX 
 **   sub-codes.
+**
+** syncFlags, walSyncFlags
+**
+**   syncFlags is either SQLITE_SYNC_NORMAL (0x02) or SQLITE_SYNC_FULL (0x03).
+**   syncFlags is used for rollback mode.  walSyncFlags is used for WAL mode
+**   and contains the flags used to sync the checkpoint operations in the
+**   lower two bits, and sync flags used for transaction commits in the WAL
+**   file in bits 0x04 and 0x08.  In other words, to get the correct sync flags
+**   for checkpoint operations, use (walSyncFlags&0x03) and to get the correct
+**   sync flags for transaction commit, use ((walSyncFlags>>2)&0x03).  Note
+**   that with synchronous=NORMAL in WAL mode, transaction commit is not synced
+**   meaning that the 0x04 and 0x08 bits are both zero.
 */
 struct Pager {
   sqlite3_vfs *pVfs;          /* OS functions to use for IO */
@@ -48241,9 +48317,8 @@ struct Pager {
   u8 noSync;                  /* Do not sync the journal if true */
   u8 fullSync;                /* Do extra syncs of the journal for robustness */
   u8 extraSync;               /* sync directory after journal delete */
-  u8 ckptSyncFlags;           /* SYNC_NORMAL or SYNC_FULL for checkpoint */
-  u8 walSyncFlags;            /* SYNC_NORMAL or SYNC_FULL for wal writes */
   u8 syncFlags;               /* SYNC_NORMAL or SYNC_FULL otherwise */
+  u8 walSyncFlags;            /* See description above */
   u8 tempFile;                /* zFilename is a temporary or immutable file */
   u8 noLock;                  /* Do not lock (except in WAL mode) */
   u8 readOnly;                /* True for a read-only database */
@@ -48563,6 +48638,7 @@ static int assert_pager_state(Pager *p){
       assert( isOpen(p->jfd) 
            || p->journalMode==PAGER_JOURNALMODE_OFF 
            || p->journalMode==PAGER_JOURNALMODE_WAL 
+           || (sqlite3OsDeviceCharacteristics(p->fd)&SQLITE_IOCAP_BATCH_ATOMIC)
       );
       assert( pPager->dbOrigSize<=pPager->dbHintSize );
       break;
@@ -48574,6 +48650,7 @@ static int assert_pager_state(Pager *p){
       assert( isOpen(p->jfd) 
            || p->journalMode==PAGER_JOURNALMODE_OFF 
            || p->journalMode==PAGER_JOURNALMODE_WAL 
+           || (sqlite3OsDeviceCharacteristics(p->fd)&SQLITE_IOCAP_BATCH_ATOMIC)
       );
       break;
 
@@ -48784,34 +48861,47 @@ static int pagerLockDb(Pager *pPager, int eLock){
 }
 
 /*
-** This function determines whether or not the atomic-write optimization
-** can be used with this pager. The optimization can be used if:
+** This function determines whether or not the atomic-write or
+** atomic-batch-write optimizations can be used with this pager. The
+** atomic-write optimization can be used if:
 **
 **  (a) the value returned by OsDeviceCharacteristics() indicates that
 **      a database page may be written atomically, and
 **  (b) the value returned by OsSectorSize() is less than or equal
 **      to the page size.
 **
-** The optimization is also always enabled for temporary files. It is
-** an error to call this function if pPager is opened on an in-memory
-** database.
+** If it can be used, then the value returned is the size of the journal 
+** file when it contains rollback data for exactly one page.
 **
-** If the optimization cannot be used, 0 is returned. If it can be used,
-** then the value returned is the size of the journal file when it
-** contains rollback data for exactly one page.
+** The atomic-batch-write optimization can be used if OsDeviceCharacteristics()
+** returns a value with the SQLITE_IOCAP_BATCH_ATOMIC bit set. -1 is
+** returned in this case.
+**
+** If neither optimization can be used, 0 is returned.
 */
-#ifdef SQLITE_ENABLE_ATOMIC_WRITE
 static int jrnlBufferSize(Pager *pPager){
   assert( !MEMDB );
-  if( !pPager->tempFile ){
-    int dc;                           /* Device characteristics */
-    int nSector;                      /* Sector size */
-    int szPage;                       /* Page size */
 
-    assert( isOpen(pPager->fd) );
-    dc = sqlite3OsDeviceCharacteristics(pPager->fd);
-    nSector = pPager->sectorSize;
-    szPage = pPager->pageSize;
+#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \
+ || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
+  int dc;                           /* Device characteristics */
+
+  assert( isOpen(pPager->fd) );
+  dc = sqlite3OsDeviceCharacteristics(pPager->fd);
+#else
+  UNUSED_PARAMETER(pPager);
+#endif
+
+#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+  if( dc&SQLITE_IOCAP_BATCH_ATOMIC ){
+    return -1;
+  }
+#endif
+
+#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+  {
+    int nSector = pPager->sectorSize;
+    int szPage = pPager->pageSize;
 
     assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
     assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
@@ -48821,11 +48911,11 @@ static int jrnlBufferSize(Pager *pPager){
   }
 
   return JOURNAL_HDR_SZ(pPager) + JOURNAL_PG_SZ(pPager);
-}
-#else
-# define jrnlBufferSize(x) 0
 #endif
 
+  return 0;
+}
+
 /*
 ** If SQLITE_CHECK_PAGES is defined then we do some sanity checking
 ** on the cache using a hash function.  This is used for testing
@@ -48907,6 +48997,7 @@ static int readMasterJournal(sqlite3_file *pJrnl, char *zMaster, u32 nMaster){
    || szJ<16
    || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-16, &len))
    || len>=nMaster 
+   || len>szJ-16
    || len==0 
    || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-12, &cksum))
    || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, aMagic, 8, szJ-8))
@@ -49628,7 +49719,9 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){
   }
 
   releaseAllSavepoints(pPager);
-  assert( isOpen(pPager->jfd) || pPager->pInJournal==0 );
+  assert( isOpen(pPager->jfd) || pPager->pInJournal==0 
+      || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_BATCH_ATOMIC)
+  );
   if( isOpen(pPager->jfd) ){
     assert( !pagerUseWal(pPager) );
 
@@ -50396,6 +50489,7 @@ static int pager_playback(Pager *pPager, int isHot){
   char *zMaster = 0;       /* Name of master journal file if any */
   int needPagerReset;      /* True to reset page prior to first page rollback */
   int nPlayback = 0;       /* Total number of pages restored from journal */
+  u32 savedPageSize = pPager->pageSize;
 
   /* Figure out how many records are in the journal.  Abort early if
   ** the journal is empty.
@@ -50525,6 +50619,9 @@ static int pager_playback(Pager *pPager, int isHot){
   assert( 0 );
 
 end_playback:
+  if( rc==SQLITE_OK ){
+    rc = sqlite3PagerSetPagesize(pPager, &savedPageSize, -1);
+  }
   /* Following a rollback, the database file should be back in its original
   ** state prior to the start of the transaction, so invoke the
   ** SQLITE_FCNTL_DB_UNCHANGED file-control method to disable the
@@ -50583,7 +50680,8 @@ end_playback:
 
 
 /*
-** Read the content for page pPg out of the database file and into 
+** Read the content for page pPg out of the database file (or out of
+** the WAL if that is where the most recent copy if found) into 
 ** pPg->pData. A shared lock or greater must be held on the database
 ** file before this function is called.
 **
@@ -50593,30 +50691,33 @@ end_playback:
 ** If an IO error occurs, then the IO error is returned to the caller.
 ** Otherwise, SQLITE_OK is returned.
 */
-static int readDbPage(PgHdr *pPg, u32 iFrame){
+static int readDbPage(PgHdr *pPg){
   Pager *pPager = pPg->pPager; /* Pager object associated with page pPg */
-  Pgno pgno = pPg->pgno;       /* Page number to read */
   int rc = SQLITE_OK;          /* Return code */
-  int pgsz = pPager->pageSize; /* Number of bytes to read */
+
+#ifndef SQLITE_OMIT_WAL
+  u32 iFrame = 0;              /* Frame of WAL containing pgno */
 
   assert( pPager->eState>=PAGER_READER && !MEMDB );
   assert( isOpen(pPager->fd) );
 
-#ifndef SQLITE_OMIT_WAL
+  if( pagerUseWal(pPager) ){
+    rc = sqlite3WalFindFrame(pPager->pWal, pPg->pgno, &iFrame);
+    if( rc ) return rc;
+  }
   if( iFrame ){
-    /* Try to pull the page from the write-ahead log. */
-    rc = sqlite3WalReadFrame(pPager->pWal, iFrame, pgsz, pPg->pData);
+    rc = sqlite3WalReadFrame(pPager->pWal, iFrame,pPager->pageSize,pPg->pData);
   }else
 #endif
   {
-    i64 iOffset = (pgno-1)*(i64)pPager->pageSize;
-    rc = sqlite3OsRead(pPager->fd, pPg->pData, pgsz, iOffset);
+    i64 iOffset = (pPg->pgno-1)*(i64)pPager->pageSize;
+    rc = sqlite3OsRead(pPager->fd, pPg->pData, pPager->pageSize, iOffset);
     if( rc==SQLITE_IOERR_SHORT_READ ){
       rc = SQLITE_OK;
     }
   }
 
-  if( pgno==1 ){
+  if( pPg->pgno==1 ){
     if( rc ){
       /* If the read is unsuccessful, set the dbFileVers[] to something
       ** that will never be a valid file version.  dbFileVers[] is a copy
@@ -50636,13 +50737,13 @@ static int readDbPage(PgHdr *pPg, u32 iFrame){
       memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers));
     }
   }
-  CODEC1(pPager, pPg->pData, pgno, 3, rc = SQLITE_NOMEM_BKPT);
+  CODEC1(pPager, pPg->pData, pPg->pgno, 3, rc = SQLITE_NOMEM_BKPT);
 
   PAGER_INCR(sqlite3_pager_readdb_count);
   PAGER_INCR(pPager->nRead);
-  IOTRACE(("PGIN %p %d\n", pPager, pgno));
+  IOTRACE(("PGIN %p %d\n", pPager, pPg->pgno));
   PAGERTRACE(("FETCH %d page %d hash(%08x)\n",
-               PAGERID(pPager), pgno, pager_pagehash(pPg)));
+               PAGERID(pPager), pPg->pgno, pager_pagehash(pPg)));
 
   return rc;
 }
@@ -50693,11 +50794,7 @@ static int pagerUndoCallback(void *pCtx, Pgno iPg){
     if( sqlite3PcachePageRefcount(pPg)==1 ){
       sqlite3PcacheDrop(pPg);
     }else{
-      u32 iFrame = 0;
-      rc = sqlite3WalFindFrame(pPager->pWal, pPg->pgno, &iFrame);
-      if( rc==SQLITE_OK ){
-        rc = readDbPage(pPg, iFrame);
-      }
+      rc = readDbPage(pPg);
       if( rc==SQLITE_OK ){
         pPager->xReiniter(pPg);
       }
@@ -51203,20 +51300,17 @@ SQLITE_PRIVATE void sqlite3PagerSetFlags(
   }
   if( pPager->noSync ){
     pPager->syncFlags = 0;
-    pPager->ckptSyncFlags = 0;
   }else if( pgFlags & PAGER_FULLFSYNC ){
     pPager->syncFlags = SQLITE_SYNC_FULL;
-    pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
-  }else if( pgFlags & PAGER_CKPT_FULLFSYNC ){
-    pPager->syncFlags = SQLITE_SYNC_NORMAL;
-    pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
   }else{
     pPager->syncFlags = SQLITE_SYNC_NORMAL;
-    pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL;
   }
-  pPager->walSyncFlags = pPager->syncFlags;
+  pPager->walSyncFlags = (pPager->syncFlags<<2);
   if( pPager->fullSync ){
-    pPager->walSyncFlags |= WAL_SYNC_TRANSACTIONS;
+    pPager->walSyncFlags |= pPager->syncFlags;
+  }
+  if( (pgFlags & PAGER_CKPT_FULLFSYNC) && !pPager->noSync ){
+    pPager->walSyncFlags |= (SQLITE_SYNC_FULL<<2);
   }
   if( pgFlags & PAGER_CACHESPILL ){
     pPager->doNotSpill &= ~SPILLFLAG_OFF;
@@ -51715,7 +51809,7 @@ SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager, sqlite3 *db){
   pPager->exclusiveMode = 0;
 #ifndef SQLITE_OMIT_WAL
   assert( db || pPager->pWal==0 );
-  sqlite3WalClose(pPager->pWal, db, pPager->ckptSyncFlags, pPager->pageSize,
+  sqlite3WalClose(pPager->pWal, db, pPager->walSyncFlags, pPager->pageSize,
       (db && (db->flags & SQLITE_NoCkptOnClose) ? 0 : pTmp)
   );
   pPager->pWal = 0;
@@ -52183,6 +52277,13 @@ static int pagerStress(void *p, PgHdr *pPg){
       rc = pagerWalFrames(pPager, pPg, 0, 0);
     }
   }else{
+    
+#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+    if( pPager->tempFile==0 ){
+      rc = sqlite3JournalCreate(pPager->jfd);
+      if( rc!=SQLITE_OK ) return pager_error(pPager, rc);
+    }
+#endif
   
     /* Sync the journal file if required. */
     if( pPg->flags&PGHDR_NEED_SYNC 
@@ -52516,13 +52617,11 @@ act_like_temp_file:
     assert( pPager->extraSync==0 );
     assert( pPager->syncFlags==0 );
     assert( pPager->walSyncFlags==0 );
-    assert( pPager->ckptSyncFlags==0 );
   }else{
     pPager->fullSync = 1;
     pPager->extraSync = 0;
     pPager->syncFlags = SQLITE_SYNC_NORMAL;
-    pPager->walSyncFlags = SQLITE_SYNC_NORMAL | WAL_SYNC_TRANSACTIONS;
-    pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL;
+    pPager->walSyncFlags = SQLITE_SYNC_NORMAL | (SQLITE_SYNC_NORMAL<<2);
   }
   /* pPager->pFirst = 0; */
   /* pPager->pFirstSynced = 0; */
@@ -52942,7 +53041,8 @@ SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager){
 ** nothing to rollback, so this routine is a no-op.
 */ 
 static void pagerUnlockIfUnused(Pager *pPager){
-  if( pPager->nMmapOut==0 && (sqlite3PcacheRefCount(pPager->pPCache)==0) ){
+  if( sqlite3PcacheRefCount(pPager->pPCache)==0 ){
+    assert( pPager->nMmapOut==0 ); /* because page1 is never memory mapped */
     pagerUnlockAndRollback(pPager);
   }
 }
@@ -53083,14 +53183,9 @@ static int getPageNormal(
       memset(pPg->pData, 0, pPager->pageSize);
       IOTRACE(("ZERO %p %d\n", pPager, pgno));
     }else{
-      u32 iFrame = 0;                 /* Frame to read from WAL file */
-      if( pagerUseWal(pPager) ){
-        rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iFrame);
-        if( rc!=SQLITE_OK ) goto pager_acquire_err;
-      }
       assert( pPg->pPager==pPager );
       pPager->aStat[PAGER_STAT_MISS]++;
-      rc = readDbPage(pPg, iFrame);
+      rc = readDbPage(pPg);
       if( rc!=SQLITE_OK ){
         goto pager_acquire_err;
       }
@@ -53233,25 +53328,39 @@ SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){
 /*
 ** Release a page reference.
 **
-** If the number of references to the page drop to zero, then the
-** page is added to the LRU list.  When all references to all pages
-** are released, a rollback occurs and the lock on the database is
-** removed.
+** The sqlite3PagerUnref() and sqlite3PagerUnrefNotNull() may only be
+** used if we know that the page being released is not the last page.
+** The btree layer always holds page1 open until the end, so these first
+** to routines can be used to release any page other than BtShared.pPage1.
+**
+** Use sqlite3PagerUnrefPageOne() to release page1.  This latter routine
+** checks the total number of outstanding pages and if the number of
+** pages reaches zero it drops the database lock.
 */
 SQLITE_PRIVATE void sqlite3PagerUnrefNotNull(DbPage *pPg){
-  Pager *pPager;
+  TESTONLY( Pager *pPager = pPg->pPager; )
   assert( pPg!=0 );
-  pPager = pPg->pPager;
   if( pPg->flags & PGHDR_MMAP ){
+    assert( pPg->pgno!=1 );  /* Page1 is never memory mapped */
     pagerReleaseMapPage(pPg);
   }else{
     sqlite3PcacheRelease(pPg);
   }
-  pagerUnlockIfUnused(pPager);
+  /* Do not use this routine to release the last reference to page1 */
+  assert( sqlite3PcacheRefCount(pPager->pPCache)>0 );
 }
 SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){
   if( pPg ) sqlite3PagerUnrefNotNull(pPg);
 }
+SQLITE_PRIVATE void sqlite3PagerUnrefPageOne(DbPage *pPg){
+  Pager *pPager;
+  assert( pPg!=0 );
+  assert( pPg->pgno==1 );
+  assert( (pPg->flags & PGHDR_MMAP)==0 ); /* Page1 is never memory mapped */
+  pPager = pPg->pPager;
+  sqlite3PcacheRelease(pPg);
+  pagerUnlockIfUnused(pPager);
+}
 
 /*
 ** This function is called at the start of every write transaction.
@@ -53963,6 +54072,21 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
         sqlite3PcacheCleanAll(pPager->pPCache);
       }
     }else{
+      /* The bBatch boolean is true if the batch-atomic-write commit method
+      ** should be used.  No rollback journal is created if batch-atomic-write
+      ** is enabled.
+      */
+      sqlite3_file *fd = pPager->fd;
+#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+      const int bBatch = zMaster==0    /* An SQLITE_IOCAP_BATCH_ATOMIC commit */
+        && (sqlite3OsDeviceCharacteristics(fd) & SQLITE_IOCAP_BATCH_ATOMIC)
+        && !pPager->noSync
+        && sqlite3JournalIsInMemory(pPager->jfd);
+#else
+# define bBatch 0
+#endif
+
+#ifdef SQLITE_ENABLE_ATOMIC_WRITE
       /* The following block updates the change-counter. Exactly how it
       ** does this depends on whether or not the atomic-update optimization
       ** was enabled at compile time, and if this transaction meets the 
@@ -53986,33 +54110,40 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
       ** in 'direct' mode. In this case the journal file will never be
       ** created for this transaction.
       */
-  #ifdef SQLITE_ENABLE_ATOMIC_WRITE
-      PgHdr *pPg;
-      assert( isOpen(pPager->jfd) 
-           || pPager->journalMode==PAGER_JOURNALMODE_OFF 
-           || pPager->journalMode==PAGER_JOURNALMODE_WAL 
-      );
-      if( !zMaster && isOpen(pPager->jfd) 
-       && pPager->journalOff==jrnlBufferSize(pPager) 
-       && pPager->dbSize>=pPager->dbOrigSize
-       && (0==(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty)
-      ){
-        /* Update the db file change counter via the direct-write method. The 
-        ** following call will modify the in-memory representation of page 1 
-        ** to include the updated change counter and then write page 1 
-        ** directly to the database file. Because of the atomic-write 
-        ** property of the host file-system, this is safe.
-        */
-        rc = pager_incr_changecounter(pPager, 1);
-      }else{
-        rc = sqlite3JournalCreate(pPager->jfd);
-        if( rc==SQLITE_OK ){
-          rc = pager_incr_changecounter(pPager, 0);
+      if( bBatch==0 ){
+        PgHdr *pPg;
+        assert( isOpen(pPager->jfd) 
+            || pPager->journalMode==PAGER_JOURNALMODE_OFF 
+            || pPager->journalMode==PAGER_JOURNALMODE_WAL 
+            );
+        if( !zMaster && isOpen(pPager->jfd) 
+         && pPager->journalOff==jrnlBufferSize(pPager) 
+         && pPager->dbSize>=pPager->dbOrigSize
+         && (!(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty)
+        ){
+          /* Update the db file change counter via the direct-write method. The 
+          ** following call will modify the in-memory representation of page 1 
+          ** to include the updated change counter and then write page 1 
+          ** directly to the database file. Because of the atomic-write 
+          ** property of the host file-system, this is safe.
+          */
+          rc = pager_incr_changecounter(pPager, 1);
+        }else{
+          rc = sqlite3JournalCreate(pPager->jfd);
+          if( rc==SQLITE_OK ){
+            rc = pager_incr_changecounter(pPager, 0);
+          }
         }
       }
-  #else
+#else 
+#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+      if( zMaster ){
+        rc = sqlite3JournalCreate(pPager->jfd);
+        if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
+      }
+#endif
       rc = pager_incr_changecounter(pPager, 0);
-  #endif
+#endif
       if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
   
       /* Write the master journal name into the journal file. If a master 
@@ -54035,8 +54166,24 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
       */
       rc = syncJournal(pPager, 0);
       if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
-  
+
+      if( bBatch ){
+        /* The pager is now in DBMOD state. But regardless of what happens
+        ** next, attempting to play the journal back into the database would
+        ** be unsafe. Close it now to make sure that does not happen.  */
+        sqlite3OsClose(pPager->jfd);
+        rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, 0);
+        if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
+      }
       rc = pager_write_pagelist(pPager,sqlite3PcacheDirtyList(pPager->pPCache));
+      if( bBatch ){
+        if( rc==SQLITE_OK ){
+          rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0);
+        }else{
+          sqlite3OsFileControl(fd, SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE, 0);
+        }
+      }
+
       if( rc!=SQLITE_OK ){
         assert( rc!=SQLITE_IOERR_BLOCKED );
         goto commit_phase_one_exit;
@@ -54937,7 +55084,7 @@ SQLITE_PRIVATE int sqlite3PagerCheckpoint(
     rc = sqlite3WalCheckpoint(pPager->pWal, db, eMode,
         (eMode==SQLITE_CHECKPOINT_PASSIVE ? 0 : pPager->xBusyHandler),
         pPager->pBusyHandlerArg,
-        pPager->ckptSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace,
+        pPager->walSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace,
         pnLog, pnCkpt
     );
   }
@@ -55094,7 +55241,7 @@ SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager, sqlite3 *db){
   if( rc==SQLITE_OK && pPager->pWal ){
     rc = pagerExclusiveLock(pPager);
     if( rc==SQLITE_OK ){
-      rc = sqlite3WalClose(pPager->pWal, db, pPager->ckptSyncFlags,
+      rc = sqlite3WalClose(pPager->pWal, db, pPager->walSyncFlags,
                            pPager->pageSize, (u8*)pPager->pTmpSpace);
       pPager->pWal = 0;
       pagerFixMaplimit(pPager);
@@ -56966,9 +57113,7 @@ static int walCheckpoint(
       pInfo->nBackfillAttempted = mxSafeFrame;
 
       /* Sync the WAL to disk */
-      if( sync_flags ){
-        rc = sqlite3OsSync(pWal->pWalFd, sync_flags);
-      }
+      rc = sqlite3OsSync(pWal->pWalFd, CKPT_SYNC_FLAGS(sync_flags));
 
       /* If the database may grow as a result of this checkpoint, hint
       ** about the eventual size of the db file to the VFS layer.
@@ -57009,8 +57154,8 @@ static int walCheckpoint(
           i64 szDb = pWal->hdr.nPage*(i64)szPage;
           testcase( IS_BIG_INT(szDb) );
           rc = sqlite3OsTruncate(pWal->pDbFd, szDb);
-          if( rc==SQLITE_OK && sync_flags ){
-            rc = sqlite3OsSync(pWal->pDbFd, sync_flags);
+          if( rc==SQLITE_OK ){
+            rc = sqlite3OsSync(pWal->pDbFd, CKPT_SYNC_FLAGS(sync_flags));
           }
         }
         if( rc==SQLITE_OK ){
@@ -58116,8 +58261,8 @@ static int walWriteToLog(
     iOffset += iFirstAmt;
     iAmt -= iFirstAmt;
     pContent = (void*)(iFirstAmt + (char*)pContent);
-    assert( p->syncFlags & (SQLITE_SYNC_NORMAL|SQLITE_SYNC_FULL) );
-    rc = sqlite3OsSync(p->pFd, p->syncFlags & SQLITE_SYNC_MASK);
+    assert( WAL_SYNC_FLAGS(p->syncFlags)!=0 );
+    rc = sqlite3OsSync(p->pFd, WAL_SYNC_FLAGS(p->syncFlags));
     if( iAmt==0 || rc ) return rc;
   }
   rc = sqlite3OsWrite(p->pFd, pContent, iAmt, iOffset);
@@ -58287,10 +58432,10 @@ SQLITE_PRIVATE int sqlite3WalFrames(
     ** an out-of-order write following a WAL restart could result in
     ** database corruption.  See the ticket:
     **
-    **     http://localhost:591/sqlite/info/ff5be73dee
+    **     https://sqlite.org/src/info/ff5be73dee
     */
-    if( pWal->syncHeader && sync_flags ){
-      rc = sqlite3OsSync(pWal->pWalFd, sync_flags & SQLITE_SYNC_MASK);
+    if( pWal->syncHeader ){
+      rc = sqlite3OsSync(pWal->pWalFd, CKPT_SYNC_FLAGS(sync_flags));
       if( rc ) return rc;
     }
   }
@@ -58365,7 +58510,7 @@ SQLITE_PRIVATE int sqlite3WalFrames(
   ** sector boundary is synced; the part of the last frame that extends
   ** past the sector boundary is written after the sync.
   */
-  if( isCommit && (sync_flags & WAL_SYNC_TRANSACTIONS)!=0 ){
+  if( isCommit && WAL_SYNC_FLAGS(sync_flags)!=0 ){
     int bSync = 1;
     if( pWal->padToSectorBoundary ){
       int sectorSize = sqlite3SectorSize(pWal->pWalFd);
@@ -58381,7 +58526,7 @@ SQLITE_PRIVATE int sqlite3WalFrames(
     }
     if( bSync ){
       assert( rc==SQLITE_OK );
-      rc = sqlite3OsSync(w.pFd, sync_flags & SQLITE_SYNC_MASK);
+      rc = sqlite3OsSync(w.pFd, WAL_SYNC_FLAGS(sync_flags));
     }
   }
 
@@ -59228,6 +59373,11 @@ struct CellInfo {
 **    eState==FAULT:                   Cursor fault with skipNext as error code.
 */
 struct BtCursor {
+  u8 eState;                /* One of the CURSOR_XXX constants (see below) */
+  u8 curFlags;              /* zero or more BTCF_* flags defined below */
+  u8 curPagerFlags;         /* Flags to send to sqlite3PagerGet() */
+  u8 hints;                 /* As configured by CursorSetHints() */
+  int nOvflAlloc;           /* Allocated size of aOverflow[] array */
   Btree *pBtree;            /* The Btree to which this cursor belongs */
   BtShared *pBt;            /* The BtShared this cursor points to */
   BtCursor *pNext;          /* Forms a linked list of all cursors */
@@ -59236,13 +59386,8 @@ struct BtCursor {
   i64 nKey;                 /* Size of pKey, or last integer key */
   void *pKey;               /* Saved key that was cursor last known position */
   Pgno pgnoRoot;            /* The root page of this tree */
-  int nOvflAlloc;           /* Allocated size of aOverflow[] array */
   int skipNext;    /* Prev() is noop if negative. Next() is noop if positive.
                    ** Error code if eState==CURSOR_FAULT */
-  u8 curFlags;              /* zero or more BTCF_* flags defined below */
-  u8 curPagerFlags;         /* Flags to send to sqlite3PagerGet() */
-  u8 eState;                /* One of the CURSOR_XXX constants (see below) */
-  u8 hints;                 /* As configured by CursorSetHints() */
   /* All fields above are zeroed when the cursor is allocated.  See
   ** sqlite3BtreeCursorZero().  Fields that follow must be manually
   ** initialized. */
@@ -59251,7 +59396,8 @@ struct BtCursor {
   u16 ix;                   /* Current index for apPage[iPage] */
   u16 aiIdx[BTCURSOR_MAX_DEPTH-1];     /* Current index in apPage[i] */
   struct KeyInfo *pKeyInfo;            /* Arg passed to comparison function */
-  MemPage *apPage[BTCURSOR_MAX_DEPTH]; /* Pages from root to current page */
+  MemPage *pPage;                        /* Current page */
+  MemPage *apPage[BTCURSOR_MAX_DEPTH-1]; /* Stack of parents of current page */
 };
 
 /*
@@ -60167,7 +60313,9 @@ static void downgradeAllSharedCacheTableLocks(Btree *p){
 
 #endif /* SQLITE_OMIT_SHARED_CACHE */
 
-static void releasePage(MemPage *pPage);  /* Forward reference */
+static void releasePage(MemPage *pPage);         /* Forward reference */
+static void releasePageOne(MemPage *pPage);      /* Forward reference */
+static void releasePageNotNull(MemPage *pPage);  /* Forward reference */
 
 /*
 ***** This routine is used inside of assert() only ****
@@ -60326,11 +60474,13 @@ static void btreeClearHasContent(BtShared *pBt){
 */
 static void btreeReleaseAllCursorPages(BtCursor *pCur){
   int i;
-  for(i=0; i<=pCur->iPage; i++){
-    releasePage(pCur->apPage[i]);
-    pCur->apPage[i] = 0;
+  if( pCur->iPage>=0 ){
+    for(i=0; i<pCur->iPage; i++){
+      releasePageNotNull(pCur->apPage[i]);
+    }
+    releasePageNotNull(pCur->pPage);
+    pCur->iPage = -1;
   }
-  pCur->iPage = -1;
 }
 
 /*
@@ -60459,7 +60609,7 @@ static int SQLITE_NOINLINE saveCursorsOnList(
           return rc;
         }
       }else{
-        testcase( p->iPage>0 );
+        testcase( p->iPage>=0 );
         btreeReleaseAllCursorPages(p);
       }
     }
@@ -60499,7 +60649,7 @@ static int btreeMoveto(
     if( pIdxKey==0 ) return SQLITE_NOMEM_BKPT;
     sqlite3VdbeRecordUnpack(pCur->pKeyInfo, (int)nKey, pKey, pIdxKey);
     if( pIdxKey->nField==0 ){
-      rc = SQLITE_CORRUPT_PGNO(pCur->apPage[pCur->iPage]->pgno);
+      rc = SQLITE_CORRUPT_BKPT;
       goto moveto_done;
     }
   }else{
@@ -60564,6 +60714,17 @@ SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur){
 }
 
 /*
+** Return a pointer to a fake BtCursor object that will always answer
+** false to the sqlite3BtreeCursorHasMoved() routine above.  The fake
+** cursor returned must not be used with any other Btree interface.
+*/
+SQLITE_PRIVATE BtCursor *sqlite3BtreeFakeValidCursor(void){
+  static u8 fakeCursor = CURSOR_VALID;
+  assert( offsetof(BtCursor, eState)==0 );
+  return (BtCursor*)&fakeCursor;
+}
+
+/*
 ** This routine restores a cursor back to its original position after it
 ** has been moved by some outside activity (such as a btree rebalance or
 ** a row having been deleted out from under the cursor).  
@@ -61112,8 +61273,11 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){
         int sz2 = 0;
         int sz = get2byte(&data[iFree+2]);
         int top = get2byte(&data[hdr+5]);
+        if( top>=iFree ){
+          return SQLITE_CORRUPT_PGNO(pPage->pgno);
+        }
         if( iFree2 ){
-          if( iFree+sz>iFree2 ) return SQLITE_CORRUPT_PGNO(pPage->pgno);
+          assert( iFree+sz<=iFree2 ); /* Verified by pageFindSlot() */
           sz2 = get2byte(&data[iFree2+2]);
           assert( iFree+sz+sz2+iFree2-(iFree+sz) <= usableSize );
           memmove(&data[iFree+sz+sz2], &data[iFree+sz], iFree2-(iFree+sz));
@@ -61202,16 +61366,10 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){
   int pc = get2byte(&aData[iAddr]);
   int x;
   int usableSize = pPg->pBt->usableSize;
+  int size;            /* Size of the free slot */
 
   assert( pc>0 );
-  do{
-    int size;            /* Size of the free slot */
-    /* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of
-    ** increasing offset. */
-    if( pc>usableSize-4 || pc<iAddr+4 ){
-      *pRc = SQLITE_CORRUPT_PGNO(pPg->pgno);
-      return 0;
-    }
+  while( pc<=usableSize-4 ){
     /* EVIDENCE-OF: R-22710-53328 The third and fourth bytes of each
     ** freeblock form a big-endian integer which is the size of the freeblock
     ** in bytes, including the 4-byte header. */
@@ -61219,7 +61377,7 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){
     if( (x = size - nByte)>=0 ){
       testcase( x==4 );
       testcase( x==3 );
-      if( pc < pPg->cellOffset+2*pPg->nCell || size+pc > usableSize ){
+      if( size+pc > usableSize ){
         *pRc = SQLITE_CORRUPT_PGNO(pPg->pgno);
         return 0;
       }else if( x<4 ){
@@ -61240,7 +61398,11 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){
     }
     iAddr = pc;
     pc = get2byte(&aData[pc]);
-  }while( pc );
+    if( pc<iAddr+size ) break;
+  }
+  if( pc ){
+    *pRc = SQLITE_CORRUPT_PGNO(pPg->pgno);
+  }
 
   return 0;
 }
@@ -61354,7 +61516,7 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
   u8 hdr;                               /* Page header size.  0 or 100 */
   u8 nFrag = 0;                         /* Reduction in fragmentation */
   u16 iOrigSize = iSize;                /* Original value of iSize */
-  u32 iLast = pPage->pBt->usableSize-4; /* Largest possible freeblock offset */
+  u16 x;                                /* Offset to cell content area */
   u32 iEnd = iStart + iSize;            /* First byte past the iStart buffer */
   unsigned char *data = pPage->aData;   /* Page content */
 
@@ -61364,13 +61526,7 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
   assert( CORRUPT_DB || iEnd <= pPage->pBt->usableSize );
   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
   assert( iSize>=4 );   /* Minimum cell size is 4 */
-  assert( iStart<=iLast );
-
-  /* Overwrite deleted information with zeros when the secure_delete
-  ** option is enabled */
-  if( pPage->pBt->btsFlags & BTS_FAST_SECURE ){
-    memset(&data[iStart], 0, iSize);
-  }
+  assert( iStart<=pPage->pBt->usableSize-4 );
 
   /* The list of freeblocks must be in ascending order.  Find the 
   ** spot on the list where iStart should be inserted.
@@ -61387,7 +61543,9 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
       }
       iPtr = iFreeBlk;
     }
-    if( iFreeBlk>iLast ) return SQLITE_CORRUPT_PGNO(pPage->pgno);
+    if( iFreeBlk>pPage->pBt->usableSize-4 ){
+      return SQLITE_CORRUPT_PGNO(pPage->pgno);
+    }
     assert( iFreeBlk>iPtr || iFreeBlk==0 );
   
     /* At this point:
@@ -61423,19 +61581,25 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
     if( nFrag>data[hdr+7] ) return SQLITE_CORRUPT_PGNO(pPage->pgno);
     data[hdr+7] -= nFrag;
   }
-  if( iStart==get2byte(&data[hdr+5]) ){
+  x = get2byte(&data[hdr+5]);
+  if( iStart<=x ){
     /* The new freeblock is at the beginning of the cell content area,
     ** so just extend the cell content area rather than create another
     ** freelist entry */
-    if( iPtr!=hdr+1 ) return SQLITE_CORRUPT_PGNO(pPage->pgno);
+    if( iStart<x || iPtr!=hdr+1 ) return SQLITE_CORRUPT_PGNO(pPage->pgno);
     put2byte(&data[hdr+1], iFreeBlk);
     put2byte(&data[hdr+5], iEnd);
   }else{
     /* Insert the new freeblock into the freelist */
     put2byte(&data[iPtr], iStart);
-    put2byte(&data[iStart], iFreeBlk);
-    put2byte(&data[iStart+2], iSize);
   }
+  if( pPage->pBt->btsFlags & BTS_FAST_SECURE ){
+    /* Overwrite deleted information with zeros when the secure_delete
+    ** option is enabled */
+    memset(&data[iStart], 0, iSize);
+  }
+  put2byte(&data[iStart], iFreeBlk);
+  put2byte(&data[iStart+2], iSize);
   pPage->nFree += iOrigSize;
   return SQLITE_OK;
 }
@@ -61750,7 +61914,7 @@ static Pgno btreePagecount(BtShared *pBt){
 }
 SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree *p){
   assert( sqlite3BtreeHoldsMutex(p) );
-  assert( ((p->pBt->nPage)&0x8000000)==0 );
+  assert( ((p->pBt->nPage)&0x80000000)==0 );
   return btreePagecount(p->pBt);
 }
 
@@ -61777,7 +61941,7 @@ static int getAndInitPage(
   int rc;
   DbPage *pDbPage;
   assert( sqlite3_mutex_held(pBt->mutex) );
-  assert( pCur==0 || ppPage==&pCur->apPage[pCur->iPage] );
+  assert( pCur==0 || ppPage==&pCur->pPage );
   assert( pCur==0 || bReadOnly==pCur->curPagerFlags );
   assert( pCur==0 || pCur->iPage>0 );
 
@@ -61811,7 +61975,10 @@ static int getAndInitPage(
   return SQLITE_OK;
 
 getAndInitPage_error:
-  if( pCur ) pCur->iPage--;
+  if( pCur ){
+    pCur->iPage--;
+    pCur->pPage = pCur->apPage[pCur->iPage];
+  }
   testcase( pgno==0 );
   assert( pgno!=0 || rc==SQLITE_CORRUPT );
   return rc;
@@ -61820,6 +61987,8 @@ getAndInitPage_error:
 /*
 ** Release a MemPage.  This should be called once for each prior
 ** call to btreeGetPage.
+**
+** Page1 is a special case and must be released using releasePageOne().
 */
 static void releasePageNotNull(MemPage *pPage){
   assert( pPage->aData );
@@ -61833,6 +62002,16 @@ static void releasePageNotNull(MemPage *pPage){
 static void releasePage(MemPage *pPage){
   if( pPage ) releasePageNotNull(pPage);
 }
+static void releasePageOne(MemPage *pPage){
+  assert( pPage!=0 );
+  assert( pPage->aData );
+  assert( pPage->pBt );
+  assert( pPage->pDbPage!=0 );
+  assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
+  assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData );
+  assert( sqlite3_mutex_held(pPage->pBt->mutex) );
+  sqlite3PagerUnrefPageOne(pPage->pDbPage);
+}
 
 /*
 ** Get an unused page.
@@ -62617,7 +62796,8 @@ SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *p){
 ** set to the value passed to this function as the second parameter,
 ** set it so.
 */
-#if SQLITE_DEFAULT_SYNCHRONOUS!=SQLITE_DEFAULT_WAL_SYNCHRONOUS
+#if SQLITE_DEFAULT_SYNCHRONOUS!=SQLITE_DEFAULT_WAL_SYNCHRONOUS \
+    && !defined(SQLITE_OMIT_WAL)
 static void setDefaultSyncFlag(BtShared *pBt, u8 safety_level){
   sqlite3 *db;
   Db *pDb;
@@ -62711,7 +62891,7 @@ static int lockBtree(BtShared *pBt){
       }else{
         setDefaultSyncFlag(pBt, SQLITE_DEFAULT_WAL_SYNCHRONOUS+1);
         if( isOpen==0 ){
-          releasePage(pPage1);
+          releasePageOne(pPage1);
           return SQLITE_OK;
         }
       }
@@ -62758,7 +62938,7 @@ static int lockBtree(BtShared *pBt){
       ** zero and return SQLITE_OK. The caller will call this function
       ** again with the correct page-size.
       */
-      releasePage(pPage1);
+      releasePageOne(pPage1);
       pBt->usableSize = usableSize;
       pBt->pageSize = pageSize;
       freeTempSpace(pBt);
@@ -62812,7 +62992,7 @@ static int lockBtree(BtShared *pBt){
   return SQLITE_OK;
 
 page1_init_failed:
-  releasePage(pPage1);
+  releasePageOne(pPage1);
   pBt->pPage1 = 0;
   return rc;
 }
@@ -62857,7 +63037,7 @@ static void unlockBtreeIfUnused(BtShared *pBt){
     assert( pPage1->aData );
     assert( sqlite3PagerRefcount(pBt->pPager)==1 );
     pBt->pPage1 = 0;
-    releasePageNotNull(pPage1);
+    releasePageOne(pPage1);
   }
 }
 
@@ -63709,7 +63889,6 @@ SQLITE_PRIVATE int sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode, int wr
   if( pBtree ){
     sqlite3BtreeEnter(pBtree);
     for(p=pBtree->pBt->pCursor; p; p=p->pNext){
-      int i;
       if( writeOnly && (p->curFlags & BTCF_WriteFlag)==0 ){
         if( p->eState==CURSOR_VALID || p->eState==CURSOR_SKIPNEXT ){
           rc = saveCursorPosition(p);
@@ -63723,10 +63902,7 @@ SQLITE_PRIVATE int sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode, int wr
         p->eState = CURSOR_FAULT;
         p->skipNext = errCode;
       }
-      for(i=0; i<=p->iPage; i++){
-        releasePage(p->apPage[i]);
-        p->apPage[i] = 0;
-      }
+      btreeReleaseAllCursorPages(p);
     }
     sqlite3BtreeLeave(pBtree);
   }
@@ -63783,7 +63959,7 @@ SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p, int tripCode, int writeOnly){
       if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage);
       testcase( pBt->nPage!=nPage );
       pBt->nPage = nPage;
-      releasePage(pPage1);
+      releasePageOne(pPage1);
     }
     assert( countValidCursors(pBt, 1)==0 );
     pBt->inTransaction = TRANS_READ;
@@ -64025,10 +64201,8 @@ SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor *p){
 SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
   Btree *pBtree = pCur->pBtree;
   if( pBtree ){
-    int i;
     BtShared *pBt = pCur->pBt;
     sqlite3BtreeEnter(pBtree);
-    sqlite3BtreeClearCursor(pCur);
     assert( pBt->pCursor!=0 );
     if( pBt->pCursor==pCur ){
       pBt->pCursor = pCur->pNext;
@@ -64042,12 +64216,10 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
         pPrev = pPrev->pNext;
       }while( ALWAYS(pPrev) );
     }
-    for(i=0; i<=pCur->iPage; i++){
-      releasePage(pCur->apPage[i]);
-    }
+    btreeReleaseAllCursorPages(pCur);
     unlockBtreeIfUnused(pBt);
     sqlite3_free(pCur->aOverflow);
-    /* sqlite3_free(pCur); */
+    sqlite3_free(pCur->pKey);
     sqlite3BtreeLeave(pBtree);
   }
   return SQLITE_OK;
@@ -64064,9 +64236,8 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
 #ifndef NDEBUG
   static void assertCellInfo(BtCursor *pCur){
     CellInfo info;
-    int iPage = pCur->iPage;
     memset(&info, 0, sizeof(info));
-    btreeParseCell(pCur->apPage[iPage], pCur->ix, &info);
+    btreeParseCell(pCur->pPage, pCur->ix, &info);
     assert( CORRUPT_DB || memcmp(&info, &pCur->info, sizeof(info))==0 );
   }
 #else
@@ -64074,9 +64245,8 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
 #endif
 static SQLITE_NOINLINE void getCellInfo(BtCursor *pCur){
   if( pCur->info.nSize==0 ){
-    int iPage = pCur->iPage;
     pCur->curFlags |= BTCF_ValidNKey;
-    btreeParseCell(pCur->apPage[iPage],pCur->ix,&pCur->info);
+    btreeParseCell(pCur->pPage,pCur->ix,&pCur->info);
   }else{
     assertCellInfo(pCur);
   }
@@ -64274,7 +64444,7 @@ static int accessPayload(
   unsigned char *aPayload;
   int rc = SQLITE_OK;
   int iIdx = 0;
-  MemPage *pPage = pCur->apPage[pCur->iPage]; /* Btree page of current entry */
+  MemPage *pPage = pCur->pPage;               /* Btree page of current entry */
   BtShared *pBt = pCur->pBt;                  /* Btree this cursor belongs to */
 #ifdef SQLITE_DIRECT_OVERFLOW_READ
   unsigned char * const pBufStart = pBuf;     /* Start of original out buffer */
@@ -64470,8 +64640,8 @@ static int accessPayload(
 SQLITE_PRIVATE int sqlite3BtreePayload(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
   assert( cursorHoldsMutex(pCur) );
   assert( pCur->eState==CURSOR_VALID );
-  assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] );
-  assert( pCur->ix<pCur->apPage[pCur->iPage]->nCell );
+  assert( pCur->iPage>=0 && pCur->pPage );
+  assert( pCur->ix<pCur->pPage->nCell );
   return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0);
 }
 
@@ -64528,18 +64698,23 @@ static const void *fetchPayload(
   BtCursor *pCur,      /* Cursor pointing to entry to read from */
   u32 *pAmt            /* Write the number of available bytes here */
 ){
-  u32 amt;
-  assert( pCur!=0 && pCur->iPage>=0 && pCur->apPage[pCur->iPage]);
+  int amt;
+  assert( pCur!=0 && pCur->iPage>=0 && pCur->pPage);
   assert( pCur->eState==CURSOR_VALID );
   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
   assert( cursorOwnsBtShared(pCur) );
-  assert( pCur->ix<pCur->apPage[pCur->iPage]->nCell );
+  assert( pCur->ix<pCur->pPage->nCell );
   assert( pCur->info.nSize>0 );
-  assert( pCur->info.pPayload>pCur->apPage[pCur->iPage]->aData || CORRUPT_DB );
-  assert( pCur->info.pPayload<pCur->apPage[pCur->iPage]->aDataEnd ||CORRUPT_DB);
-  amt = (int)(pCur->apPage[pCur->iPage]->aDataEnd - pCur->info.pPayload);
-  if( pCur->info.nLocal<amt ) amt = pCur->info.nLocal;
-  *pAmt = amt;
+  assert( pCur->info.pPayload>pCur->pPage->aData || CORRUPT_DB );
+  assert( pCur->info.pPayload<pCur->pPage->aDataEnd ||CORRUPT_DB);
+  amt = pCur->info.nLocal;
+  if( amt>(int)(pCur->pPage->aDataEnd - pCur->info.pPayload) ){
+    /* There is too little space on the page for the expected amount
+    ** of local content. Database must be corrupt. */
+    assert( CORRUPT_DB );
+    amt = MAX(0, (int)(pCur->pPage->aDataEnd - pCur->info.pPayload));
+  }
+  *pAmt = (u32)amt;
   return (void*)pCur->info.pPayload;
 }
 
@@ -64584,10 +64759,11 @@ static int moveToChild(BtCursor *pCur, u32 newPgno){
   }
   pCur->info.nSize = 0;
   pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
-  pCur->aiIdx[pCur->iPage++] = pCur->ix;
+  pCur->aiIdx[pCur->iPage] = pCur->ix;
+  pCur->apPage[pCur->iPage] = pCur->pPage;
   pCur->ix = 0;
-  return getAndInitPage(pBt, newPgno, &pCur->apPage[pCur->iPage],
-                        pCur, pCur->curPagerFlags);
+  pCur->iPage++;
+  return getAndInitPage(pBt, newPgno, &pCur->pPage, pCur, pCur->curPagerFlags);
 }
 
 #ifdef SQLITE_DEBUG
@@ -64621,20 +64797,23 @@ static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){
 ** the largest cell index.
 */
 static void moveToParent(BtCursor *pCur){
+  MemPage *pLeaf;
   assert( cursorOwnsBtShared(pCur) );
   assert( pCur->eState==CURSOR_VALID );
   assert( pCur->iPage>0 );
-  assert( pCur->apPage[pCur->iPage] );
+  assert( pCur->pPage );
   assertParentIndex(
     pCur->apPage[pCur->iPage-1], 
     pCur->aiIdx[pCur->iPage-1], 
-    pCur->apPage[pCur->iPage]->pgno
+    pCur->pPage->pgno
   );
   testcase( pCur->aiIdx[pCur->iPage-1] > pCur->apPage[pCur->iPage-1]->nCell );
   pCur->info.nSize = 0;
   pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
   pCur->ix = pCur->aiIdx[pCur->iPage-1];
-  releasePageNotNull(pCur->apPage[pCur->iPage--]);
+  pLeaf = pCur->pPage;
+  pCur->pPage = pCur->apPage[--pCur->iPage];
+  releasePageNotNull(pLeaf);
 }
 
 /*
@@ -64646,9 +64825,9 @@ static void moveToParent(BtCursor *pCur){
 ** single child page. This can only happen with the table rooted at page 1.
 **
 ** If the b-tree structure is empty, the cursor state is set to 
-** CURSOR_INVALID. Otherwise, the cursor is set to point to the first
-** cell located on the root (or virtual root) page and the cursor state
-** is set to CURSOR_VALID.
+** CURSOR_INVALID and this routine returns SQLITE_EMPTY. Otherwise,
+** the cursor is set to point to the first cell located on the root
+** (or virtual root) page and the cursor state is set to CURSOR_VALID.
 **
 ** If this function returns successfully, it may be assumed that the
 ** page-header flags indicate that the [virtual] root-page is the expected 
@@ -64666,37 +64845,40 @@ static int moveToRoot(BtCursor *pCur){
   assert( CURSOR_INVALID < CURSOR_REQUIRESEEK );
   assert( CURSOR_VALID   < CURSOR_REQUIRESEEK );
   assert( CURSOR_FAULT   > CURSOR_REQUIRESEEK );
-  if( pCur->eState>=CURSOR_REQUIRESEEK ){
-    if( pCur->eState==CURSOR_FAULT ){
-      assert( pCur->skipNext!=SQLITE_OK );
-      return pCur->skipNext;
-    }
-    sqlite3BtreeClearCursor(pCur);
-  }
+  assert( pCur->eState < CURSOR_REQUIRESEEK || pCur->iPage<0 );
+  assert( pCur->pgnoRoot>0 || pCur->iPage<0 );
 
   if( pCur->iPage>=0 ){
     if( pCur->iPage ){
-      do{
-        assert( pCur->apPage[pCur->iPage]!=0 );
-        releasePageNotNull(pCur->apPage[pCur->iPage--]);
-      }while( pCur->iPage);
+      releasePageNotNull(pCur->pPage);
+      while( --pCur->iPage ){
+        releasePageNotNull(pCur->apPage[pCur->iPage]);
+      }
+      pCur->pPage = pCur->apPage[0];
       goto skip_init;
     }
   }else if( pCur->pgnoRoot==0 ){
     pCur->eState = CURSOR_INVALID;
-    return SQLITE_OK;
+    return SQLITE_EMPTY;
   }else{
     assert( pCur->iPage==(-1) );
-    rc = getAndInitPage(pCur->pBtree->pBt, pCur->pgnoRoot, &pCur->apPage[0],
+    if( pCur->eState>=CURSOR_REQUIRESEEK ){
+      if( pCur->eState==CURSOR_FAULT ){
+        assert( pCur->skipNext!=SQLITE_OK );
+        return pCur->skipNext;
+      }
+      sqlite3BtreeClearCursor(pCur);
+    }
+    rc = getAndInitPage(pCur->pBtree->pBt, pCur->pgnoRoot, &pCur->pPage,
                         0, pCur->curPagerFlags);
     if( rc!=SQLITE_OK ){
       pCur->eState = CURSOR_INVALID;
-       return rc;
+      return rc;
     }
     pCur->iPage = 0;
-    pCur->curIntKey = pCur->apPage[0]->intKey;
+    pCur->curIntKey = pCur->pPage->intKey;
   }
-  pRoot = pCur->apPage[0];
+  pRoot = pCur->pPage;
   assert( pRoot->pgno==pCur->pgnoRoot );
 
   /* If pCur->pKeyInfo is not NULL, then the caller that opened this cursor
@@ -64711,7 +64893,7 @@ static int moveToRoot(BtCursor *pCur){
   ** (or the freelist).  */
   assert( pRoot->intKey==1 || pRoot->intKey==0 );
   if( pRoot->isInit==0 || (pCur->pKeyInfo==0)!=pRoot->intKey ){
-    return SQLITE_CORRUPT_PGNO(pCur->apPage[pCur->iPage]->pgno);
+    return SQLITE_CORRUPT_PGNO(pCur->pPage->pgno);
   }
 
 skip_init:  
@@ -64719,7 +64901,7 @@ skip_init:
   pCur->info.nSize = 0;
   pCur->curFlags &= ~(BTCF_AtLast|BTCF_ValidNKey|BTCF_ValidOvfl);
 
-  pRoot = pCur->apPage[0];
+  pRoot = pCur->pPage;
   if( pRoot->nCell>0 ){
     pCur->eState = CURSOR_VALID;
   }else if( !pRoot->leaf ){
@@ -64730,6 +64912,7 @@ skip_init:
     rc = moveToChild(pCur, subpage);
   }else{
     pCur->eState = CURSOR_INVALID;
+    rc = SQLITE_EMPTY;
   }
   return rc;
 }
@@ -64748,7 +64931,7 @@ static int moveToLeftmost(BtCursor *pCur){
 
   assert( cursorOwnsBtShared(pCur) );
   assert( pCur->eState==CURSOR_VALID );
-  while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){
+  while( rc==SQLITE_OK && !(pPage = pCur->pPage)->leaf ){
     assert( pCur->ix<pPage->nCell );
     pgno = get4byte(findCell(pPage, pCur->ix));
     rc = moveToChild(pCur, pgno);
@@ -64773,7 +64956,7 @@ static int moveToRightmost(BtCursor *pCur){
 
   assert( cursorOwnsBtShared(pCur) );
   assert( pCur->eState==CURSOR_VALID );
-  while( !(pPage = pCur->apPage[pCur->iPage])->leaf ){
+  while( !(pPage = pCur->pPage)->leaf ){
     pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
     pCur->ix = pPage->nCell;
     rc = moveToChild(pCur, pgno);
@@ -64796,14 +64979,13 @@ SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
   rc = moveToRoot(pCur);
   if( rc==SQLITE_OK ){
-    if( pCur->eState==CURSOR_INVALID ){
-      assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
-      *pRes = 1;
-    }else{
-      assert( pCur->apPage[pCur->iPage]->nCell>0 );
-      *pRes = 0;
-      rc = moveToLeftmost(pCur);
-    }
+    assert( pCur->pPage->nCell>0 );
+    *pRes = 0;
+    rc = moveToLeftmost(pCur);
+  }else if( rc==SQLITE_EMPTY ){
+    assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );
+    *pRes = 1;
+    rc = SQLITE_OK;
   }
   return rc;
 }
@@ -64827,28 +65009,26 @@ SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
     for(ii=0; ii<pCur->iPage; ii++){
       assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell );
     }
-    assert( pCur->ix==pCur->apPage[pCur->iPage]->nCell-1 );
-    assert( pCur->apPage[pCur->iPage]->leaf );
+    assert( pCur->ix==pCur->pPage->nCell-1 );
+    assert( pCur->pPage->leaf );
 #endif
     return SQLITE_OK;
   }
 
   rc = moveToRoot(pCur);
   if( rc==SQLITE_OK ){
-    if( CURSOR_INVALID==pCur->eState ){
-      assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
-      *pRes = 1;
+    assert( pCur->eState==CURSOR_VALID );
+    *pRes = 0;
+    rc = moveToRightmost(pCur);
+    if( rc==SQLITE_OK ){
+      pCur->curFlags |= BTCF_AtLast;
     }else{
-      assert( pCur->eState==CURSOR_VALID );
-      *pRes = 0;
-      rc = moveToRightmost(pCur);
-      if( rc==SQLITE_OK ){
-        pCur->curFlags |= BTCF_AtLast;
-      }else{
-        pCur->curFlags &= ~BTCF_AtLast;
-      }
-   
+      pCur->curFlags &= ~BTCF_AtLast;
     }
+  }else if( rc==SQLITE_EMPTY ){
+    assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );
+    *pRes = 1;
+    rc = SQLITE_OK;
   }
   return rc;
 }
@@ -64947,22 +65127,23 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
 
   rc = moveToRoot(pCur);
   if( rc ){
+    if( rc==SQLITE_EMPTY ){
+      assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );
+      *pRes = -1;
+      return SQLITE_OK;
+    }
     return rc;
   }
-  assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage] );
-  assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->isInit );
-  assert( pCur->eState==CURSOR_INVALID || pCur->apPage[pCur->iPage]->nCell>0 );
-  if( pCur->eState==CURSOR_INVALID ){
-    *pRes = -1;
-    assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
-    return SQLITE_OK;
-  }
-  assert( pCur->apPage[0]->intKey==pCur->curIntKey );
+  assert( pCur->pPage );
+  assert( pCur->pPage->isInit );
+  assert( pCur->eState==CURSOR_VALID );
+  assert( pCur->pPage->nCell > 0 );
+  assert( pCur->iPage==0 || pCur->apPage[0]->intKey==pCur->curIntKey );
   assert( pCur->curIntKey || pIdxKey );
   for(;;){
     int lwr, upr, idx, c;
     Pgno chldPg;
-    MemPage *pPage = pCur->apPage[pCur->iPage];
+    MemPage *pPage = pCur->pPage;
     u8 *pCell;                          /* Pointer to current cell in pPage */
 
     /* pPage->nCell must be greater than zero. If this is the root-page
@@ -65090,7 +65271,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
           *pRes = 0;
           rc = SQLITE_OK;
           pCur->ix = (u16)idx;
-          if( pIdxKey->errCode ) rc = SQLITE_CORRUPT;
+          if( pIdxKey->errCode ) rc = SQLITE_CORRUPT_BKPT;
           goto moveto_finish;
         }
         if( lwr>upr ) break;
@@ -65101,7 +65282,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
     assert( lwr==upr+1 || (pPage->intKey && !pPage->leaf) );
     assert( pPage->isInit );
     if( pPage->leaf ){
-      assert( pCur->ix<pCur->apPage[pCur->iPage]->nCell );
+      assert( pCur->ix<pCur->pPage->nCell );
       pCur->ix = (u16)idx;
       *pRes = c;
       rc = SQLITE_OK;
@@ -65155,9 +65336,10 @@ SQLITE_PRIVATE i64 sqlite3BtreeRowCountEst(BtCursor *pCur){
   ** opcode, and it that case the cursor will always be valid and
   ** will always point to a leaf node. */
   if( NEVER(pCur->eState!=CURSOR_VALID) ) return -1;
-  if( NEVER(pCur->apPage[pCur->iPage]->leaf==0) ) return -1;
+  if( NEVER(pCur->pPage->leaf==0) ) return -1;
 
-  for(n=1, i=0; i<=pCur->iPage; i++){
+  n = pCur->pPage->nCell;
+  for(i=0; i<pCur->iPage; i++){
     n *= pCur->apPage[i]->nCell;
   }
   return n;
@@ -65210,7 +65392,7 @@ static SQLITE_NOINLINE int btreeNext(BtCursor *pCur){
     }
   }
 
-  pPage = pCur->apPage[pCur->iPage];
+  pPage = pCur->pPage;
   idx = ++pCur->ix;
   assert( pPage->isInit );
 
@@ -65233,7 +65415,7 @@ static SQLITE_NOINLINE int btreeNext(BtCursor *pCur){
         return SQLITE_DONE;
       }
       moveToParent(pCur);
-      pPage = pCur->apPage[pCur->iPage];
+      pPage = pCur->pPage;
     }while( pCur->ix>=pPage->nCell );
     if( pPage->intKey ){
       return sqlite3BtreeNext(pCur, 0);
@@ -65256,7 +65438,7 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int flags){
   pCur->info.nSize = 0;
   pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
   if( pCur->eState!=CURSOR_VALID ) return btreeNext(pCur);
-  pPage = pCur->apPage[pCur->iPage];
+  pPage = pCur->pPage;
   if( (++pCur->ix)>=pPage->nCell ){
     pCur->ix--;
     return btreeNext(pCur);
@@ -65315,7 +65497,7 @@ static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur){
     }
   }
 
-  pPage = pCur->apPage[pCur->iPage];
+  pPage = pCur->pPage;
   assert( pPage->isInit );
   if( !pPage->leaf ){
     int idx = pCur->ix;
@@ -65334,7 +65516,7 @@ static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur){
     assert( (pCur->curFlags & (BTCF_ValidOvfl))==0 );
 
     pCur->ix--;
-    pPage = pCur->apPage[pCur->iPage];
+    pPage = pCur->pPage;
     if( pPage->intKey && !pPage->leaf ){
       rc = sqlite3BtreePrevious(pCur, 0);
     }else{
@@ -65352,7 +65534,7 @@ SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int flags){
   pCur->info.nSize = 0;
   if( pCur->eState!=CURSOR_VALID
    || pCur->ix==0
-   || pCur->apPage[pCur->iPage]->leaf==0
+   || pCur->pPage->leaf==0
   ){
     return btreePrevious(pCur);
   }
@@ -65848,7 +66030,7 @@ static int clearCell(
   unsigned char *pCell,    /* First byte of the Cell */
   CellInfo *pInfo          /* Size information about the cell */
 ){
-  BtShared *pBt = pPage->pBt;
+  BtShared *pBt;
   Pgno ovflPgno;
   int rc;
   int nOvfl;
@@ -65864,6 +66046,7 @@ static int clearCell(
     return SQLITE_CORRUPT_PGNO(pPage->pgno);
   }
   ovflPgno = get4byte(pCell + pInfo->nSize - 4);
+  pBt = pPage->pBt;
   assert( pBt->usableSize > 4 );
   ovflPageSize = pBt->usableSize - 4;
   nOvfl = (pInfo->nPayload - pInfo->nLocal + ovflPageSize - 1)/ovflPageSize;
@@ -65931,21 +66114,20 @@ static int fillInCell(
 ){
   int nPayload;
   const u8 *pSrc;
-  int nSrc, n, rc;
+  int nSrc, n, rc, mn;
   int spaceLeft;
-  MemPage *pOvfl = 0;
-  MemPage *pToRelease = 0;
+  MemPage *pToRelease;
   unsigned char *pPrior;
   unsigned char *pPayload;
-  BtShared *pBt = pPage->pBt;
-  Pgno pgnoOvfl = 0;
+  BtShared *pBt;
+  Pgno pgnoOvfl;
   int nHeader;
 
   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
 
   /* pPage is not necessarily writeable since pCell might be auxiliary
   ** buffer space that is separate from the pPage buffer area */
-  assert( pCell<pPage->aData || pCell>=&pPage->aData[pBt->pageSize]
+  assert( pCell<pPage->aData || pCell>=&pPage->aData[pPage->pBt->pageSize]
             || sqlite3PagerIswriteable(pPage->pDbPage) );
 
   /* Fill in the header. */
@@ -65965,25 +66147,36 @@ static int fillInCell(
   }
   
   /* Fill in the payload */
+  pPayload = &pCell[nHeader];
   if( nPayload<=pPage->maxLocal ){
+    /* This is the common case where everything fits on the btree page
+    ** and no overflow pages are required. */
     n = nHeader + nPayload;
     testcase( n==3 );
     testcase( n==4 );
     if( n<4 ) n = 4;
     *pnSize = n;
-    spaceLeft = nPayload;
-    pPrior = pCell;
-  }else{
-    int mn = pPage->minLocal;
-    n = mn + (nPayload - mn) % (pPage->pBt->usableSize - 4);
-    testcase( n==pPage->maxLocal );
-    testcase( n==pPage->maxLocal+1 );
-    if( n > pPage->maxLocal ) n = mn;
-    spaceLeft = n;
-    *pnSize = n + nHeader + 4;
-    pPrior = &pCell[nHeader+n];
+    assert( nSrc<=nPayload );
+    testcase( nSrc<nPayload );
+    memcpy(pPayload, pSrc, nSrc);
+    memset(pPayload+nSrc, 0, nPayload-nSrc);
+    return SQLITE_OK;
   }
-  pPayload = &pCell[nHeader];
+
+  /* If we reach this point, it means that some of the content will need
+  ** to spill onto overflow pages.
+  */
+  mn = pPage->minLocal;
+  n = mn + (nPayload - mn) % (pPage->pBt->usableSize - 4);
+  testcase( n==pPage->maxLocal );
+  testcase( n==pPage->maxLocal+1 );
+  if( n > pPage->maxLocal ) n = mn;
+  spaceLeft = n;
+  *pnSize = n + nHeader + 4;
+  pPrior = &pCell[nHeader+n];
+  pToRelease = 0;
+  pgnoOvfl = 0;
+  pBt = pPage->pBt;
 
   /* At this point variables should be set as follows:
   **
@@ -66009,8 +66202,35 @@ static int fillInCell(
 #endif
 
   /* Write the payload into the local Cell and any extra into overflow pages */
-  while( nPayload>0 ){
+  while( 1 ){
+    n = nPayload;
+    if( n>spaceLeft ) n = spaceLeft;
+
+    /* If pToRelease is not zero than pPayload points into the data area
+    ** of pToRelease.  Make sure pToRelease is still writeable. */
+    assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
+
+    /* If pPayload is part of the data area of pPage, then make sure pPage
+    ** is still writeable */
+    assert( pPayload<pPage->aData || pPayload>=&pPage->aData[pBt->pageSize]
+            || sqlite3PagerIswriteable(pPage->pDbPage) );
+
+    if( nSrc>=n ){
+      memcpy(pPayload, pSrc, n);
+    }else if( nSrc>0 ){
+      n = nSrc;
+      memcpy(pPayload, pSrc, n);
+    }else{
+      memset(pPayload, 0, n);
+    }
+    nPayload -= n;
+    if( nPayload<=0 ) break;
+    pPayload += n;
+    pSrc += n;
+    nSrc -= n;
+    spaceLeft -= n;
     if( spaceLeft==0 ){
+      MemPage *pOvfl = 0;
 #ifndef SQLITE_OMIT_AUTOVACUUM
       Pgno pgnoPtrmap = pgnoOvfl; /* Overflow page pointer-map entry page */
       if( pBt->autoVacuum ){
@@ -66063,30 +66283,6 @@ static int fillInCell(
       pPayload = &pOvfl->aData[4];
       spaceLeft = pBt->usableSize - 4;
     }
-    n = nPayload;
-    if( n>spaceLeft ) n = spaceLeft;
-
-    /* If pToRelease is not zero than pPayload points into the data area
-    ** of pToRelease.  Make sure pToRelease is still writeable. */
-    assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
-
-    /* If pPayload is part of the data area of pPage, then make sure pPage
-    ** is still writeable */
-    assert( pPayload<pPage->aData || pPayload>=&pPage->aData[pBt->pageSize]
-            || sqlite3PagerIswriteable(pPage->pDbPage) );
-
-    if( nSrc>0 ){
-      if( n>nSrc ) n = nSrc;
-      assert( pSrc );
-      memcpy(pPayload, pSrc, n);
-    }else{
-      memset(pPayload, 0, n);
-    }
-    nPayload -= n;
-    pPayload += n;
-    pSrc += n;
-    nSrc -= n;
-    spaceLeft -= n;
   }
   releasePage(pToRelease);
   return SQLITE_OK;
@@ -66118,7 +66314,7 @@ static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){
   hdr = pPage->hdrOffset;
   testcase( pc==get2byte(&data[hdr+5]) );
   testcase( pc+sz==pPage->pBt->usableSize );
-  if( pc < (u32)get2byte(&data[hdr+5]) || pc+sz > pPage->pBt->usableSize ){
+  if( pc+sz > pPage->pBt->usableSize ){
     *pRC = SQLITE_CORRUPT_BKPT;
     return;
   }
@@ -66985,10 +67181,8 @@ static int balance_nonroot(
      + nMaxCells*sizeof(u16)                       /* b.szCell */
      + pBt->pageSize;                              /* aSpace1 */
 
-  /* EVIDENCE-OF: R-28375-38319 SQLite will never request a scratch buffer
-  ** that is more than 6 times the database page size. */
   assert( szScratch<=6*(int)pBt->pageSize );
-  b.apCell = sqlite3ScratchMalloc( szScratch ); 
+  b.apCell = sqlite3StackAllocRaw(0, szScratch );
   if( b.apCell==0 ){
     rc = SQLITE_NOMEM_BKPT;
     goto balance_cleanup;
@@ -67566,7 +67760,7 @@ static int balance_nonroot(
   ** Cleanup before returning.
   */
 balance_cleanup:
-  sqlite3ScratchFree(b.apCell);
+  sqlite3StackFree(0, b.apCell);
   for(i=0; i<nOld; i++){
     releasePage(apOld[i]);
   }
@@ -67665,7 +67859,7 @@ static int balance(BtCursor *pCur){
 
   do {
     int iPage = pCur->iPage;
-    MemPage *pPage = pCur->apPage[iPage];
+    MemPage *pPage = pCur->pPage;
 
     if( iPage==0 ){
       if( pPage->nOverflow ){
@@ -67681,7 +67875,9 @@ static int balance(BtCursor *pCur){
           pCur->iPage = 1;
           pCur->ix = 0;
           pCur->aiIdx[0] = 0;
-          assert( pCur->apPage[1]->nOverflow );
+          pCur->apPage[0] = pPage;
+          pCur->pPage = pCur->apPage[1];
+          assert( pCur->pPage->nOverflow );
         }
       }else{
         break;
@@ -67761,6 +67957,7 @@ static int balance(BtCursor *pCur){
       releasePage(pPage);
       pCur->iPage--;
       assert( pCur->iPage>=0 );
+      pCur->pPage = pCur->apPage[pCur->iPage];
     }
   }while( rc==SQLITE_OK );
 
@@ -67892,7 +68089,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
   }
   assert( pCur->eState==CURSOR_VALID || (pCur->eState==CURSOR_INVALID && loc) );
 
-  pPage = pCur->apPage[pCur->iPage];
+  pPage = pCur->pPage;
   assert( pPage->intKey || pX->nKey>=0 );
   assert( pPage->leaf || !pPage->intKey );
 
@@ -67979,10 +68176,10 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
     ** fails. Internal data structure corruption will result otherwise. 
     ** Also, set the cursor state to invalid. This stops saveCursorPosition()
     ** from trying to save the current position of the cursor.  */
-    pCur->apPage[pCur->iPage]->nOverflow = 0;
+    pCur->pPage->nOverflow = 0;
     pCur->eState = CURSOR_INVALID;
     if( (flags & BTREE_SAVEPOSITION) && rc==SQLITE_OK ){
-      rc = moveToRoot(pCur);
+      btreeReleaseAllCursorPages(pCur);
       if( pCur->pKeyInfo ){
         assert( pCur->pKey==0 );
         pCur->pKey = sqlite3Malloc( pX->nKey );
@@ -67996,7 +68193,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
       pCur->nKey = pX->nKey;
     }
   }
-  assert( pCur->apPage[pCur->iPage]->nOverflow==0 );
+  assert( pCur->iPage<0 || pCur->pPage->nOverflow==0 );
 
 end_insert:
   return rc;
@@ -68037,13 +68234,13 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
   assert( pCur->curFlags & BTCF_WriteFlag );
   assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
   assert( !hasReadConflicts(p, pCur->pgnoRoot) );
-  assert( pCur->ix<pCur->apPage[pCur->iPage]->nCell );
+  assert( pCur->ix<pCur->pPage->nCell );
   assert( pCur->eState==CURSOR_VALID );
   assert( (flags & ~(BTREE_SAVEPOSITION | BTREE_AUXDELETE))==0 );
 
   iCellDepth = pCur->iPage;
   iCellIdx = pCur->ix;
-  pPage = pCur->apPage[iCellDepth];
+  pPage = pCur->pPage;
   pCell = findCell(pPage, iCellIdx);
 
   /* If the bPreserve flag is set to true, then the cursor position must
@@ -68109,11 +68306,16 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
   ** node. The cell from the leaf node needs to be moved to the internal
   ** node to replace the deleted cell.  */
   if( !pPage->leaf ){
-    MemPage *pLeaf = pCur->apPage[pCur->iPage];
+    MemPage *pLeaf = pCur->pPage;
     int nCell;
-    Pgno n = pCur->apPage[iCellDepth+1]->pgno;
+    Pgno n;
     unsigned char *pTmp;
 
+    if( iCellDepth<pCur->iPage-1 ){
+      n = pCur->apPage[iCellDepth+1]->pgno;
+    }else{
+      n = pCur->pPage->pgno;
+    }
     pCell = findCell(pLeaf, pLeaf->nCell-1);
     if( pCell<&pLeaf->aData[4] ) return SQLITE_CORRUPT_BKPT;
     nCell = pLeaf->xCellSize(pLeaf, pCell);
@@ -68145,16 +68347,19 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
   ** well.  */
   rc = balance(pCur);
   if( rc==SQLITE_OK && pCur->iPage>iCellDepth ){
+    releasePageNotNull(pCur->pPage);
+    pCur->iPage--;
     while( pCur->iPage>iCellDepth ){
       releasePage(pCur->apPage[pCur->iPage--]);
     }
+    pCur->pPage = pCur->apPage[pCur->iPage];
     rc = balance(pCur);
   }
 
   if( rc==SQLITE_OK ){
     if( bSkipnext ){
       assert( bPreserve && (pCur->iPage==iCellDepth || CORRUPT_DB) );
-      assert( pPage==pCur->apPage[pCur->iPage] || CORRUPT_DB );
+      assert( pPage==pCur->pPage || CORRUPT_DB );
       assert( (pPage->nCell>0 || CORRUPT_DB) && iCellIdx<=pPage->nCell );
       pCur->eState = CURSOR_SKIPNEXT;
       if( iCellIdx>=pPage->nCell ){
@@ -68166,8 +68371,10 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
     }else{
       rc = moveToRoot(pCur);
       if( bPreserve ){
+        btreeReleaseAllCursorPages(pCur);
         pCur->eState = CURSOR_REQUIRESEEK;
       }
+      if( rc==SQLITE_EMPTY ) rc = SQLITE_OK;
     }
   }
   return rc;
@@ -68632,11 +68839,11 @@ SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
   i64 nEntry = 0;                      /* Value to return in *pnEntry */
   int rc;                              /* Return code */
 
-  if( pCur->pgnoRoot==0 ){
+  rc = moveToRoot(pCur);
+  if( rc==SQLITE_EMPTY ){
     *pnEntry = 0;
     return SQLITE_OK;
   }
-  rc = moveToRoot(pCur);
 
   /* Unless an error occurs, the following loop runs one iteration for each
   ** page in the B-Tree structure (not including overflow pages). 
@@ -68649,7 +68856,7 @@ SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
     ** this page contains countable entries. Increment the entry counter
     ** accordingly.
     */
-    pPage = pCur->apPage[pCur->iPage];
+    pPage = pCur->pPage;
     if( pPage->leaf || !pPage->intKey ){
       nEntry += pPage->nCell;
     }
@@ -68672,10 +68879,10 @@ SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
           return moveToRoot(pCur);
         }
         moveToParent(pCur);
-      }while ( pCur->ix>=pCur->apPage[pCur->iPage]->nCell );
+      }while ( pCur->ix>=pCur->pPage->nCell );
 
       pCur->ix++;
-      pPage = pCur->apPage[pCur->iPage];
+      pPage = pCur->pPage;
     }
 
     /* Descend to the child node of the cell that the cursor currently 
@@ -69516,7 +69723,7 @@ SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void
               && pCsr->pBt->inTransaction==TRANS_WRITE );
   assert( hasSharedCacheTableLock(pCsr->pBtree, pCsr->pgnoRoot, 0, 2) );
   assert( !hasReadConflicts(pCsr->pBtree, pCsr->pgnoRoot) );
-  assert( pCsr->apPage[pCsr->iPage]->intKey );
+  assert( pCsr->pPage->intKey );
 
   return accessPayload(pCsr, offset, amt, (unsigned char *)z, 1);
 }
@@ -70567,7 +70774,7 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPre
   assert( pMem->szMalloc==0
        || pMem->szMalloc==sqlite3DbMallocSize(pMem->db, pMem->zMalloc) );
   if( n<32 ) n = 32;
-  if( bPreserve && pMem->szMalloc>0 && pMem->z==pMem->zMalloc ){
+  if( pMem->szMalloc>0 && bPreserve && pMem->z==pMem->zMalloc ){
     pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n);
     bPreserve = 0;
   }else{
@@ -70583,7 +70790,8 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPre
     pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc);
   }
 
-  if( bPreserve && pMem->z && ALWAYS(pMem->z!=pMem->zMalloc) ){
+  if( bPreserve && pMem->z ){
+    assert( pMem->z!=pMem->zMalloc );
     memcpy(pMem->zMalloc, pMem->z, pMem->n);
   }
   if( (pMem->flags&MEM_Dyn)!=0 ){
@@ -70622,6 +70830,20 @@ SQLITE_PRIVATE int sqlite3VdbeMemClearAndResize(Mem *pMem, int szNew){
 }
 
 /*
+** It is already known that pMem contains an unterminated string.
+** Add the zero terminator.
+*/
+static SQLITE_NOINLINE int vdbeMemAddTerminator(Mem *pMem){
+  if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
+    return SQLITE_NOMEM_BKPT;
+  }
+  pMem->z[pMem->n] = 0;
+  pMem->z[pMem->n+1] = 0;
+  pMem->flags |= MEM_Term;
+  return SQLITE_OK;
+}
+
+/*
 ** Change pMem so that its MEM_Str or MEM_Blob value is stored in
 ** MEM.zMalloc, where it can be safely written.
 **
@@ -70633,12 +70855,8 @@ SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){
   if( (pMem->flags & (MEM_Str|MEM_Blob))!=0 ){
     if( ExpandBlob(pMem) ) return SQLITE_NOMEM;
     if( pMem->szMalloc==0 || pMem->z!=pMem->zMalloc ){
-      if( sqlite3VdbeMemGrow(pMem, pMem->n + 2, 1) ){
-        return SQLITE_NOMEM_BKPT;
-      }
-      pMem->z[pMem->n] = 0;
-      pMem->z[pMem->n+1] = 0;
-      pMem->flags |= MEM_Term;
+      int rc = vdbeMemAddTerminator(pMem);
+      if( rc ) return rc;
     }
   }
   pMem->flags &= ~MEM_Ephem;
@@ -70678,20 +70896,6 @@ SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){
 #endif
 
 /*
-** It is already known that pMem contains an unterminated string.
-** Add the zero terminator.
-*/
-static SQLITE_NOINLINE int vdbeMemAddTerminator(Mem *pMem){
-  if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
-    return SQLITE_NOMEM_BKPT;
-  }
-  pMem->z[pMem->n] = 0;
-  pMem->z[pMem->n+1] = 0;
-  pMem->flags |= MEM_Term;
-  return SQLITE_OK;
-}
-
-/*
 ** Make sure the given Mem is \u0000 terminated.
 */
 SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
@@ -71009,14 +71213,21 @@ SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){
 */
 SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
   if( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 ){
+    int rc;
     assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
-    if( 0==sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc) ){
+    rc = sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc);
+    if( rc==0 ){
       MemSetTypeFlag(pMem, MEM_Int);
     }else{
-      pMem->u.r = sqlite3VdbeRealValue(pMem);
-      MemSetTypeFlag(pMem, MEM_Real);
-      sqlite3VdbeIntegerAffinity(pMem);
+      i64 i = pMem->u.i;
+      sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc);
+      if( rc==1 && pMem->u.r==(double)i ){
+        pMem->u.i = i;
+        MemSetTypeFlag(pMem, MEM_Int);
+      }else{
+        MemSetTypeFlag(pMem, MEM_Real);
+      }
     }
   }
   assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))!=0 );
@@ -71343,7 +71554,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
   if( nByte<0 ){
     assert( enc!=0 );
     if( enc==SQLITE_UTF8 ){
-      nByte = sqlite3Strlen30(z);
+      nByte = 0x7fffffff & (int)strlen(z);
       if( nByte>iLimit ) nByte = iLimit+1;
     }else{
       for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){}
@@ -71421,12 +71632,11 @@ static SQLITE_NOINLINE int vdbeMemFromBtreeResize(
 ){
   int rc;
   pMem->flags = MEM_Null;
-  if( SQLITE_OK==(rc = sqlite3VdbeMemClearAndResize(pMem, amt+2)) ){
+  if( SQLITE_OK==(rc = sqlite3VdbeMemClearAndResize(pMem, amt+1)) ){
     rc = sqlite3BtreePayload(pCur, offset, amt, pMem->z);
     if( rc==SQLITE_OK ){
-      pMem->z[amt] = 0;
-      pMem->z[amt+1] = 0;
-      pMem->flags = MEM_Blob|MEM_Term;
+      pMem->z[amt] = 0;   /* Overrun area used when reading malformed records */
+      pMem->flags = MEM_Blob;
       pMem->n = (int)amt;
     }else{
       sqlite3VdbeMemRelease(pMem);
@@ -71575,7 +71785,7 @@ static sqlite3_value *valueNew(sqlite3 *db, struct ValueNewStat4Ctx *p){
       if( pRec ){
         pRec->pKeyInfo = sqlite3KeyInfoOfIndex(p->pParse, pIdx);
         if( pRec->pKeyInfo ){
-          assert( pRec->pKeyInfo->nField+pRec->pKeyInfo->nXField==nCol );
+          assert( pRec->pKeyInfo->nAllField==nCol );
           assert( pRec->pKeyInfo->enc==ENC(db) );
           pRec->aMem = (Mem *)((u8*)pRec + ROUND8(sizeof(UnpackedRecord)));
           for(i=0; i<nCol; i++){
@@ -72111,7 +72321,7 @@ SQLITE_PRIVATE int sqlite3Stat4Column(
 SQLITE_PRIVATE void sqlite3Stat4ProbeFree(UnpackedRecord *pRec){
   if( pRec ){
     int i;
-    int nCol = pRec->pKeyInfo->nField+pRec->pKeyInfo->nXField;
+    int nCol = pRec->pKeyInfo->nAllField;
     Mem *aMem = pRec->aMem;
     sqlite3 *db = aMem[0].db;
     for(i=0; i<nCol; i++){
@@ -72207,10 +72417,12 @@ SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(Parse *pParse){
   db->pVdbe = p;
   p->magic = VDBE_MAGIC_INIT;
   p->pParse = pParse;
+  pParse->pVdbe = p;
   assert( pParse->aLabel==0 );
   assert( pParse->nLabel==0 );
   assert( pParse->nOpAlloc==0 );
   assert( pParse->szOpAlloc==0 );
+  sqlite3VdbeAddOp2(p, OP_Init, 0, 1);
   return p;
 }
 
@@ -72664,7 +72876,8 @@ static Op *opIterNext(VdbeOpIter *p){
 **   *  OP_VUpdate
 **   *  OP_VRename
 **   *  OP_FkCounter with P2==0 (immediate foreign key constraint)
-**   *  OP_CreateTable and OP_InitCoroutine (for CREATE TABLE AS SELECT ...)
+**   *  OP_CreateBtree/BTREE_INTKEY and OP_InitCoroutine 
+**      (for CREATE TABLE AS SELECT ...)
 **
 ** Then check that the value of Parse.mayAbort is true if an
 ** ABORT may be thrown, or false otherwise. Return true if it does
@@ -72692,7 +72905,7 @@ SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
       hasAbort = 1;
       break;
     }
-    if( opcode==OP_CreateTable ) hasCreateTable = 1;
+    if( opcode==OP_CreateBtree && pOp->p3==BTREE_INTKEY ) hasCreateTable = 1;
     if( opcode==OP_InitCoroutine ) hasInitCoroutine = 1;
 #ifndef SQLITE_OMIT_FOREIGN_KEY
     if( opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1 ){
@@ -72771,6 +72984,27 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
           p->bIsReader = 1;
           break;
         }
+        case OP_Next:
+        case OP_NextIfOpen:
+        case OP_SorterNext: {
+          pOp->p4.xAdvance = sqlite3BtreeNext;
+          pOp->p4type = P4_ADVANCE;
+          /* The code generator never codes any of these opcodes as a jump
+          ** to a label.  They are always coded as a jump backwards to a 
+          ** known address */
+          assert( pOp->p2>=0 );
+          break;
+        }
+        case OP_Prev:
+        case OP_PrevIfOpen: {
+          pOp->p4.xAdvance = sqlite3BtreePrevious;
+          pOp->p4type = P4_ADVANCE;
+          /* The code generator never codes any of these opcodes as a jump
+          ** to a label.  They are always coded as a jump backwards to a 
+          ** known address */
+          assert( pOp->p2>=0 );
+          break;
+        }
 #ifndef SQLITE_OMIT_VIRTUALTABLE
         case OP_VUpdate: {
           if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2;
@@ -72782,27 +73016,25 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
           assert( pOp[-1].opcode==OP_Integer );
           n = pOp[-1].p1;
           if( n>nMaxArgs ) nMaxArgs = n;
-          break;
+          /* Fall through into the default case */
         }
 #endif
-        case OP_Next:
-        case OP_NextIfOpen:
-        case OP_SorterNext: {
-          pOp->p4.xAdvance = sqlite3BtreeNext;
-          pOp->p4type = P4_ADVANCE;
-          break;
-        }
-        case OP_Prev:
-        case OP_PrevIfOpen: {
-          pOp->p4.xAdvance = sqlite3BtreePrevious;
-          pOp->p4type = P4_ADVANCE;
+        default: {
+          if( pOp->p2<0 ){
+            /* The mkopcodeh.tcl script has so arranged things that the only
+            ** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to
+            ** have non-negative values for P2. */
+            assert( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)!=0 );
+            assert( ADDR(pOp->p2)<pParse->nLabel );
+            pOp->p2 = aLabel[ADDR(pOp->p2)];
+          }
           break;
         }
       }
-      if( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)!=0 && pOp->p2<0 ){
-        assert( ADDR(pOp->p2)<pParse->nLabel );
-        pOp->p2 = aLabel[ADDR(pOp->p2)];
-      }
+      /* The mkopcodeh.tcl script has so arranged things that the only
+      ** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to
+      ** have non-negative values for P2. */
+      assert( (sqlite3OpcodeProperty[pOp->opcode]&OPFLG_JUMP)==0 || pOp->p2>=0);
     }
     if( pOp==p->aOp ) break;
     pOp--;
@@ -73475,8 +73707,8 @@ static const char *displayP4(Op *pOp, char *zTemp, int nTemp){
       int j;
       KeyInfo *pKeyInfo = pOp->p4.pKeyInfo;
       assert( pKeyInfo->aSortOrder!=0 );
-      sqlite3XPrintf(&x, "k(%d", pKeyInfo->nField);
-      for(j=0; j<pKeyInfo->nField; j++){
+      sqlite3XPrintf(&x, "k(%d", pKeyInfo->nKeyField);
+      for(j=0; j<pKeyInfo->nKeyField; j++){
         CollSeq *pColl = pKeyInfo->aColl[j];
         const char *zColl = pColl ? pColl->zName : "";
         if( strcmp(zColl, "BINARY")==0 ) zColl = "B";
@@ -73548,7 +73780,7 @@ static const char *displayP4(Op *pOp, char *zTemp, int nTemp){
       int *ai = pOp->p4.ai;
       int n = ai[0];   /* The first element of an INTARRAY is always the
                        ** count of the number of elements to follow */
-      for(i=1; i<n; i++){
+      for(i=1; i<=n; i++){
         sqlite3XPrintf(&x, ",%d", ai[i]);
       }
       zTemp[0] = '[';
@@ -74313,27 +74545,6 @@ static void closeAllCursors(Vdbe *p){
 }
 
 /*
-** Clean up the VM after a single run.
-*/
-static void Cleanup(Vdbe *p){
-  sqlite3 *db = p->db;
-
-#ifdef SQLITE_DEBUG
-  /* Execute assert() statements to ensure that the Vdbe.apCsr[] and 
-  ** Vdbe.aMem[] arrays have already been cleaned up.  */
-  int i;
-  if( p->apCsr ) for(i=0; i<p->nCursor; i++) assert( p->apCsr[i]==0 );
-  if( p->aMem ){
-    for(i=0; i<p->nMem; i++) assert( p->aMem[i].flags==MEM_Undefined );
-  }
-#endif
-
-  sqlite3DbFree(db, p->zErrMsg);
-  p->zErrMsg = 0;
-  p->pResultSet = 0;
-}
-
-/*
 ** Set the number of result columns that will be returned by this SQL
 ** statement. This is now set at compile time, rather than during
 ** execution of the vdbe program so that sqlite3_column_count() can
@@ -75041,6 +75252,10 @@ static void vdbeInvokeSqllog(Vdbe *v){
 ** VDBE_MAGIC_INIT.
 */
 SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
+#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
+  int i;
+#endif
+
   sqlite3 *db;
   db = p->db;
 
@@ -75058,8 +75273,6 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
   if( p->pc>=0 ){
     vdbeInvokeSqllog(p);
     sqlite3VdbeTransferError(p);
-    sqlite3DbFree(db, p->zErrMsg);
-    p->zErrMsg = 0;
     if( p->runOnlyOnce ) p->expired = 1;
   }else if( p->rc && p->expired ){
     /* The expired flag was set on the VDBE before the first call
@@ -75067,13 +75280,21 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
     ** called), set the database error in this case as well.
     */
     sqlite3ErrorWithMsg(db, p->rc, p->zErrMsg ? "%s" : 0, p->zErrMsg);
-    sqlite3DbFree(db, p->zErrMsg);
-    p->zErrMsg = 0;
   }
 
-  /* Reclaim all memory used by the VDBE
+  /* Reset register contents and reclaim error message memory.
   */
-  Cleanup(p);
+#ifdef SQLITE_DEBUG
+  /* Execute assert() statements to ensure that the Vdbe.apCsr[] and 
+  ** Vdbe.aMem[] arrays have already been cleaned up.  */
+  if( p->apCsr ) for(i=0; i<p->nCursor; i++) assert( p->apCsr[i]==0 );
+  if( p->aMem ){
+    for(i=0; i<p->nMem; i++) assert( p->aMem[i].flags==MEM_Undefined );
+  }
+#endif
+  sqlite3DbFree(db, p->zErrMsg);
+  p->zErrMsg = 0;
+  p->pResultSet = 0;
 
   /* Save profiling information from this VDBE run.
   */
@@ -75081,7 +75302,6 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
   {
     FILE *out = fopen("vdbe_profile.out", "a");
     if( out ){
-      int i;
       fprintf(out, "---- ");
       for(i=0; i<p->nOp; i++){
         fprintf(out, "%02x", p->aOp[i].opcode);
@@ -75294,19 +75514,18 @@ SQLITE_PRIVATE int sqlite3VdbeCursorRestore(VdbeCursor *p){
 */
 SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor **pp, int *piCol){
   VdbeCursor *p = *pp;
-  if( p->eCurType==CURTYPE_BTREE ){
-    if( p->deferredMoveto ){
-      int iMap;
-      if( p->aAltMap && (iMap = p->aAltMap[1+*piCol])>0 ){
-        *pp = p->pAltCursor;
-        *piCol = iMap - 1;
-        return SQLITE_OK;
-      }
-      return handleDeferredMoveto(p);
-    }
-    if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){
-      return handleMovedCursor(p);
+  assert( p->eCurType==CURTYPE_BTREE || p->eCurType==CURTYPE_PSEUDO );
+  if( p->deferredMoveto ){
+    int iMap;
+    if( p->aAltMap && (iMap = p->aAltMap[1+*piCol])>0 ){
+      *pp = p->pAltCursor;
+      *piCol = iMap - 1;
+      return SQLITE_OK;
     }
+    return handleDeferredMoveto(p);
+  }
+  if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){
+    return handleMovedCursor(p);
   }
   return SQLITE_OK;
 }
@@ -75702,13 +75921,13 @@ SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(
 ){
   UnpackedRecord *p;              /* Unpacked record to return */
   int nByte;                      /* Number of bytes required for *p */
-  nByte = ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nField+1);
+  nByte = ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nKeyField+1);
   p = (UnpackedRecord *)sqlite3DbMallocRaw(pKeyInfo->db, nByte);
   if( !p ) return 0;
   p->aMem = (Mem*)&((char*)p)[ROUND8(sizeof(UnpackedRecord))];
   assert( pKeyInfo->aSortOrder!=0 );
   p->pKeyInfo = pKeyInfo;
-  p->nField = pKeyInfo->nField + 1;
+  p->nField = pKeyInfo->nKeyField + 1;
   return p;
 }
 
@@ -75748,7 +75967,7 @@ SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(
     pMem++;
     if( (++u)>=p->nField ) break;
   }
-  assert( u<=pKeyInfo->nField + 1 );
+  assert( u<=pKeyInfo->nKeyField + 1 );
   p->nField = u;
 }
 
@@ -75797,9 +76016,9 @@ static int vdbeRecordCompareDebug(
   idx1 = getVarint32(aKey1, szHdr1);
   if( szHdr1>98307 ) return SQLITE_CORRUPT;
   d1 = szHdr1;
-  assert( pKeyInfo->nField+pKeyInfo->nXField>=pPKey2->nField || CORRUPT_DB );
+  assert( pKeyInfo->nAllField>=pPKey2->nField || CORRUPT_DB );
   assert( pKeyInfo->aSortOrder!=0 );
-  assert( pKeyInfo->nField>0 );
+  assert( pKeyInfo->nKeyField>0 );
   assert( idx1<=szHdr1 || CORRUPT_DB );
   do{
     u32 serial_type1;
@@ -75861,12 +76080,12 @@ debugCompareEnd:
 /*
 ** Count the number of fields (a.k.a. columns) in the record given by
 ** pKey,nKey.  The verify that this count is less than or equal to the
-** limit given by pKeyInfo->nField + pKeyInfo->nXField.
+** limit given by pKeyInfo->nAllField.
 **
 ** If this constraint is not satisfied, it means that the high-speed
 ** vdbeRecordCompareInt() and vdbeRecordCompareString() routines will
 ** not work correctly.  If this assert() ever fires, it probably means
-** that the KeyInfo.nField or KeyInfo.nXField values were computed
+** that the KeyInfo.nKeyField or KeyInfo.nAllField values were computed
 ** incorrectly.
 */
 static void vdbeAssertFieldCountWithinLimits(
@@ -75887,7 +76106,7 @@ static void vdbeAssertFieldCountWithinLimits(
     idx += getVarint32(aKey+idx, notUsed);
     nField++;
   }
-  assert( nField <= pKeyInfo->nField+pKeyInfo->nXField );
+  assert( nField <= pKeyInfo->nAllField );
 }
 #else
 # define vdbeAssertFieldCountWithinLimits(A,B,C)
@@ -76192,10 +76411,10 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip(
   }
 
   VVA_ONLY( mem1.szMalloc = 0; ) /* Only needed by assert() statements */
-  assert( pPKey2->pKeyInfo->nField+pPKey2->pKeyInfo->nXField>=pPKey2->nField 
+  assert( pPKey2->pKeyInfo->nAllField>=pPKey2->nField 
        || CORRUPT_DB );
   assert( pPKey2->pKeyInfo->aSortOrder!=0 );
-  assert( pPKey2->pKeyInfo->nField>0 );
+  assert( pPKey2->pKeyInfo->nKeyField>0 );
   assert( idx1<=szHdr1 || CORRUPT_DB );
   do{
     u32 serial_type;
@@ -76528,7 +76747,7 @@ SQLITE_PRIVATE RecordCompare sqlite3VdbeFindCompare(UnpackedRecord *p){
   ** The easiest way to enforce this limit is to consider only records with
   ** 13 fields or less. If the first field is an integer, the maximum legal
   ** header size is (12*5 + 1 + 1) bytes.  */
-  if( (p->pKeyInfo->nField + p->pKeyInfo->nXField)<=13 ){
+  if( p->pKeyInfo->nAllField<=13 ){
     int flags = p->aMem[0].flags;
     if( p->pKeyInfo->aSortOrder[0] ){
       p->r1 = 1;
@@ -76863,7 +77082,7 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook(
   preupdate.iNewReg = iReg;
   preupdate.keyinfo.db = db;
   preupdate.keyinfo.enc = ENC(db);
-  preupdate.keyinfo.nField = pTab->nCol;
+  preupdate.keyinfo.nKeyField = pTab->nCol;
   preupdate.keyinfo.aSortOrder = (u8*)&fakeSortOrder;
   preupdate.iKey1 = iKey1;
   preupdate.iKey2 = iKey2;
@@ -76873,8 +77092,8 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook(
   db->xPreUpdateCallback(db->pPreUpdateArg, db, op, zDb, zTbl, iKey1, iKey2);
   db->pPreUpdate = 0;
   sqlite3DbFree(db, preupdate.aRecord);
-  vdbeFreeUnpacked(db, preupdate.keyinfo.nField+1, preupdate.pUnpacked);
-  vdbeFreeUnpacked(db, preupdate.keyinfo.nField+1, preupdate.pNewUnpacked);
+  vdbeFreeUnpacked(db, preupdate.keyinfo.nKeyField+1, preupdate.pUnpacked);
+  vdbeFreeUnpacked(db, preupdate.keyinfo.nKeyField+1, preupdate.pNewUnpacked);
   if( preupdate.aNew ){
     int i;
     for(i=0; i<pCsr->nField; i++){
@@ -77288,7 +77507,8 @@ SQLITE_API void sqlite3_result_pointer(
 ){
   Mem *pOut = pCtx->pOut;
   assert( sqlite3_mutex_held(pOut->db->mutex) );
-  sqlite3VdbeMemSetNull(pOut);
+  sqlite3VdbeMemRelease(pOut);
+  pOut->flags = MEM_Null;
   sqlite3VdbeMemSetPointer(pOut, pPtr, zPType, xDestructor);
 }
 SQLITE_API void sqlite3_result_subtype(sqlite3_context *pCtx, unsigned int eSubtype){
@@ -77421,7 +77641,7 @@ static int doWalCallbacks(sqlite3 *db){
       sqlite3BtreeEnter(pBt);
       nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt));
       sqlite3BtreeLeave(pBt);
-      if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){
+      if( nEntry>0 && db->xWalCallback && rc==SQLITE_OK ){
         rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zDbSName, nEntry);
       }
     }
@@ -77531,7 +77751,7 @@ static int sqlite3Step(Vdbe *p){
   if( rc!=SQLITE_ROW ) checkProfileCallback(db, p);
 #endif
 
-  if( rc==SQLITE_DONE ){
+  if( rc==SQLITE_DONE && db->autoCommit ){
     assert( p->rc==SQLITE_OK );
     p->rc = doWalCallbacks(db);
     if( p->rc!=SQLITE_OK ){
@@ -77575,7 +77795,6 @@ end_of_step:
 */
 SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){
   int rc = SQLITE_OK;      /* Result from sqlite3Step() */
-  int rc2 = SQLITE_OK;     /* Result from sqlite3Reprepare() */
   Vdbe *v = (Vdbe*)pStmt;  /* the prepared statement */
   int cnt = 0;             /* Counter to prevent infinite loop of reprepares */
   sqlite3 *db;             /* The database connection */
@@ -77589,32 +77808,31 @@ SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){
   while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
          && cnt++ < SQLITE_MAX_SCHEMA_RETRY ){
     int savedPc = v->pc;
-    rc2 = rc = sqlite3Reprepare(v);
-    if( rc!=SQLITE_OK) break;
+    rc = sqlite3Reprepare(v);
+    if( rc!=SQLITE_OK ){
+      /* This case occurs after failing to recompile an sql statement. 
+      ** The error message from the SQL compiler has already been loaded 
+      ** into the database handle. This block copies the error message 
+      ** from the database handle into the statement and sets the statement
+      ** program counter to 0 to ensure that when the statement is 
+      ** finalized or reset the parser error message is available via
+      ** sqlite3_errmsg() and sqlite3_errcode().
+      */
+      const char *zErr = (const char *)sqlite3_value_text(db->pErr); 
+      sqlite3DbFree(db, v->zErrMsg);
+      if( !db->mallocFailed ){
+        v->zErrMsg = sqlite3DbStrDup(db, zErr);
+        v->rc = rc = sqlite3ApiExit(db, rc);
+      } else {
+        v->zErrMsg = 0;
+        v->rc = rc = SQLITE_NOMEM_BKPT;
+      }
+      break;
+    }
     sqlite3_reset(pStmt);
     if( savedPc>=0 ) v->doingRerun = 1;
     assert( v->expired==0 );
   }
-  if( rc2!=SQLITE_OK ){
-    /* This case occurs after failing to recompile an sql statement. 
-    ** The error message from the SQL compiler has already been loaded 
-    ** into the database handle. This block copies the error message 
-    ** from the database handle into the statement and sets the statement
-    ** program counter to 0 to ensure that when the statement is 
-    ** finalized or reset the parser error message is available via
-    ** sqlite3_errmsg() and sqlite3_errcode().
-    */
-    const char *zErr = (const char *)sqlite3_value_text(db->pErr); 
-    sqlite3DbFree(db, v->zErrMsg);
-    if( !db->mallocFailed ){
-      v->zErrMsg = sqlite3DbStrDup(db, zErr);
-      v->rc = rc2;
-    } else {
-      v->zErrMsg = 0;
-      v->rc = rc = SQLITE_NOMEM_BKPT;
-    }
-  }
-  rc = sqlite3ApiExit(db, rc);
   sqlite3_mutex_leave(db->mutex);
   return rc;
 }
@@ -78626,7 +78844,7 @@ static UnpackedRecord *vdbeUnpackRecord(
 
   pRet = sqlite3VdbeAllocUnpackedRecord(pKeyInfo);
   if( pRet ){
-    memset(pRet->aMem, 0, sizeof(Mem)*(pKeyInfo->nField+1));
+    memset(pRet->aMem, 0, sizeof(Mem)*(pKeyInfo->nKeyField+1));
     sqlite3VdbeRecordUnpack(pKeyInfo, nKey, pKey, pRet);
   }
   return pRet;
@@ -78699,7 +78917,7 @@ SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppVa
 */
 SQLITE_API int sqlite3_preupdate_count(sqlite3 *db){
   PreUpdate *p = db->pPreUpdate;
-  return (p ? p->keyinfo.nField : 0);
+  return (p ? p->keyinfo.nKeyField : 0);
 }
 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
 
@@ -78952,7 +79170,7 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql(
   Mem *pVar;               /* Value of a host parameter */
   StrAccum out;            /* Accumulate the output here */
 #ifndef SQLITE_OMIT_UTF16
-  Mem utf8;                /* Used to convert UTF16 parameters into UTF8 for display */
+  Mem utf8;                /* Used to convert UTF16 into UTF8 for display */
 #endif
   char zBase[100];         /* Initial working space */
 
@@ -79421,7 +79639,7 @@ static u16 SQLITE_NOINLINE computeNumericType(Mem *pMem){
   if( sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc)==0 ){
     return 0;
   }
-  if( sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc)==SQLITE_OK ){
+  if( sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc)==0 ){
     return MEM_Int;
   }
   return MEM_Real;
@@ -81117,13 +81335,23 @@ case OP_Ge: {             /* same as TK_GE, jump, in1, in3 */
     res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl);
   }
 compare_op:
-  switch( pOp->opcode ){
-    case OP_Eq:    res2 = res==0;     break;
-    case OP_Ne:    res2 = res;        break;
-    case OP_Lt:    res2 = res<0;      break;
-    case OP_Le:    res2 = res<=0;     break;
-    case OP_Gt:    res2 = res>0;      break;
-    default:       res2 = res>=0;     break;
+  /* At this point, res is negative, zero, or positive if reg[P1] is
+  ** less than, equal to, or greater than reg[P3], respectively.  Compute
+  ** the answer to this operator in res2, depending on what the comparison
+  ** operator actually is.  The next block of code depends on the fact
+  ** that the 6 comparison operators are consecutive integers in this
+  ** order:  NE, EQ, GT, LE, LT, GE */
+  assert( OP_Eq==OP_Ne+1 ); assert( OP_Gt==OP_Ne+2 ); assert( OP_Le==OP_Ne+3 );
+  assert( OP_Lt==OP_Ne+4 ); assert( OP_Ge==OP_Ne+5 );
+  if( res<0 ){                        /* ne, eq, gt, le, lt, ge */
+    static const unsigned char aLTb[] = { 1,  0,  0,  1,  1,  0 };
+    res2 = aLTb[pOp->opcode - OP_Ne];
+  }else if( res==0 ){
+    static const unsigned char aEQb[] = { 0,  1,  0,  1,  0,  1 };
+    res2 = aEQb[pOp->opcode - OP_Ne];
+  }else{
+    static const unsigned char aGTb[] = { 1,  0,  1,  0,  0,  1 };
+    res2 = aGTb[pOp->opcode - OP_Ne];
   }
 
   /* Undo any changes made by applyAffinity() to the input registers. */
@@ -81135,7 +81363,6 @@ compare_op:
   if( pOp->p5 & SQLITE_STOREP2 ){
     pOut = &aMem[pOp->p2];
     iCompare = res;
-    res2 = res2!=0;  /* For this path res2 must be exactly 0 or 1 */
     if( (pOp->p5 & SQLITE_KEEPNULL)!=0 ){
       /* The KEEPNULL flag prevents OP_Eq from overwriting a NULL with 1
       ** and prevents OP_Ne from overwriting NULL with 0.  This flag
@@ -81266,7 +81493,7 @@ case OP_Compare: {
     assert( memIsValid(&aMem[p2+idx]) );
     REGISTER_TRACE(p1+idx, &aMem[p1+idx]);
     REGISTER_TRACE(p2+idx, &aMem[p2+idx]);
-    assert( i<pKeyInfo->nField );
+    assert( i<pKeyInfo->nKeyField );
     pColl = pKeyInfo->aColl[i];
     bRev = pKeyInfo->aSortOrder[i];
     iCompare = sqlite3MemCompare(&aMem[p1+idx], &aMem[p2+idx], pColl);
@@ -81539,9 +81766,7 @@ case OP_Column: {
   const u8 *zData;   /* Part of the record being decoded */
   const u8 *zHdr;    /* Next unparsed byte of the header */
   const u8 *zEndHdr; /* Pointer to first byte after the header */
-  u32 offset;        /* Offset into the data */
   u64 offset64;      /* 64-bit offset */
-  u32 avail;         /* Number of bytes of available data */
   u32 t;             /* A type code from the record header */
   Mem *pReg;         /* PseudoTable input register */
 
@@ -81568,11 +81793,13 @@ case OP_Column: {
   if( pC->cacheStatus!=p->cacheCtr ){                /*OPTIMIZATION-IF-FALSE*/
     if( pC->nullRow ){
       if( pC->eCurType==CURTYPE_PSEUDO ){
-        assert( pC->uc.pseudoTableReg>0 );
-        pReg = &aMem[pC->uc.pseudoTableReg];
+        /* For the special case of as pseudo-cursor, the seekResult field
+        ** identifies the register that holds the record */
+        assert( pC->seekResult>0 );
+        pReg = &aMem[pC->seekResult];
         assert( pReg->flags & MEM_Blob );
         assert( memIsValid(pReg) );
-        pC->payloadSize = pC->szRow = avail = pReg->n;
+        pC->payloadSize = pC->szRow = pReg->n;
         pC->aRow = (u8*)pReg->z;
       }else{
         sqlite3VdbeMemSetNull(pDest);
@@ -81584,23 +81811,19 @@ case OP_Column: {
       assert( pCrsr );
       assert( sqlite3BtreeCursorIsValid(pCrsr) );
       pC->payloadSize = sqlite3BtreePayloadSize(pCrsr);
-      pC->aRow = sqlite3BtreePayloadFetch(pCrsr, &avail);
-      assert( avail<=65536 );  /* Maximum page size is 64KiB */
-      if( pC->payloadSize <= (u32)avail ){
-        pC->szRow = pC->payloadSize;
-      }else if( pC->payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
+      pC->aRow = sqlite3BtreePayloadFetch(pCrsr, &pC->szRow);
+      assert( pC->szRow<=pC->payloadSize );
+      assert( pC->szRow<=65536 );  /* Maximum page size is 64KiB */
+      if( pC->payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
         goto too_big;
-      }else{
-        pC->szRow = avail;
       }
     }
     pC->cacheStatus = p->cacheCtr;
-    pC->iHdrOffset = getVarint32(pC->aRow, offset);
+    pC->iHdrOffset = getVarint32(pC->aRow, aOffset[0]);
     pC->nHdrParsed = 0;
-    aOffset[0] = offset;
 
 
-    if( avail<offset ){      /*OPTIMIZATION-IF-FALSE*/
+    if( pC->szRow<aOffset[0] ){      /*OPTIMIZATION-IF-FALSE*/
       /* pC->aRow does not have to hold the entire row, but it does at least
       ** need to cover the header of the record.  If pC->aRow does not contain
       ** the complete header, then set it to zero, forcing the header to be
@@ -81617,17 +81840,26 @@ case OP_Column: {
       ** 3-byte type for each of the maximum of 32768 columns plus three
       ** extra bytes for the header length itself.  32768*3 + 3 = 98307.
       */
-      if( offset > 98307 || offset > pC->payloadSize ){
-        rc = SQLITE_CORRUPT_BKPT;
-        goto abort_due_to_error;
+      if( aOffset[0] > 98307 || aOffset[0] > pC->payloadSize ){
+        goto op_column_corrupt;
       }
-    }else if( offset>0 ){ /*OPTIMIZATION-IF-TRUE*/
-      /* The following goto is an optimization.  It can be omitted and
-      ** everything will still work.  But OP_Column is measurably faster
-      ** by skipping the subsequent conditional, which is always true.
+    }else{
+      /* This is an optimization.  By skipping over the first few tests
+      ** (ex: pC->nHdrParsed<=p2) in the next section, we achieve a
+      ** measurable performance gain.
+      **
+      ** This branch is taken even if aOffset[0]==0.  Such a record is never
+      ** generated by SQLite, and could be considered corruption, but we
+      ** accept it for historical reasons.  When aOffset[0]==0, the code this
+      ** branch jumps to reads past the end of the record, but never more
+      ** than a few bytes.  Even if the record occurs at the end of the page
+      ** content area, the "page header" comes after the page content and so
+      ** this overread is harmless.  Similar overreads can occur for a corrupt
+      ** database file.
       */
       zData = pC->aRow;
       assert( pC->nHdrParsed<=p2 );         /* Conditional skipped */
+      testcase( aOffset[0]==0 );
       goto op_column_read_header;
     }
   }
@@ -81656,6 +81888,7 @@ case OP_Column: {
       offset64 = aOffset[i];
       zHdr = zData + pC->iHdrOffset;
       zEndHdr = zData + aOffset[0];
+      testcase( zHdr>=zEndHdr );
       do{
         if( (t = zHdr[0])<0x80 ){
           zHdr++;
@@ -81676,9 +81909,13 @@ case OP_Column: {
       if( (zHdr>=zEndHdr && (zHdr>zEndHdr || offset64!=pC->payloadSize))
        || (offset64 > pC->payloadSize)
       ){
-        if( pC->aRow==0 ) sqlite3VdbeMemRelease(&sMem);
-        rc = SQLITE_CORRUPT_BKPT;
-        goto abort_due_to_error;
+        if( aOffset[0]==0 ){
+          i = 0;
+          zHdr = zEndHdr;
+        }else{
+          if( pC->aRow==0 ) sqlite3VdbeMemRelease(&sMem);
+          goto op_column_corrupt;
+        }
       }
 
       pC->nHdrParsed = i;
@@ -81772,6 +82009,15 @@ op_column_out:
   UPDATE_MAX_BLOBSIZE(pDest);
   REGISTER_TRACE(pOp->p3, pDest);
   break;
+
+op_column_corrupt:
+  if( aOp[0].p3>0 ){
+    pOp = &aOp[aOp[0].p3-1];
+    break;
+  }else{
+    rc = SQLITE_CORRUPT_BKPT;
+    goto abort_due_to_error;
+  }
 }
 
 /* Opcode: Affinity P1 P2 * P4 *
@@ -82112,7 +82358,7 @@ case OP_Savepoint: {
         int isSchemaChange;
         iSavepoint = db->nSavepoint - iSavepoint - 1;
         if( p1==SAVEPOINT_ROLLBACK ){
-          isSchemaChange = (db->flags & SQLITE_InternChanges)!=0;
+          isSchemaChange = (db->mDbFlags & DBFLAG_SchemaChange)!=0;
           for(ii=0; ii<db->nDb; ii++){
             rc = sqlite3BtreeTripAllCursors(db->aDb[ii].pBt,
                                        SQLITE_ABORT_ROLLBACK,
@@ -82131,7 +82377,7 @@ case OP_Savepoint: {
         if( isSchemaChange ){
           sqlite3ExpirePreparedStatements(db);
           sqlite3ResetAllSchemasOfConnection(db);
-          db->flags = (db->flags | SQLITE_InternChanges);
+          db->mDbFlags |= DBFLAG_SchemaChange;
         }
       }
   
@@ -82411,7 +82657,7 @@ case OP_SetCookie: {
   if( pOp->p2==BTREE_SCHEMA_VERSION ){
     /* When the schema cookie changes, record the new cookie internally */
     pDb->pSchema->schema_cookie = pOp->p3;
-    db->flags |= SQLITE_InternChanges;
+    db->mDbFlags |= DBFLAG_SchemaChange;
   }else if( pOp->p2==BTREE_FILE_FORMAT ){
     /* Record changes in the file format */
     pDb->pSchema->file_format = pOp->p3;
@@ -82550,7 +82796,7 @@ case OP_OpenWrite:
     assert( (pIn2->flags & MEM_Int)!=0 );
     sqlite3VdbeMemIntegerify(pIn2);
     p2 = (int)pIn2->u.i;
-    /* The p2 value always comes from a prior OP_CreateTable opcode and
+    /* The p2 value always comes from a prior OP_CreateBtree opcode and
     ** that opcode will always set the p2 value to 2 or more or else fail.
     ** If there were a failure, the prepared statement would have halted
     ** before reaching this instruction. */
@@ -82560,7 +82806,7 @@ case OP_OpenWrite:
     pKeyInfo = pOp->p4.pKeyInfo;
     assert( pKeyInfo->enc==ENC(db) );
     assert( pKeyInfo->db==db );
-    nField = pKeyInfo->nField+pKeyInfo->nXField;
+    nField = pKeyInfo->nAllField;
   }else if( pOp->p4type==P4_INT32 ){
     nField = pOp->p4.i;
   }
@@ -82770,8 +83016,13 @@ case OP_OpenPseudo: {
   pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, CURTYPE_PSEUDO);
   if( pCx==0 ) goto no_mem;
   pCx->nullRow = 1;
-  pCx->uc.pseudoTableReg = pOp->p2;
+  pCx->seekResult = pOp->p2;
   pCx->isTable = 1;
+  /* Give this pseudo-cursor a fake BtCursor pointer so that pCx
+  ** can be safely passed to sqlite3VdbeCursorMoveto().  This avoids a test
+  ** for pCx->eCurType==CURTYPE_BTREE inside of sqlite3VdbeCursorMoveto()
+  ** which is a performance optimization */
+  pCx->uc.pCursor = sqlite3BtreeFakeValidCursor();
   assert( pOp->p5==0 );
   break;
 }
@@ -83563,14 +83814,9 @@ case OP_InsertInt: {
 
   if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++;
   if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = x.nKey;
-  if( pData->flags & MEM_Null ){
-    x.pData = 0;
-    x.nData = 0;
-  }else{
-    assert( pData->flags & (MEM_Blob|MEM_Str) );
-    x.pData = pData->z;
-    x.nData = pData->n;
-  }
+  assert( pData->flags & (MEM_Blob|MEM_Str) );
+  x.pData = pData->z;
+  x.nData = pData->n;
   seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? pC->seekResult : 0);
   if( pData->flags & MEM_Zero ){
     x.nZero = pData->u.nZero;
@@ -83937,7 +84183,17 @@ case OP_NullRow: {
   break;
 }
 
-/* Opcode: Last P1 P2 P3 * *
+/* Opcode: SeekEnd P1 * * * *
+**
+** Position cursor P1 at the end of the btree for the purpose of
+** appending a new entry onto the btree.
+**
+** It is assumed that the cursor is used only for appending and so
+** if the cursor is valid, then the cursor must already be pointing
+** at the end of the btree and so no changes are made to
+** the cursor.
+*/
+/* Opcode: Last P1 P2 * * *
 **
 ** The next use of the Rowid or Column or Prev instruction for P1 
 ** will refer to the last entry in the database table or index.
@@ -83948,14 +84204,8 @@ case OP_NullRow: {
 ** This opcode leaves the cursor configured to move in reverse order,
 ** from the end toward the beginning.  In other words, the cursor is
 ** configured to use Prev, not Next.
-**
-** If P3 is -1, then the cursor is positioned at the end of the btree
-** for the purpose of appending a new entry onto the btree.  In that
-** case P2 must be 0.  It is assumed that the cursor is used only for
-** appending and so if the cursor is valid, then the cursor must already
-** be pointing at the end of the btree and so no changes are made to
-** the cursor.
 */
+case OP_SeekEnd:
 case OP_Last: {        /* jump */
   VdbeCursor *pC;
   BtCursor *pCrsr;
@@ -83968,22 +84218,24 @@ case OP_Last: {        /* jump */
   pCrsr = pC->uc.pCursor;
   res = 0;
   assert( pCrsr!=0 );
-  pC->seekResult = pOp->p3;
 #ifdef SQLITE_DEBUG
-  pC->seekOp = OP_Last;
+  pC->seekOp = pOp->opcode;
 #endif
-  if( pOp->p3==0 || !sqlite3BtreeCursorIsValidNN(pCrsr) ){
-    rc = sqlite3BtreeLast(pCrsr, &res);
-    pC->nullRow = (u8)res;
-    pC->deferredMoveto = 0;
-    pC->cacheStatus = CACHE_STALE;
-    if( rc ) goto abort_due_to_error;
-    if( pOp->p2>0 ){
-      VdbeBranchTaken(res!=0,2);
-      if( res ) goto jump_to_p2;
-    }
-  }else{
+  if( pOp->opcode==OP_SeekEnd ){
     assert( pOp->p2==0 );
+    pC->seekResult = -1;
+    if( sqlite3BtreeCursorIsValidNN(pCrsr) ){
+      break;
+    }
+  }
+  rc = sqlite3BtreeLast(pCrsr, &res);
+  pC->nullRow = (u8)res;
+  pC->deferredMoveto = 0;
+  pC->cacheStatus = CACHE_STALE;
+  if( rc ) goto abort_due_to_error;
+  if( pOp->p2>0 ){
+    VdbeBranchTaken(res!=0,2);
+    if( res ) goto jump_to_p2;
   }
   break;
 }
@@ -84612,50 +84864,28 @@ case OP_ResetSorter: {
   break;
 }
 
-/* Opcode: CreateTable P1 P2 * * *
-** Synopsis: r[P2]=root iDb=P1
-**
-** Allocate a new table in the main database file if P1==0 or in the
-** auxiliary database file if P1==1 or in an attached database if
-** P1>1.  Write the root page number of the new table into
-** register P2
+/* Opcode: CreateBtree P1 P2 P3 * *
+** Synopsis: r[P2]=root iDb=P1 flags=P3
 **
-** The difference between a table and an index is this:  A table must
-** have a 4-byte integer key and can have arbitrary data.  An index
-** has an arbitrary key but no data.
-**
-** See also: CreateIndex
-*/
-/* Opcode: CreateIndex P1 P2 * * *
-** Synopsis: r[P2]=root iDb=P1
-**
-** Allocate a new index in the main database file if P1==0 or in the
-** auxiliary database file if P1==1 or in an attached database if
-** P1>1.  Write the root page number of the new table into
-** register P2.
-**
-** See documentation on OP_CreateTable for additional information.
+** Allocate a new b-tree in the main database file if P1==0 or in the
+** TEMP database file if P1==1 or in an attached database if
+** P1>1.  The P3 argument must be 1 (BTREE_INTKEY) for a rowid table
+** it must be 2 (BTREE_BLOBKEY) for a index or WITHOUT ROWID table.
+** The root page number of the new b-tree is stored in register P2.
 */
-case OP_CreateIndex:            /* out2 */
-case OP_CreateTable: {          /* out2 */
+case OP_CreateBtree: {          /* out2 */
   int pgno;
-  int flags;
   Db *pDb;
 
   pOut = out2Prerelease(p, pOp);
   pgno = 0;
+  assert( pOp->p3==BTREE_INTKEY || pOp->p3==BTREE_BLOBKEY );
   assert( pOp->p1>=0 && pOp->p1<db->nDb );
   assert( DbMaskTest(p->btreeMask, pOp->p1) );
   assert( p->readOnly==0 );
   pDb = &db->aDb[pOp->p1];
   assert( pDb->pBt!=0 );
-  if( pOp->opcode==OP_CreateTable ){
-    /* flags = BTREE_INTKEY; */
-    flags = BTREE_INTKEY;
-  }else{
-    flags = BTREE_BLOBKEY;
-  }
-  rc = sqlite3BtreeCreateTable(pDb->pBt, &pgno, flags);
+  rc = sqlite3BtreeCreateTable(pDb->pBt, &pgno, pOp->p3);
   if( rc ) goto abort_due_to_error;
   pOut->u.i = pgno;
   break;
@@ -84817,7 +85047,7 @@ case OP_IntegrityCk: {
   nRoot = pOp->p2;
   aRoot = pOp->p4.ai;
   assert( nRoot>0 );
-  assert( aRoot[nRoot]==0 );
+  assert( aRoot[0]==nRoot );
   assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) );
   pnErr = &aMem[pOp->p3];
   assert( (pnErr->flags & MEM_Int)!=0 );
@@ -84825,7 +85055,7 @@ case OP_IntegrityCk: {
   pIn1 = &aMem[pOp->p1];
   assert( pOp->p5<db->nDb );
   assert( DbMaskTest(p->btreeMask, pOp->p5) );
-  z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, aRoot, nRoot,
+  z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, &aRoot[1], nRoot,
                                  (int)pnErr->u.i+1, &nErr);
   sqlite3VdbeMemSetNull(pIn1);
   if( nErr==0 ){
@@ -86166,7 +86396,7 @@ case OP_Function: {
 }
 
 
-/* Opcode: Init P1 P2 * P4 *
+/* Opcode: Init P1 P2 P3 P4 *
 ** Synopsis: Start at P2
 **
 ** Programs contain a single instance of this opcode as the very first
@@ -86180,6 +86410,9 @@ case OP_Function: {
 **
 ** Increment the value of P1 so that OP_Once opcodes will jump the
 ** first time they are evaluated for this run.
+**
+** If P3 is not zero, then it is an address to jump to if an SQLITE_CORRUPT
+** error is encountered.
 */
 case OP_Init: {          /* jump */
   char *zTrace;
@@ -86454,11 +86687,12 @@ static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){
   v->aMem[1].u.i = iRow;
 
   /* If the statement has been run before (and is paused at the OP_ResultRow)
-  ** then back it up to the point where it does the OP_SeekRowid.  This could
+  ** then back it up to the point where it does the OP_NotExists.  This could
   ** have been down with an extra OP_Goto, but simply setting the program
   ** counter is faster. */
-  if( v->pc>3 ){
-    v->pc = 3;
+  if( v->pc>4 ){
+    v->pc = 4;
+    assert( v->aOp[v->pc].opcode==OP_NotExists );
     rc = sqlite3VdbeExec(v);
   }else{
     rc = sqlite3_step(p->pStmt);
@@ -86520,8 +86754,8 @@ SQLITE_API int sqlite3_blob_open(
   int rc = SQLITE_OK;
   char *zErr = 0;
   Table *pTab;
-  Parse *pParse = 0;
   Incrblob *pBlob = 0;
+  Parse sParse;
 
 #ifdef SQLITE_ENABLE_API_ARMOR
   if( ppBlob==0 ){
@@ -86539,37 +86773,34 @@ SQLITE_API int sqlite3_blob_open(
   sqlite3_mutex_enter(db->mutex);
 
   pBlob = (Incrblob *)sqlite3DbMallocZero(db, sizeof(Incrblob));
-  if( !pBlob ) goto blob_open_out;
-  pParse = sqlite3StackAllocRaw(db, sizeof(*pParse));
-  if( !pParse ) goto blob_open_out;
-
   do {
-    memset(pParse, 0, sizeof(Parse));
-    pParse->db = db;
+    memset(&sParse, 0, sizeof(Parse));
+    if( !pBlob ) goto blob_open_out;
+    sParse.db = db;
     sqlite3DbFree(db, zErr);
     zErr = 0;
 
     sqlite3BtreeEnterAll(db);
-    pTab = sqlite3LocateTable(pParse, 0, zTable, zDb);
+    pTab = sqlite3LocateTable(&sParse, 0, zTable, zDb);
     if( pTab && IsVirtual(pTab) ){
       pTab = 0;
-      sqlite3ErrorMsg(pParse, "cannot open virtual table: %s", zTable);
+      sqlite3ErrorMsg(&sParse, "cannot open virtual table: %s", zTable);
     }
     if( pTab && !HasRowid(pTab) ){
       pTab = 0;
-      sqlite3ErrorMsg(pParse, "cannot open table without rowid: %s", zTable);
+      sqlite3ErrorMsg(&sParse, "cannot open table without rowid: %s", zTable);
     }
 #ifndef SQLITE_OMIT_VIEW
     if( pTab && pTab->pSelect ){
       pTab = 0;
-      sqlite3ErrorMsg(pParse, "cannot open view: %s", zTable);
+      sqlite3ErrorMsg(&sParse, "cannot open view: %s", zTable);
     }
 #endif
     if( !pTab ){
-      if( pParse->zErrMsg ){
+      if( sParse.zErrMsg ){
         sqlite3DbFree(db, zErr);
-        zErr = pParse->zErrMsg;
-        pParse->zErrMsg = 0;
+        zErr = sParse.zErrMsg;
+        sParse.zErrMsg = 0;
       }
       rc = SQLITE_ERROR;
       sqlite3BtreeLeaveAll(db);
@@ -86633,7 +86864,7 @@ SQLITE_API int sqlite3_blob_open(
       }
     }
 
-    pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(pParse);
+    pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(&sParse);
     assert( pBlob->pStmt || db->mallocFailed );
     if( pBlob->pStmt ){
       
@@ -86669,7 +86900,8 @@ SQLITE_API int sqlite3_blob_open(
       sqlite3VdbeAddOp4Int(v, OP_Transaction, iDb, wrFlag, 
                            pTab->pSchema->schema_cookie,
                            pTab->pSchema->iGeneration);
-      sqlite3VdbeChangeP5(v, 1);     
+      sqlite3VdbeChangeP5(v, 1);
+      assert( sqlite3VdbeCurrentAddr(v)==2 || db->mallocFailed );
       aOp = sqlite3VdbeAddOpList(v, ArraySize(openBlob), openBlob, iLn);
 
       /* Make sure a mutex is held on the table to be accessed */
@@ -86684,7 +86916,7 @@ SQLITE_API int sqlite3_blob_open(
         aOp[0].p1 = iDb;
         aOp[0].p2 = pTab->tnum;
         aOp[0].p3 = wrFlag;
-        sqlite3VdbeChangeP4(v, 1, pTab->zName, P4_TRANSIENT);
+        sqlite3VdbeChangeP4(v, 2, pTab->zName, P4_TRANSIENT);
       }
       if( db->mallocFailed==0 ){
 #endif
@@ -86706,10 +86938,10 @@ SQLITE_API int sqlite3_blob_open(
         aOp[1].p4.i = pTab->nCol+1;
         aOp[3].p2 = pTab->nCol;
 
-        pParse->nVar = 0;
-        pParse->nMem = 1;
-        pParse->nTab = 1;
-        sqlite3VdbeMakeReady(v, pParse);
+        sParse.nVar = 0;
+        sParse.nMem = 1;
+        sParse.nTab = 1;
+        sqlite3VdbeMakeReady(v, &sParse);
       }
     }
    
@@ -86731,8 +86963,7 @@ blob_open_out:
   }
   sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : 0), zErr);
   sqlite3DbFree(db, zErr);
-  sqlite3ParserReset(pParse);
-  sqlite3StackFree(db, pParse);
+  sqlite3ParserReset(&sParse);
   rc = sqlite3ApiExit(db, rc);
   sqlite3_mutex_leave(db->mutex);
   return rc;
@@ -87726,7 +87957,7 @@ static int vdbeSorterCompareText(
   }
 
   if( res==0 ){
-    if( pTask->pSorter->pKeyInfo->nField>1 ){
+    if( pTask->pSorter->pKeyInfo->nKeyField>1 ){
       res = vdbeSorterCompareTail(
           pTask, pbKey2Cached, pKey1, nKey1, pKey2, nKey2
       );
@@ -87795,7 +88026,7 @@ static int vdbeSorterCompareInt(
   }
 
   if( res==0 ){
-    if( pTask->pSorter->pKeyInfo->nField>1 ){
+    if( pTask->pSorter->pKeyInfo->nKeyField>1 ){
       res = vdbeSorterCompareTail(
           pTask, pbKey2Cached, pKey1, nKey1, pKey2, nKey2
       );
@@ -87810,7 +88041,7 @@ static int vdbeSorterCompareInt(
 /*
 ** Initialize the temporary index cursor just opened as a sorter cursor.
 **
-** Usually, the sorter module uses the value of (pCsr->pKeyInfo->nField)
+** Usually, the sorter module uses the value of (pCsr->pKeyInfo->nKeyField)
 ** to determine the number of fields that should be compared from the
 ** records being sorted. However, if the value passed as argument nField
 ** is non-zero and the sorter is able to guarantee a stable sort, nField
@@ -87863,7 +88094,7 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit(
 
   assert( pCsr->pKeyInfo && pCsr->pBtx==0 );
   assert( pCsr->eCurType==CURTYPE_SORTER );
-  szKeyInfo = sizeof(KeyInfo) + (pCsr->pKeyInfo->nField-1)*sizeof(CollSeq*);
+  szKeyInfo = sizeof(KeyInfo) + (pCsr->pKeyInfo->nKeyField-1)*sizeof(CollSeq*);
   sz = sizeof(VdbeSorter) + nWorker * sizeof(SortSubtask);
 
   pSorter = (VdbeSorter*)sqlite3DbMallocZero(db, sz + szKeyInfo);
@@ -87875,8 +88106,7 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit(
     memcpy(pKeyInfo, pCsr->pKeyInfo, szKeyInfo);
     pKeyInfo->db = 0;
     if( nField && nWorker==0 ){
-      pKeyInfo->nXField += (pKeyInfo->nField - nField);
-      pKeyInfo->nField = nField;
+      pKeyInfo->nKeyField = nField;
     }
     pSorter->pgsz = pgsz = sqlite3BtreeGetPageSize(db->aDb[0].pBt);
     pSorter->nTask = nWorker + 1;
@@ -87904,11 +88134,9 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit(
       mxCache = MIN(mxCache, SQLITE_MAX_PMASZ);
       pSorter->mxPmaSize = MAX(pSorter->mnPmaSize, (int)mxCache);
 
-      /* EVIDENCE-OF: R-26747-61719 When the application provides any amount of
-      ** scratch memory using SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary
-      ** large heap allocations.
-      */
-      if( sqlite3GlobalConfig.pScratch==0 ){
+      /* Avoid large memory allocations if the application has requested
+      ** SQLITE_CONFIG_SMALL_MALLOC. */
+      if( sqlite3GlobalConfig.bSmallMalloc==0 ){
         assert( pSorter->iMemory==0 );
         pSorter->nMemory = pgsz;
         pSorter->list.aMemory = (u8*)sqlite3Malloc(pgsz);
@@ -87916,7 +88144,7 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit(
       }
     }
 
-    if( (pKeyInfo->nField+pKeyInfo->nXField)<13 
+    if( pKeyInfo->nAllField<13 
      && (pKeyInfo->aColl[0]==0 || pKeyInfo->aColl[0]==db->pDfltColl)
     ){
       pSorter->typeMask = SORTER_TYPE_INTEGER | SORTER_TYPE_TEXT;
@@ -88231,7 +88459,7 @@ static int vdbeSortAllocUnpacked(SortSubtask *pTask){
   if( pTask->pUnpacked==0 ){
     pTask->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pTask->pSorter->pKeyInfo);
     if( pTask->pUnpacked==0 ) return SQLITE_NOMEM_BKPT;
-    pTask->pUnpacked->nField = pTask->pSorter->pKeyInfo->nField;
+    pTask->pUnpacked->nField = pTask->pSorter->pKeyInfo->nKeyField;
     pTask->pUnpacked->errCode = 0;
   }
   return SQLITE_OK;
@@ -89755,7 +89983,8 @@ static int memjrnlRead(
   int iChunkOffset;
   FileChunk *pChunk;
 
-#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \
+ || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
   if( (iAmt+iOfst)>p->endpoint.iOffset ){
     return SQLITE_IOERR_SHORT_READ;
   }
@@ -89874,7 +90103,8 @@ static int memjrnlWrite(
     ** atomic-write optimization. In this case the first 28 bytes of the
     ** journal file may be written as part of committing the transaction. */ 
     assert( iOfst==p->endpoint.iOffset || iOfst==0 );
-#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \
+ || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
     if( iOfst==0 && p->pFirst ){
       assert( p->nChunkSize>iAmt );
       memcpy((u8*)p->pFirst->zChunk, zBuf, iAmt);
@@ -90043,17 +90273,31 @@ SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *pJfd){
   sqlite3JournalOpen(0, 0, pJfd, 0, -1);
 }
 
-#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \
+ || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
 /*
 ** If the argument p points to a MemJournal structure that is not an 
 ** in-memory-only journal file (i.e. is one that was opened with a +ve
-** nSpill parameter), and the underlying file has not yet been created, 
-** create it now.
+** nSpill parameter or as SQLITE_OPEN_MAIN_JOURNAL), and the underlying 
+** file has not yet been created, create it now.
 */
-SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *p){
+SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *pJfd){
   int rc = SQLITE_OK;
-  if( p->pMethods==&MemJournalMethods && ((MemJournal*)p)->nSpill>0 ){
-    rc = memjrnlCreateFile((MemJournal*)p);
+  MemJournal *p = (MemJournal*)pJfd;
+  if( p->pMethod==&MemJournalMethods && (
+#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+     p->nSpill>0
+#else
+     /* While this appears to not be possible without ATOMIC_WRITE, the
+     ** paths are complex, so it seems prudent to leave the test in as
+     ** a NEVER(), in case our analysis is subtly flawed. */
+     NEVER(p->nSpill>0)
+#endif
+#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+     || (p->flags & SQLITE_OPEN_MAIN_JOURNAL)
+#endif
+  )){
+    rc = memjrnlCreateFile(p);
   }
   return rc;
 }
@@ -90120,18 +90364,22 @@ static SQLITE_NOINLINE int walkExpr(Walker *pWalker, Expr *pExpr){
   int rc;
   testcase( ExprHasProperty(pExpr, EP_TokenOnly) );
   testcase( ExprHasProperty(pExpr, EP_Reduced) );
-  rc = pWalker->xExprCallback(pWalker, pExpr);
-  if( rc ) return rc & WRC_Abort;
-  if( !ExprHasProperty(pExpr,(EP_TokenOnly|EP_Leaf)) ){
-    if( pExpr->pLeft && walkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort;
-    assert( pExpr->x.pList==0 || pExpr->pRight==0 );
-    if( pExpr->pRight ){
-      if( walkExpr(pWalker, pExpr->pRight) ) return WRC_Abort;
-    }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){
-      if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort;
-    }else if( pExpr->x.pList ){
-      if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort;
+  while(1){
+    rc = pWalker->xExprCallback(pWalker, pExpr);
+    if( rc ) return rc & WRC_Abort;
+    if( !ExprHasProperty(pExpr,(EP_TokenOnly|EP_Leaf)) ){
+      if( pExpr->pLeft && walkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort;
+       assert( pExpr->x.pList==0 || pExpr->pRight==0 );
+      if( pExpr->pRight ){
+        pExpr = pExpr->pRight;
+        continue;
+      }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){
+        if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort;
+      }else if( pExpr->x.pList ){
+        if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort;
+      }
     }
+    break;
   }
   return WRC_Continue;
 }
@@ -91199,12 +91447,10 @@ static int resolveCompoundOrderBy(
   pOrderBy = pSelect->pOrderBy;
   if( pOrderBy==0 ) return 0;
   db = pParse->db;
-#if SQLITE_MAX_COLUMN
   if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
     sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause");
     return 1;
   }
-#endif
   for(i=0; i<pOrderBy->nExpr; i++){
     pOrderBy->a[i].done = 0;
   }
@@ -91296,12 +91542,10 @@ SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(
   struct ExprList_item *pItem;
 
   if( pOrderBy==0 || pParse->db->mallocFailed ) return 0;
-#if SQLITE_MAX_COLUMN
   if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
     sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType);
     return 1;
   }
-#endif
   pEList = pSelect->pEList;
   assert( pEList!=0 );  /* sqlite3SelectNew() guarantees this */
   for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
@@ -91902,6 +92146,11 @@ SQLITE_PRIVATE Expr *sqlite3ExprSkipCollate(Expr *pExpr){
 ** Return the collation sequence for the expression pExpr. If
 ** there is no defined collating sequence, return NULL.
 **
+** See also: sqlite3ExprNNCollSeq()
+**
+** The sqlite3ExprNNCollSeq() works the same exact that it returns the
+** default collation if pExpr has no defined collation.
+**
 ** The collating sequence might be determined by a COLLATE operator
 ** or by the presence of a column with a defined collating sequence.
 ** COLLATE operators take first precedence.  Left operands take
@@ -91967,6 +92216,32 @@ SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){
 }
 
 /*
+** Return the collation sequence for the expression pExpr. If
+** there is no defined collating sequence, return a pointer to the
+** defautl collation sequence.
+**
+** See also: sqlite3ExprCollSeq()
+**
+** The sqlite3ExprCollSeq() routine works the same except that it
+** returns NULL if there is no defined collation.
+*/
+SQLITE_PRIVATE CollSeq *sqlite3ExprNNCollSeq(Parse *pParse, Expr *pExpr){
+  CollSeq *p = sqlite3ExprCollSeq(pParse, pExpr);
+  if( p==0 ) p = pParse->db->pDfltColl;
+  assert( p!=0 );
+  return p;
+}
+
+/*
+** Return TRUE if the two expressions have equivalent collating sequences.
+*/
+SQLITE_PRIVATE int sqlite3ExprCollSeqMatch(Parse *pParse, Expr *pE1, Expr *pE2){
+  CollSeq *pColl1 = sqlite3ExprNNCollSeq(pParse, pE1);
+  CollSeq *pColl2 = sqlite3ExprNNCollSeq(pParse, pE2);
+  return sqlite3StrICmp(pColl1->zName, pColl2->zName)==0;
+}
+
+/*
 ** pExpr is an operand of a comparison operator.  aff2 is the
 ** type affinity of the other operand.  This routine returns the
 ** type affinity that should be used for the comparison operator.
@@ -92553,7 +92828,7 @@ SQLITE_PRIVATE Expr *sqlite3Expr(
 ){
   Token x;
   x.z = zToken;
-  x.n = zToken ? sqlite3Strlen30(zToken) : 0;
+  x.n = sqlite3Strlen30(zToken);
   return sqlite3ExprAlloc(db, op, &x, 0);
 }
 
@@ -93080,10 +93355,9 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags)
   Expr *pPriorSelectCol = 0;
   assert( db!=0 );
   if( p==0 ) return 0;
-  pNew = sqlite3DbMallocRawNN(db, 
-             sizeof(*pNew)+sizeof(pNew->a[0])*(p->nExpr-1) );
+  pNew = sqlite3DbMallocRawNN(db, sqlite3DbMallocSize(db, p));
   if( pNew==0 ) return 0;
-  pNew->nAlloc = pNew->nExpr = p->nExpr;
+  pNew->nExpr = p->nExpr;
   pItem = pNew->a;
   pOldItem = p->a;
   for(i=0; i<p->nExpr; i++, pItem++, pOldItem++){
@@ -93237,6 +93511,13 @@ SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
 ** Add a new element to the end of an expression list.  If pList is
 ** initially NULL, then create a new expression list.
 **
+** The pList argument must be either NULL or a pointer to an ExprList
+** obtained from a prior call to sqlite3ExprListAppend().  This routine
+** may not be used with an ExprList obtained from sqlite3ExprListDup().
+** Reason:  This routine assumes that the number of slots in pList->a[]
+** is a power of two.  That is true for sqlite3ExprListAppend() returns
+** but is not necessarily true from the return value of sqlite3ExprListDup().
+**
 ** If a memory allocation error occurs, the entire list is freed and
 ** NULL is returned.  If non-NULL is returned, then it is guaranteed
 ** that the new entry was successfully appended.
@@ -93255,16 +93536,14 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(
       goto no_mem;
     }
     pList->nExpr = 0;
-    pList->nAlloc = 1;
-  }else if( pList->nExpr==pList->nAlloc ){
+  }else if( (pList->nExpr & (pList->nExpr-1))==0 ){
     ExprList *pNew;
     pNew = sqlite3DbRealloc(db, pList, 
-             sizeof(*pList)+(2*pList->nAlloc - 1)*sizeof(pList->a[0]));
+             sizeof(*pList)+(2*pList->nExpr - 1)*sizeof(pList->a[0]));
     if( pNew==0 ){
       goto no_mem;
     }
     pList = pNew;
-    pList->nAlloc *= 2;
   }
   pItem = &pList->a[pList->nExpr++];
   assert( offsetof(struct ExprList_item,zName)==sizeof(pItem->pExpr) );
@@ -93455,17 +93734,29 @@ SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
 SQLITE_PRIVATE u32 sqlite3ExprListFlags(const ExprList *pList){
   int i;
   u32 m = 0;
-  if( pList ){
-    for(i=0; i<pList->nExpr; i++){
-       Expr *pExpr = pList->a[i].pExpr;
-       assert( pExpr!=0 );
-       m |= pExpr->flags;
-    }
+  assert( pList!=0 );
+  for(i=0; i<pList->nExpr; i++){
+     Expr *pExpr = pList->a[i].pExpr;
+     assert( pExpr!=0 );
+     m |= pExpr->flags;
   }
   return m;
 }
 
 /*
+** This is a SELECT-node callback for the expression walker that
+** always "fails".  By "fail" in this case, we mean set
+** pWalker->eCode to zero and abort.
+**
+** This callback is used by multiple expression walkers.
+*/
+SQLITE_PRIVATE int sqlite3SelectWalkFail(Walker *pWalker, Select *NotUsed){
+  UNUSED_PARAMETER(NotUsed);
+  pWalker->eCode = 0;
+  return WRC_Abort;
+}
+
+/*
 ** These routines are Walker callbacks used to check expressions to
 ** see if they are "constant" for some definition of constant.  The
 ** Walker.eCode value determines the type of "constant" we are looking
@@ -93541,21 +93832,16 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
       }
       /* Fall through */
     default:
-      testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
-      testcase( pExpr->op==TK_EXISTS ); /* selectNodeIsConstant will disallow */
+      testcase( pExpr->op==TK_SELECT ); /* sqlite3SelectWalkFail will disallow */
+      testcase( pExpr->op==TK_EXISTS ); /* sqlite3SelectWalkFail will disallow */
       return WRC_Continue;
   }
 }
-static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){
-  UNUSED_PARAMETER(NotUsed);
-  pWalker->eCode = 0;
-  return WRC_Abort;
-}
 static int exprIsConst(Expr *p, int initFlag, int iCur){
   Walker w;
   w.eCode = initFlag;
   w.xExprCallback = exprNodeIsConstant;
-  w.xSelectCallback = selectNodeIsConstant;
+  w.xSelectCallback = sqlite3SelectWalkFail;
 #ifdef SQLITE_DEBUG
   w.xSelectCallback2 = sqlite3SelectWalkAssert2;
 #endif
@@ -93609,8 +93895,8 @@ static int exprNodeIsConstantOrGroupBy(Walker *pWalker, Expr *pExpr){
   for(i=0; i<pGroupBy->nExpr; i++){
     Expr *p = pGroupBy->a[i].pExpr;
     if( sqlite3ExprCompare(0, pExpr, p, -1)<2 ){
-      CollSeq *pColl = sqlite3ExprCollSeq(pWalker->pParse, p);
-      if( pColl==0 || sqlite3_stricmp("BINARY", pColl->zName)==0 ){
+      CollSeq *pColl = sqlite3ExprNNCollSeq(pWalker->pParse, p);
+      if( sqlite3_stricmp("BINARY", pColl->zName)==0 ){
         return WRC_Prune;
       }
     }
@@ -93678,7 +93964,7 @@ SQLITE_PRIVATE int sqlite3ExprContainsSubquery(Expr *p){
   Walker w;
   w.eCode = 1;
   w.xExprCallback = sqlite3ExprWalkNoop;
-  w.xSelectCallback = selectNodeIsConstant;
+  w.xSelectCallback = sqlite3SelectWalkFail;
 #ifdef SQLITE_DEBUG
   w.xSelectCallback2 = sqlite3SelectWalkAssert2;
 #endif
@@ -93751,8 +94037,8 @@ SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){
     case TK_BLOB:
       return 0;
     case TK_COLUMN:
-      assert( p->pTab!=0 );
       return ExprHasProperty(p, EP_CanBeNull) ||
+             p->pTab==0 ||  /* Reference to column of index on expression */
              (p->iColumn>=0 && p->pTab->aCol[p->iColumn].notNull==0);
     default:
       return 1;
@@ -94414,7 +94700,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(
         /* Loop through each expression in <exprlist>. */
         r1 = sqlite3GetTempReg(pParse);
         r2 = sqlite3GetTempReg(pParse);
-        if( isRowid ) sqlite3VdbeAddOp2(v, OP_Null, 0, r2);
+        if( isRowid ) sqlite3VdbeAddOp4(v, OP_Blob, 0, r2, 0, "", P4_STATIC);
         for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){
           Expr *pE2 = pItem->pExpr;
           int iValToIns;
@@ -94842,7 +95128,7 @@ static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
     const char *z = pExpr->u.zToken;
     assert( z!=0 );
     c = sqlite3DecOrHexToI64(z, &value);
-    if( c==1 || (c==2 && !negFlag) || (negFlag && value==SMALLEST_INT64)){
+    if( (c==3 && !negFlag) || (c==2) || (negFlag && value==SMALLEST_INT64)){
 #ifdef SQLITE_OMIT_FLOATING_POINT
       sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z);
 #else
@@ -94856,7 +95142,7 @@ static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
       }
 #endif
     }else{
-      if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; }
+      if( negFlag ){ value = c==3 ? SMALLEST_INT64 : -value; }
       sqlite3VdbeAddOp4Dup8(v, OP_Int64, 0, iMem, 0, (u8*)&value, P4_INT64);
     }
   }
@@ -96011,7 +96297,9 @@ SQLITE_PRIVATE void sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int targ
 ** Generate code that pushes the value of every element of the given
 ** expression list into a sequence of registers beginning at target.
 **
-** Return the number of elements evaluated.
+** Return the number of elements evaluated.  The number returned will
+** usually be pList->nExpr but might be reduced if SQLITE_ECEL_OMITREF
+** is defined.
 **
 ** The SQLITE_ECEL_DUP flag prevents the arguments from being
 ** filled using OP_SCopy.  OP_Copy must be used instead.
@@ -96022,6 +96310,8 @@ SQLITE_PRIVATE void sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int targ
 ** The SQLITE_ECEL_REF flag means that expressions in the list with
 ** ExprList.a[].u.x.iOrderByCol>0 have already been evaluated and stored
 ** in registers at srcReg, and so the value can be copied from there.
+** If SQLITE_ECEL_OMITREF is also set, then the values with u.x.iOrderByCol>0
+** are simply omitted rather than being copied from srcReg.
 */
 SQLITE_PRIVATE int sqlite3ExprCodeExprList(
   Parse *pParse,     /* Parsing context */
@@ -97455,9 +97745,9 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
   char *zWhere = 0;         /* Where clause to locate temp triggers */
 #endif
   VTable *pVTab = 0;        /* Non-zero if this is a v-tab with an xRename() */
-  int savedDbFlags;         /* Saved value of db->flags */
+  u32 savedDbFlags;         /* Saved value of db->mDbFlags */
 
-  savedDbFlags = db->flags;  
+  savedDbFlags = db->mDbFlags;  
   if( NEVER(db->mallocFailed) ) goto exit_rename_table;
   assert( pSrc->nSrc==1 );
   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
@@ -97466,7 +97756,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
   if( !pTab ) goto exit_rename_table;
   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
   zDb = db->aDb[iDb].zDbSName;
-  db->flags |= SQLITE_PreferBuiltin;
+  db->mDbFlags |= DBFLAG_PreferBuiltin;
 
   /* Get a NULL terminated version of the new table name. */
   zName = sqlite3NameFromToken(db, pName);
@@ -97631,7 +97921,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
 exit_rename_table:
   sqlite3SrcListDelete(db, pSrc);
   sqlite3DbFree(db, zName);
-  db->flags = savedDbFlags;
+  db->mDbFlags = savedDbFlags;
 }
 
 /*
@@ -97732,11 +98022,11 @@ SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
   zCol = sqlite3DbStrNDup(db, (char*)pColDef->z, pColDef->n);
   if( zCol ){
     char *zEnd = &zCol[pColDef->n-1];
-    int savedDbFlags = db->flags;
+    u32 savedDbFlags = db->mDbFlags;
     while( zEnd>zCol && (*zEnd==';' || sqlite3Isspace(*zEnd)) ){
       *zEnd-- = '\0';
     }
-    db->flags |= SQLITE_PreferBuiltin;
+    db->mDbFlags |= DBFLAG_PreferBuiltin;
     sqlite3NestedParse(pParse, 
         "UPDATE \"%w\".%s SET "
           "sql = substr(sql,1,%d) || ', ' || %Q || substr(sql,%d) "
@@ -97745,7 +98035,7 @@ SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
       zTab
     );
     sqlite3DbFree(db, zCol);
-    db->flags = savedDbFlags;
+    db->mDbFlags = savedDbFlags;
   }
 
   /* Make sure the schema version is at least 3.  But do not upgrade
@@ -99871,10 +100161,6 @@ static void attachFunc(
     );
     goto attach_error;
   }
-  if( !db->autoCommit ){
-    zErrDyn = sqlite3MPrintf(db, "cannot ATTACH database within transaction");
-    goto attach_error;
-  }
   for(i=0; i<db->nDb; i++){
     const char *z = db->aDb[i].zDbSName;
     assert( z && zName );
@@ -100066,11 +100352,6 @@ static void detachFunc(
     sqlite3_snprintf(sizeof(zErr),zErr, "cannot detach database %s", zName);
     goto detach_error;
   }
-  if( !db->autoCommit ){
-    sqlite3_snprintf(sizeof(zErr), zErr,
-                     "cannot DETACH database within transaction");
-    goto detach_error;
-  }
   if( sqlite3BtreeIsInReadTrans(pDb->pBt) || sqlite3BtreeIsInBackup(pDb->pBt) ){
     sqlite3_snprintf(sizeof(zErr),zErr, "database %s is locked", zName);
     goto detach_error;
@@ -100483,11 +100764,9 @@ SQLITE_PRIVATE int sqlite3AuthReadCol(
 #endif
                 );
   if( rc==SQLITE_DENY ){
-    if( db->nDb>2 || iDb!=0 ){
-      sqlite3ErrorMsg(pParse, "access to %s.%s.%s is prohibited",zDb,zTab,zCol);
-    }else{
-      sqlite3ErrorMsg(pParse, "access to %s.%s is prohibited", zTab, zCol);
-    }
+    char *z = sqlite3_mprintf("%s.%s", zTab, zCol);
+    if( db->nDb>2 || iDb!=0 ) z = sqlite3_mprintf("%s.%z", zDb, z);
+    sqlite3ErrorMsg(pParse, "access to %z is prohibited", z);
     pParse->rc = SQLITE_AUTH;
   }else if( rc!=SQLITE_IGNORE && rc!=SQLITE_OK ){
     sqliteAuthBadReturnCode(pParse);
@@ -101120,7 +101399,7 @@ SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char
     }
     freeIndex(db, pIndex);
   }
-  db->flags |= SQLITE_InternChanges;
+  db->mDbFlags |= DBFLAG_SchemaChange;
 }
 
 /*
@@ -101155,28 +101434,26 @@ SQLITE_PRIVATE void sqlite3CollapseDatabaseArray(sqlite3 *db){
 
 /*
 ** Reset the schema for the database at index iDb.  Also reset the
-** TEMP schema.
+** TEMP schema.  The reset is deferred if db->nSchemaLock is not zero.
+** Deferred resets may be run by calling with iDb<0.
 */
 SQLITE_PRIVATE void sqlite3ResetOneSchema(sqlite3 *db, int iDb){
-  Db *pDb;
+  int i;
   assert( iDb<db->nDb );
 
-  /* Case 1:  Reset the single schema identified by iDb */
-  pDb = &db->aDb[iDb];
-  assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
-  assert( pDb->pSchema!=0 );
-  sqlite3SchemaClear(pDb->pSchema);
+  if( iDb>=0 ){
+    assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
+    DbSetProperty(db, iDb, DB_ResetWanted);
+    DbSetProperty(db, 1, DB_ResetWanted);
+  }
 
-  /* If any database other than TEMP is reset, then also reset TEMP
-  ** since TEMP might be holding triggers that reference tables in the
-  ** other database.
-  */
-  if( iDb!=1 ){
-    pDb = &db->aDb[1];
-    assert( pDb->pSchema!=0 );
-    sqlite3SchemaClear(pDb->pSchema);
+  if( db->nSchemaLock==0 ){
+    for(i=0; i<db->nDb; i++){
+      if( DbHasProperty(db, i, DB_ResetWanted) ){
+        sqlite3SchemaClear(db->aDb[i].pSchema);
+      }
+    }
   }
-  return;
 }
 
 /*
@@ -101186,13 +101463,14 @@ SQLITE_PRIVATE void sqlite3ResetOneSchema(sqlite3 *db, int iDb){
 SQLITE_PRIVATE void sqlite3ResetAllSchemasOfConnection(sqlite3 *db){
   int i;
   sqlite3BtreeEnterAll(db);
+  assert( db->nSchemaLock==0 );
   for(i=0; i<db->nDb; i++){
     Db *pDb = &db->aDb[i];
     if( pDb->pSchema ){
       sqlite3SchemaClear(pDb->pSchema);
     }
   }
-  db->flags &= ~SQLITE_InternChanges;
+  db->mDbFlags &= ~DBFLAG_SchemaChange;
   sqlite3VtabUnlockList(db);
   sqlite3BtreeLeaveAll(db);
   sqlite3CollapseDatabaseArray(db);
@@ -101202,7 +101480,7 @@ SQLITE_PRIVATE void sqlite3ResetAllSchemasOfConnection(sqlite3 *db){
 ** This routine is called when a commit occurs.
 */
 SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3 *db){
-  db->flags &= ~SQLITE_InternChanges;
+  db->mDbFlags &= ~DBFLAG_SchemaChange;
 }
 
 /*
@@ -101240,13 +101518,16 @@ SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){
 */
 static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){
   Index *pIndex, *pNext;
-  TESTONLY( int nLookaside; ) /* Used to verify lookaside not used for schema */
 
+#ifdef SQLITE_DEBUG
   /* Record the number of outstanding lookaside allocations in schema Tables
   ** prior to doing any free() operations.  Since schema Tables do not use
   ** lookaside, this number should not change. */
-  TESTONLY( nLookaside = (db && (pTable->tabFlags & TF_Ephemeral)==0) ?
-                         db->lookaside.nOut : 0 );
+  int nLookaside = 0;
+  if( db && (pTable->tabFlags & TF_Ephemeral)==0 ){
+    nLookaside = sqlite3LookasideUsed(db, 0);
+  }
+#endif
 
   /* Delete all indices associated with this table. */
   for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
@@ -101280,7 +101561,7 @@ static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){
   sqlite3DbFree(db, pTable);
 
   /* Verify that no lookaside memory was used by schema tables */
-  assert( nLookaside==0 || nLookaside==db->lookaside.nOut );
+  assert( nLookaside==0 || nLookaside==sqlite3LookasideUsed(db,0) );
 }
 SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
   /* Do not delete the table until the reference count reaches zero. */
@@ -101306,7 +101587,7 @@ SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char
   pDb = &db->aDb[iDb];
   p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName, 0);
   sqlite3DeleteTable(db, p);
-  db->flags |= SQLITE_InternChanges;
+  db->mDbFlags |= DBFLAG_SchemaChange;
 }
 
 /*
@@ -101419,7 +101700,8 @@ SQLITE_PRIVATE int sqlite3TwoPartName(
       return -1;
     }
   }else{
-    assert( db->init.iDb==0 || db->init.busy || (db->flags & SQLITE_Vacuum)!=0);
+    assert( db->init.iDb==0 || db->init.busy
+             || (db->mDbFlags & DBFLAG_Vacuum)!=0);
     iDb = db->init.iDb;
     *pUnqual = pName1;
   }
@@ -101651,7 +101933,8 @@ SQLITE_PRIVATE void sqlite3StartTable(
     }else
 #endif
     {
-      pParse->addrCrTab = sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2);
+      pParse->addrCrTab =
+         sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, reg2, BTREE_INTKEY);
     }
     sqlite3OpenMasterTable(pParse, iDb);
     sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1);
@@ -101700,12 +101983,10 @@ SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){
   Column *pCol;
   sqlite3 *db = pParse->db;
   if( (p = pParse->pNewTable)==0 ) return;
-#if SQLITE_MAX_COLUMN
   if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){
     sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName);
     return;
   }
-#endif
   z = sqlite3DbMallocRaw(db, pName->n + pType->n + 2);
   if( z==0 ) return;
   memcpy(z, pName->z, pName->n);
@@ -102311,9 +102592,8 @@ static int hasColumn(const i16 *aiCol, int nCol, int x){
 ** Changes include:
 **
 **     (1)  Set all columns of the PRIMARY KEY schema object to be NOT NULL.
-**     (2)  Convert the OP_CreateTable into an OP_CreateIndex.  There is
-**          no rowid btree for a WITHOUT ROWID.  Instead, the canonical
-**          data storage is a covering index btree.
+**     (2)  Convert P3 parameter of the OP_CreateBtree from BTREE_INTKEY 
+**          into BTREE_BLOBKEY.
 **     (3)  Bypass the creation of the sqlite_master table entry
 **          for the PRIMARY KEY as the primary key index is now
 **          identified by the sqlite_master table entry of the table itself.
@@ -102321,7 +102601,7 @@ static int hasColumn(const i16 *aiCol, int nCol, int x){
 **          schema to the rootpage from the main table.
 **     (5)  Add all table columns to the PRIMARY KEY Index object
 **          so that the PRIMARY KEY is a covering index.  The surplus
-**          columns are part of KeyInfo.nXField and are not used for
+**          columns are part of KeyInfo.nAllField and are not used for
 **          sorting or lookup or uniqueness checks.
 **     (6)  Replace the rowid tail on all automatically generated UNIQUE
 **          indices with the PRIMARY KEY columns.
@@ -102350,13 +102630,12 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
   ** virtual tables */
   if( IN_DECLARE_VTAB ) return;
 
-  /* Convert the OP_CreateTable opcode that would normally create the
-  ** root-page for the table into an OP_CreateIndex opcode.  The index
-  ** created will become the PRIMARY KEY index.
+  /* Convert the P3 operand of the OP_CreateBtree opcode from BTREE_INTKEY
+  ** into BTREE_BLOBKEY.
   */
   if( pParse->addrCrTab ){
     assert( v );
-    sqlite3VdbeChangeOpcode(v, pParse->addrCrTab, OP_CreateIndex);
+    sqlite3VdbeChangeP3(v, pParse->addrCrTab, BTREE_BLOBKEY);
   }
 
   /* Locate the PRIMARY KEY index.  Or, if this table was originally
@@ -102696,7 +102975,7 @@ SQLITE_PRIVATE void sqlite3EndTable(
       return;
     }
     pParse->pNewTable = 0;
-    db->flags |= SQLITE_InternChanges;
+    db->mDbFlags |= DBFLAG_SchemaChange;
 
 #ifndef SQLITE_OMIT_ALTERTABLE
     if( !p->pSelect ){
@@ -102795,6 +103074,9 @@ SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
   int nErr = 0;     /* Number of errors encountered */
   int n;            /* Temporarily holds the number of cursors assigned */
   sqlite3 *db = pParse->db;  /* Database connection for malloc errors */
+#ifndef SQLITE_OMIT_VIRTUALTABLE       
+  int rc;
+#endif
 #ifndef SQLITE_OMIT_AUTHORIZATION
   sqlite3_xauth xAuth;       /* Saved xAuth pointer */
 #endif
@@ -102802,8 +103084,11 @@ SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
   assert( pTable );
 
 #ifndef SQLITE_OMIT_VIRTUALTABLE
-  if( sqlite3VtabCallConnect(pParse, pTable) ){
-    return SQLITE_ERROR;
+  db->nSchemaLock++;
+  rc = sqlite3VtabCallConnect(pParse, pTable);
+  db->nSchemaLock--;
+  if( rc ){
+    return 1;
   }
   if( IsVirtual(pTable) ) return 0;
 #endif
@@ -102999,14 +103284,6 @@ static void destroyRootPage(Parse *pParse, int iTable, int iDb){
 ** is also added (this can happen with an auto-vacuum database).
 */
 static void destroyTable(Parse *pParse, Table *pTab){
-#ifdef SQLITE_OMIT_AUTOVACUUM
-  Index *pIdx;
-  int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
-  destroyRootPage(pParse, pTab->tnum, iDb);
-  for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
-    destroyRootPage(pParse, pIdx->tnum, iDb);
-  }
-#else
   /* If the database may be auto-vacuum capable (if SQLITE_OMIT_AUTOVACUUM
   ** is not defined), then it is important to call OP_Destroy on the
   ** table and index root-pages in order, starting with the numerically 
@@ -103049,7 +103326,6 @@ static void destroyTable(Parse *pParse, Table *pTab){
       iDestroyed = iLargest;
     }
   }
-#endif
 }
 
 /*
@@ -103476,7 +103752,7 @@ static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
     addr2 = sqlite3VdbeCurrentAddr(v);
   }
   sqlite3VdbeAddOp3(v, OP_SorterData, iSorter, regRecord, iIdx);
-  sqlite3VdbeAddOp3(v, OP_Last, iIdx, 0, -1);
+  sqlite3VdbeAddOp1(v, OP_SeekEnd, iIdx);
   sqlite3VdbeAddOp2(v, OP_IdxInsert, iIdx, regRecord);
   sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
   sqlite3ReleaseTempReg(pParse, regRecord);
@@ -103965,7 +104241,7 @@ SQLITE_PRIVATE void sqlite3CreateIndex(
       sqlite3OomFault(db);
       goto exit_create_index;
     }
-    db->flags |= SQLITE_InternChanges;
+    db->mDbFlags |= DBFLAG_SchemaChange;
     if( pTblName!=0 ){
       pIndex->tnum = db->init.newTnum;
     }
@@ -104001,7 +104277,7 @@ SQLITE_PRIVATE void sqlite3CreateIndex(
     ** that case the convertToWithoutRowidTable() routine will replace
     ** the Noop with a Goto to jump over the VDBE code generated below. */
     pIndex->tnum = sqlite3VdbeAddOp0(v, OP_Noop);
-    sqlite3VdbeAddOp2(v, OP_CreateIndex, iDb, iMem);
+    sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, iMem, BTREE_BLOBKEY);
 
     /* Gather the complete text of the CREATE INDEX statement into
     ** the zStmt variable
@@ -104523,8 +104799,10 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(
 */
 SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){
   assert( pIndexedBy!=0 );
-  if( p && ALWAYS(p->nSrc>0) ){
-    struct SrcList_item *pItem = &p->a[p->nSrc-1];
+  if( p && pIndexedBy->n>0 ){
+    struct SrcList_item *pItem;
+    assert( p->nSrc>0 );
+    pItem = &p->a[p->nSrc-1];
     assert( pItem->fg.notIndexed==0 );
     assert( pItem->fg.isIndexedBy==0 );
     assert( pItem->fg.isTabFunc==0 );
@@ -104534,7 +104812,7 @@ SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pI
       pItem->fg.notIndexed = 1;
     }else{
       pItem->u1.zIndexedBy = sqlite3NameFromToken(pParse->db, pIndexedBy);
-      pItem->fg.isIndexedBy = (pItem->u1.zIndexedBy!=0);
+      pItem->fg.isIndexedBy = 1;
     }
   }
 }
@@ -105459,7 +105737,7 @@ SQLITE_PRIVATE FuncDef *sqlite3FindFunction(
 
   /* If no match is found, search the built-in functions.
   **
-  ** If the SQLITE_PreferBuiltin flag is set, then search the built-in
+  ** If the DBFLAG_PreferBuiltin flag is set, then search the built-in
   ** functions even if a prior app-defined function was found.  And give
   ** priority to built-in functions.
   **
@@ -105469,7 +105747,7 @@ SQLITE_PRIVATE FuncDef *sqlite3FindFunction(
   ** new function.  But the FuncDefs for built-in functions are read-only.
   ** So we must not search for built-ins when creating a new function.
   */ 
-  if( !createFlag && (pBest==0 || (db->flags & SQLITE_PreferBuiltin)!=0) ){
+  if( !createFlag && (pBest==0 || (db->mDbFlags & DBFLAG_PreferBuiltin)!=0) ){
     bestScore = 0;
     h = (sqlite3UpperToLower[(u8)zName[0]] + nName) % SQLITE_FUNC_HASH_SZ;
     p = functionSearch(h, zName);
@@ -105542,8 +105820,8 @@ SQLITE_PRIVATE void sqlite3SchemaClear(void *p){
   pSchema->pSeqTab = 0;
   if( pSchema->schemaFlags & DB_SchemaLoaded ){
     pSchema->iGeneration++;
-    pSchema->schemaFlags &= ~DB_SchemaLoaded;
   }
+  pSchema->schemaFlags &= ~(DB_SchemaLoaded|DB_ResetWanted);
 }
 
 /*
@@ -106075,7 +106353,11 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
       }
     }else if( pPk ){
       addrLoop = sqlite3VdbeAddOp1(v, OP_Rewind, iEphCur); VdbeCoverage(v);
-      sqlite3VdbeAddOp2(v, OP_RowData, iEphCur, iKey);
+      if( IsVirtual(pTab) ){
+        sqlite3VdbeAddOp3(v, OP_Column, iEphCur, 0, iKey);
+      }else{
+        sqlite3VdbeAddOp2(v, OP_RowData, iEphCur, iKey);
+      }
       assert( nKey==0 );  /* OP_Found will use a composite key */
     }else{
       addrLoop = sqlite3VdbeAddOp3(v, OP_RowSetRead, iRowSet, 0, iKey);
@@ -107346,7 +107628,8 @@ static void likeFunc(
 #ifdef SQLITE_TEST
     sqlite3_like_count++;
 #endif
-    sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH);
+    sqlite3_result_int(context,
+                      patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH);
   }
 }
 
@@ -108187,9 +108470,14 @@ SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive)
 /*
 ** pExpr points to an expression which implements a function.  If
 ** it is appropriate to apply the LIKE optimization to that function
-** then set aWc[0] through aWc[2] to the wildcard characters and
-** return TRUE.  If the function is not a LIKE-style function then
-** return FALSE.
+** then set aWc[0] through aWc[2] to the wildcard characters and the
+** escape character and then return TRUE.  If the function is not a 
+** LIKE-style function then return FALSE.
+**
+** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE
+** operator if c is a string literal that is exactly one byte in length.
+** That one byte is stored in aWc[3].  aWc[3] is set to zero if there is
+** no ESCAPE clause.
 **
 ** *pIsNocase is set to true if uppercase and lowercase are equivalent for
 ** the function (default for LIKE).  If the function makes the distinction
@@ -108198,17 +108486,26 @@ SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive)
 */
 SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
   FuncDef *pDef;
-  if( pExpr->op!=TK_FUNCTION 
-   || !pExpr->x.pList 
-   || pExpr->x.pList->nExpr!=2
-  ){
+  int nExpr;
+  if( pExpr->op!=TK_FUNCTION || !pExpr->x.pList ){
     return 0;
   }
   assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
-  pDef = sqlite3FindFunction(db, pExpr->u.zToken, 2, SQLITE_UTF8, 0);
+  nExpr = pExpr->x.pList->nExpr;
+  pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0);
   if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
     return 0;
   }
+  if( nExpr<3 ){
+    aWc[3] = 0;
+  }else{
+    Expr *pEscape = pExpr->x.pList->a[2].pExpr;
+    char *zEscape;
+    if( pEscape->op!=TK_STRING ) return 0;
+    zEscape = pEscape->u.zToken;
+    if( zEscape[0]==0 || zEscape[1]!=0 ) return 0;
+    aWc[3] = zEscape[0];
+  }
 
   /* The memcpy() statement assumes that the wildcard characters are
   ** the first three statements in the compareInfo structure.  The
@@ -110008,7 +110305,7 @@ static int autoIncBegin(
 ){
   int memId = 0;      /* Register holding maximum rowid */
   if( (pTab->tabFlags & TF_Autoincrement)!=0
-   && (pParse->db->flags & SQLITE_Vacuum)==0
+   && (pParse->db->mDbFlags & DBFLAG_Vacuum)==0
   ){
     Parse *pToplevel = sqlite3ParseToplevel(pParse);
     AutoincInfo *pInfo;
@@ -110266,7 +110563,6 @@ SQLITE_PRIVATE void sqlite3Insert(
 ){
   sqlite3 *db;          /* The main database structure */
   Table *pTab;          /* The table to insert into.  aka TABLE */
-  char *zTab;           /* Name of the table into which we are inserting */
   int i, j;             /* Loop counters */
   Vdbe *v;              /* Generate code into this virtual machine */
   Index *pIdx;          /* For looping over indices of the table */
@@ -110322,8 +110618,6 @@ SQLITE_PRIVATE void sqlite3Insert(
   /* Locate the table into which we will be inserting new information.
   */
   assert( pTabList->nSrc==1 );
-  zTab = pTabList->a[0].zName;
-  if( NEVER(zTab==0) ) goto insert_cleanup;
   pTab = sqlite3SrcListLookup(pParse, pTabList);
   if( pTab==0 ){
     goto insert_cleanup;
@@ -111841,7 +112135,7 @@ static int xferOptimization(
     Column *pDestCol = &pDest->aCol[i];
     Column *pSrcCol = &pSrc->aCol[i];
 #ifdef SQLITE_ENABLE_HIDDEN_COLUMNS
-    if( (db->flags & SQLITE_Vacuum)==0 
+    if( (db->mDbFlags & DBFLAG_Vacuum)==0 
      && (pDestCol->colFlags | pSrcCol->colFlags) & COLFLAG_HIDDEN 
     ){
       return 0;    /* Neither table may have __hidden__ columns */
@@ -111917,15 +112211,15 @@ static int xferOptimization(
   regRowid = sqlite3GetTempReg(pParse);
   sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite);
   assert( HasRowid(pDest) || destHasUniqueIdx );
-  if( (db->flags & SQLITE_Vacuum)==0 && (
+  if( (db->mDbFlags & DBFLAG_Vacuum)==0 && (
       (pDest->iPKey<0 && pDest->pIndex!=0)          /* (1) */
    || destHasUniqueIdx                              /* (2) */
    || (onError!=OE_Abort && onError!=OE_Rollback)   /* (3) */
   )){
     /* In some circumstances, we are able to run the xfer optimization
     ** only if the destination table is initially empty. Unless the
-    ** SQLITE_Vacuum flag is set, this block generates code to make
-    ** that determination. If SQLITE_Vacuum is set, then the destination
+    ** DBFLAG_Vacuum flag is set, this block generates code to make
+    ** that determination. If DBFLAG_Vacuum is set, then the destination
     ** table is always empty.
     **
     ** Conditions under which the destination must be empty:
@@ -111961,8 +112255,8 @@ static int xferOptimization(
       assert( (pDest->tabFlags & TF_Autoincrement)==0 );
     }
     sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1);
-    if( db->flags & SQLITE_Vacuum ){
-      sqlite3VdbeAddOp3(v, OP_Last, iDest, 0, -1);
+    if( db->mDbFlags & DBFLAG_Vacuum ){
+      sqlite3VdbeAddOp1(v, OP_SeekEnd, iDest);
       insFlags = OPFLAG_NCHANGE|OPFLAG_LASTROWID|
                            OPFLAG_APPEND|OPFLAG_USESEEKRESULT;
     }else{
@@ -111993,13 +112287,13 @@ static int xferOptimization(
     VdbeComment((v, "%s", pDestIdx->zName));
     addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); VdbeCoverage(v);
     sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1);
-    if( db->flags & SQLITE_Vacuum ){
+    if( db->mDbFlags & DBFLAG_Vacuum ){
       /* This INSERT command is part of a VACUUM operation, which guarantees
       ** that the destination table is empty. If all indexed columns use
       ** collation sequence BINARY, then it can also be assumed that the
       ** index will be populated by inserting keys in strictly sorted 
       ** order. In this case, instead of seeking within the b-tree as part
-      ** of every OP_IdxInsert opcode, an OP_Last is added before the
+      ** of every OP_IdxInsert opcode, an OP_SeekEnd is added before the
       ** OP_IdxInsert to seek to the point within the b-tree where each key 
       ** should be inserted. This is faster.
       **
@@ -112014,7 +112308,7 @@ static int xferOptimization(
       }
       if( i==pSrcIdx->nColumn ){
         idxInsFlags = OPFLAG_USESEEKRESULT;
-        sqlite3VdbeAddOp3(v, OP_Last, iDest, 0, -1);
+        sqlite3VdbeAddOp1(v, OP_SeekEnd, iDest);
       }
     }
     if( !HasRowid(pSrc) && pDestIdx->idxType==2 ){
@@ -112345,7 +112639,7 @@ struct sqlite3_api_routines {
   int  (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,
                          const char*,const char*),void*);
   void  (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*));
-  char * (*snprintf)(int,char*,const char*,...);
+  char * (*xsnprintf)(int,char*,const char*,...);
   int  (*step)(sqlite3_stmt*);
   int  (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,
                                 char const**,char const**,int*,int*,int*);
@@ -112457,7 +112751,7 @@ struct sqlite3_api_routines {
   int (*uri_boolean)(const char*,const char*,int);
   sqlite3_int64 (*uri_int64)(const char*,const char*,sqlite3_int64);
   const char *(*uri_parameter)(const char*,const char*);
-  char *(*vsnprintf)(int,char*,const char*,va_list);
+  char *(*xvsnprintf)(int,char*,const char*,va_list);
   int (*wal_checkpoint_v2)(sqlite3*,const char*,int,int*,int*);
   /* Version 3.8.7 and later */
   int (*auto_extension)(void(*)(void));
@@ -112632,7 +112926,7 @@ typedef int (*sqlite3_loadext_entry)(
 #define sqlite3_rollback_hook          sqlite3_api->rollback_hook
 #define sqlite3_set_authorizer         sqlite3_api->set_authorizer
 #define sqlite3_set_auxdata            sqlite3_api->set_auxdata
-#define sqlite3_snprintf               sqlite3_api->snprintf
+#define sqlite3_snprintf               sqlite3_api->xsnprintf
 #define sqlite3_step                   sqlite3_api->step
 #define sqlite3_table_column_metadata  sqlite3_api->table_column_metadata
 #define sqlite3_thread_cleanup         sqlite3_api->thread_cleanup
@@ -112659,7 +112953,7 @@ typedef int (*sqlite3_loadext_entry)(
 #define sqlite3_value_text16le         sqlite3_api->value_text16le
 #define sqlite3_value_type             sqlite3_api->value_type
 #define sqlite3_vmprintf               sqlite3_api->vmprintf
-#define sqlite3_vsnprintf              sqlite3_api->vsnprintf
+#define sqlite3_vsnprintf              sqlite3_api->xvsnprintf
 #define sqlite3_overload_function      sqlite3_api->overload_function
 #define sqlite3_prepare_v2             sqlite3_api->prepare_v2
 #define sqlite3_prepare16_v2           sqlite3_api->prepare16_v2
@@ -112735,7 +113029,7 @@ typedef int (*sqlite3_loadext_entry)(
 #define sqlite3_uri_boolean            sqlite3_api->uri_boolean
 #define sqlite3_uri_int64              sqlite3_api->uri_int64
 #define sqlite3_uri_parameter          sqlite3_api->uri_parameter
-#define sqlite3_uri_vsnprintf          sqlite3_api->vsnprintf
+#define sqlite3_uri_vsnprintf          sqlite3_api->xvsnprintf
 #define sqlite3_wal_checkpoint_v2      sqlite3_api->wal_checkpoint_v2
 /* Version 3.8.7 and later */
 #define sqlite3_auto_extension         sqlite3_api->auto_extension
@@ -114552,16 +114846,16 @@ static const PragmaName *pragmaLocate(const char *zName){
 /*
 ** Helper subroutine for PRAGMA integrity_check:
 **
-** Generate code to output a single-column result row with the result
-** held in register regResult.  Decrement the result count and halt if
-** the maximum number of result rows have been issued.
+** Generate code to output a single-column result row with a value of the
+** string held in register 3.  Decrement the result count in register 1
+** and halt if the maximum number of result rows have been issued.
 */
-static int integrityCheckResultRow(Vdbe *v, int regResult){
+static int integrityCheckResultRow(Vdbe *v){
   int addr;
-  sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, 1);
+  sqlite3VdbeAddOp2(v, OP_ResultRow, 3, 1);
   addr = sqlite3VdbeAddOp3(v, OP_IfPos, 1, sqlite3VdbeCurrentAddr(v)+2, 1);
   VdbeCoverage(v);
-  sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
+  sqlite3VdbeAddOp0(v, OP_Halt);
   return addr;
 }
 
@@ -115488,13 +115782,11 @@ SQLITE_PRIVATE void sqlite3Pragma(
     for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
       for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
         sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
-        sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
       }
     }
     for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){
       p = (FuncDef*)sqliteHashData(j);
       sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0);
-      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
     }
   }
   break;
@@ -115506,7 +115798,6 @@ SQLITE_PRIVATE void sqlite3Pragma(
     for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){
       Module *pMod = (Module*)sqliteHashData(j);
       sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName);
-      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
     }
   }
   break;
@@ -115516,7 +115807,6 @@ SQLITE_PRIVATE void sqlite3Pragma(
     int i;
     for(i=0; i<ArraySize(aPragmaName); i++){
       sqlite3VdbeMultiLoad(v, 1, "s", aPragmaName[i].zName);
-      sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
     }
   }
   break;
@@ -115742,12 +116032,11 @@ SQLITE_PRIVATE void sqlite3Pragma(
 
     /* Do an integrity check on each database file */
     for(i=0; i<db->nDb; i++){
-      HashElem *x;
-      Hash *pTbls;
-      int *aRoot;
-      int cnt = 0;
-      int mxIdx = 0;
-      int nIdx;
+      HashElem *x;     /* For looping over tables in the schema */
+      Hash *pTbls;     /* Set of all tables in the schema */
+      int *aRoot;      /* Array of root page numbers of all btrees */
+      int cnt = 0;     /* Number of entries in aRoot[] */
+      int mxIdx = 0;   /* Maximum number of indexes for any table */
 
       if( OMIT_TEMPDB && i==1 ) continue;
       if( iDb>=0 && i!=iDb ) continue;
@@ -115762,8 +116051,9 @@ SQLITE_PRIVATE void sqlite3Pragma(
       assert( sqlite3SchemaMutexHeld(db, i, 0) );
       pTbls = &db->aDb[i].pSchema->tblHash;
       for(cnt=0, x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
-        Table *pTab = sqliteHashData(x);
-        Index *pIdx;
+        Table *pTab = sqliteHashData(x);  /* Current table */
+        Index *pIdx;                      /* An index on pTab */
+        int nIdx;                         /* Number of indexes on pTab */
         if( HasRowid(pTab) ) cnt++;
         for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ cnt++; }
         if( nIdx>mxIdx ) mxIdx = nIdx;
@@ -115773,12 +116063,12 @@ SQLITE_PRIVATE void sqlite3Pragma(
       for(cnt=0, x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
         Table *pTab = sqliteHashData(x);
         Index *pIdx;
-        if( HasRowid(pTab) ) aRoot[cnt++] = pTab->tnum;
+        if( HasRowid(pTab) ) aRoot[++cnt] = pTab->tnum;
         for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
-          aRoot[cnt++] = pIdx->tnum;
+          aRoot[++cnt] = pIdx->tnum;
         }
       }
-      aRoot[cnt] = 0;
+      aRoot[0] = cnt;
 
       /* Make sure sufficient number of registers have been allocated */
       pParse->nMem = MAX( pParse->nMem, 8+mxIdx );
@@ -115791,9 +116081,8 @@ SQLITE_PRIVATE void sqlite3Pragma(
       sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
          sqlite3MPrintf(db, "*** in database %s ***\n", db->aDb[i].zDbSName),
          P4_DYNAMIC);
-      sqlite3VdbeAddOp3(v, OP_Move, 2, 4, 1);
-      sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 2);
-      integrityCheckResultRow(v, 2);
+      sqlite3VdbeAddOp3(v, OP_Concat, 2, 3, 3);
+      integrityCheckResultRow(v);
       sqlite3VdbeJumpHere(v, addr);
 
       /* Make sure all the indices are constructed correctly.
@@ -115807,16 +116096,13 @@ SQLITE_PRIVATE void sqlite3Pragma(
         int r1 = -1;
 
         if( pTab->tnum<1 ) continue;  /* Skip VIEWs or VIRTUAL TABLEs */
-        if( pTab->pCheck==0
-         && (pTab->tabFlags & TF_HasNotNull)==0
-         && (pTab->pIndex==0 || isQuick)
-        ){
-          continue;  /* No additional checks needed for this table */
-        }
         pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab);
         sqlite3ExprCacheClear(pParse);
         sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0,
                                    1, 0, &iDataCur, &iIdxCur);
+        /* reg[7] counts the number of entries in the table.
+        ** reg[8+i] counts the number of entries in the i-th index 
+        */
         sqlite3VdbeAddOp2(v, OP_Integer, 0, 7);
         for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
           sqlite3VdbeAddOp2(v, OP_Integer, 0, 8+j); /* index entries counter */
@@ -115837,7 +116123,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
           zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName,
                               pTab->aCol[j].zName);
           sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC);
-          integrityCheckResultRow(v, 3);
+          integrityCheckResultRow(v);
           sqlite3VdbeJumpHere(v, jmp2);
         }
         /* Verify CHECK constraints */
@@ -115860,57 +116146,62 @@ SQLITE_PRIVATE void sqlite3Pragma(
             zErr = sqlite3MPrintf(db, "CHECK constraint failed in %s",
                 pTab->zName);
             sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC);
-            integrityCheckResultRow(v, 3);
+            integrityCheckResultRow(v);
             sqlite3VdbeResolveLabel(v, addrCkOk);
             sqlite3ExprCachePop(pParse);
           }
           sqlite3ExprListDelete(db, pCheck);
         }
-        /* Validate index entries for the current row */
-        for(j=0, pIdx=pTab->pIndex; pIdx && !isQuick; pIdx=pIdx->pNext, j++){
-          int jmp2, jmp3, jmp4, jmp5;
-          int ckUniq = sqlite3VdbeMakeLabel(v);
-          if( pPk==pIdx ) continue;
-          r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 0, &jmp3,
-                                       pPrior, r1);
-          pPrior = pIdx;
-          sqlite3VdbeAddOp2(v, OP_AddImm, 8+j, 1);  /* increment entry count */
-          /* Verify that an index entry exists for the current table row */
-          jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, iIdxCur+j, ckUniq, r1,
-                                      pIdx->nColumn); VdbeCoverage(v);
-          sqlite3VdbeLoadString(v, 3, "row ");
-          sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3);
-          sqlite3VdbeLoadString(v, 4, " missing from index ");
-          sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
-          jmp5 = sqlite3VdbeLoadString(v, 4, pIdx->zName);
-          sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
-          jmp4 = integrityCheckResultRow(v, 3);
-          sqlite3VdbeJumpHere(v, jmp2);
-          /* For UNIQUE indexes, verify that only one entry exists with the
-          ** current key.  The entry is unique if (1) any column is NULL
-          ** or (2) the next entry has a different key */
-          if( IsUniqueIndex(pIdx) ){
-            int uniqOk = sqlite3VdbeMakeLabel(v);
-            int jmp6;
-            int kk;
-            for(kk=0; kk<pIdx->nKeyCol; kk++){
-              int iCol = pIdx->aiColumn[kk];
-              assert( iCol!=XN_ROWID && iCol<pTab->nCol );
-              if( iCol>=0 && pTab->aCol[iCol].notNull ) continue;
-              sqlite3VdbeAddOp2(v, OP_IsNull, r1+kk, uniqOk);
-              VdbeCoverage(v);
+        if( !isQuick ){ /* Omit the remaining tests for quick_check */
+          /* Sanity check on record header decoding */
+          sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nCol-1, 3);
+          sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
+          /* Validate index entries for the current row */
+          for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
+            int jmp2, jmp3, jmp4, jmp5;
+            int ckUniq = sqlite3VdbeMakeLabel(v);
+            if( pPk==pIdx ) continue;
+            r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 0, &jmp3,
+                                         pPrior, r1);
+            pPrior = pIdx;
+            sqlite3VdbeAddOp2(v, OP_AddImm, 8+j, 1);/* increment entry count */
+            /* Verify that an index entry exists for the current table row */
+            jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, iIdxCur+j, ckUniq, r1,
+                                        pIdx->nColumn); VdbeCoverage(v);
+            sqlite3VdbeLoadString(v, 3, "row ");
+            sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3);
+            sqlite3VdbeLoadString(v, 4, " missing from index ");
+            sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
+            jmp5 = sqlite3VdbeLoadString(v, 4, pIdx->zName);
+            sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
+            jmp4 = integrityCheckResultRow(v);
+            sqlite3VdbeJumpHere(v, jmp2);
+            /* For UNIQUE indexes, verify that only one entry exists with the
+            ** current key.  The entry is unique if (1) any column is NULL
+            ** or (2) the next entry has a different key */
+            if( IsUniqueIndex(pIdx) ){
+              int uniqOk = sqlite3VdbeMakeLabel(v);
+              int jmp6;
+              int kk;
+              for(kk=0; kk<pIdx->nKeyCol; kk++){
+                int iCol = pIdx->aiColumn[kk];
+                assert( iCol!=XN_ROWID && iCol<pTab->nCol );
+                if( iCol>=0 && pTab->aCol[iCol].notNull ) continue;
+                sqlite3VdbeAddOp2(v, OP_IsNull, r1+kk, uniqOk);
+                VdbeCoverage(v);
+              }
+              jmp6 = sqlite3VdbeAddOp1(v, OP_Next, iIdxCur+j); VdbeCoverage(v);
+              sqlite3VdbeGoto(v, uniqOk);
+              sqlite3VdbeJumpHere(v, jmp6);
+              sqlite3VdbeAddOp4Int(v, OP_IdxGT, iIdxCur+j, uniqOk, r1,
+                                   pIdx->nKeyCol); VdbeCoverage(v);
+              sqlite3VdbeLoadString(v, 3, "non-unique entry in index ");
+              sqlite3VdbeGoto(v, jmp5);
+              sqlite3VdbeResolveLabel(v, uniqOk);
             }
-            jmp6 = sqlite3VdbeAddOp1(v, OP_Next, iIdxCur+j); VdbeCoverage(v);
-            sqlite3VdbeGoto(v, uniqOk);
-            sqlite3VdbeJumpHere(v, jmp6);
-            sqlite3VdbeAddOp4Int(v, OP_IdxGT, iIdxCur+j, uniqOk, r1,
-                                 pIdx->nKeyCol); VdbeCoverage(v);
-            sqlite3VdbeLoadString(v, 3, "non-unique entry in index ");
-            sqlite3VdbeGoto(v, jmp5);
-            sqlite3VdbeResolveLabel(v, uniqOk);
+            sqlite3VdbeJumpHere(v, jmp4);
+            sqlite3ResolvePartIdxLabel(pParse, jmp3);
           }
-          sqlite3VdbeJumpHere(v, jmp4);
-          sqlite3ResolvePartIdxLabel(pParse, jmp3);
         }
         sqlite3VdbeAddOp2(v, OP_Next, iDataCur, loopTop); VdbeCoverage(v);
         sqlite3VdbeJumpHere(v, loopTop-1);
@@ -115922,9 +116213,9 @@ SQLITE_PRIVATE void sqlite3Pragma(
             sqlite3VdbeAddOp2(v, OP_Count, iIdxCur+j, 3);
             addr = sqlite3VdbeAddOp3(v, OP_Eq, 8+j, 0, 3); VdbeCoverage(v);
             sqlite3VdbeChangeP5(v, SQLITE_NOTNULL);
-            sqlite3VdbeLoadString(v, 3, pIdx->zName);
-            sqlite3VdbeAddOp3(v, OP_Concat, 3, 2, 7);
-            integrityCheckResultRow(v, 7);
+            sqlite3VdbeLoadString(v, 4, pIdx->zName);
+            sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3);
+            integrityCheckResultRow(v);
             sqlite3VdbeJumpHere(v, addr);
           }
         }
@@ -115938,6 +116229,9 @@ SQLITE_PRIVATE void sqlite3Pragma(
         { OP_IfNotZero,   1, 4,        0},    /* 1 */
         { OP_String8,     0, 3,        0},    /* 2 */
         { OP_ResultRow,   3, 1,        0},    /* 3 */
+        { OP_Halt,        0, 0,        0},    /* 4 */
+        { OP_String8,     0, 3,        0},    /* 5 */
+        { OP_Goto,        0, 3,        0},    /* 6 */
       };
       VdbeOp *aOp;
 
@@ -115946,7 +116240,10 @@ SQLITE_PRIVATE void sqlite3Pragma(
         aOp[0].p2 = 1-mxErr;
         aOp[2].p4type = P4_STATIC;
         aOp[2].p4.z = (char *)"ok";
+        aOp[5].p4type = P4_STATIC;
+        aOp[5].p4.z = (char*)sqlite3ErrStr(SQLITE_CORRUPT);
       }
+      sqlite3VdbeChangeP3(v, 0, sqlite3VdbeCurrentAddr(v)-2);
     }
   }
   break;
@@ -116826,7 +117123,7 @@ SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char
     rc = db->errCode;
     assert( (rc&0xFF)==(rcp&0xFF) );
     db->init.iDb = saved_iDb;
-    assert( saved_iDb==0 || (db->flags & SQLITE_Vacuum)!=0 );
+    assert( saved_iDb==0 || (db->mDbFlags & DBFLAG_Vacuum)!=0 );
     if( SQLITE_OK!=rc ){
       if( db->init.orphanTrigger ){
         assert( iDb==1 );
@@ -116891,6 +117188,8 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
   assert( sqlite3_mutex_held(db->mutex) );
   assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) );
 
+  db->init.busy = 1;
+
   /* Construct the in-memory representation schema tables (sqlite_master or
   ** sqlite_temp_master) by invoking the parser directly.  The appropriate
   ** table name will be inserted automatically by the parser so we can just
@@ -116899,7 +117198,7 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
   azArg[0] = zMasterName = SCHEMA_TABLE(iDb);
   azArg[1] = "1";
   azArg[2] = "CREATE TABLE x(type text,name text,tbl_name text,"
-                            "rootpage integer,sql text)";
+                            "rootpage int,sql text)";
   azArg[3] = 0;
   initData.db = db;
   initData.iDb = iDb;
@@ -116915,10 +117214,10 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
   */
   pDb = &db->aDb[iDb];
   if( pDb->pBt==0 ){
-    if( !OMIT_TEMPDB && ALWAYS(iDb==1) ){
-      DbSetProperty(db, 1, DB_SchemaLoaded);
-    }
-    return SQLITE_OK;
+    assert( iDb==1 );
+    DbSetProperty(db, 1, DB_SchemaLoaded);
+    rc = SQLITE_OK;
+    goto error_out;
   }
 
   /* If there is not already a read-only (or read-write) transaction opened
@@ -117077,9 +117376,13 @@ initone_error_out:
   sqlite3BtreeLeave(pDb->pBt);
 
 error_out:
-  if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
-    sqlite3OomFault(db);
+  if( rc ){
+    if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
+      sqlite3OomFault(db);
+    }
+    sqlite3ResetOneSchema(db, iDb);
   }
+  db->init.busy = 0;
   return rc;
 }
 
@@ -117095,42 +117398,29 @@ error_out:
 */
 SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){
   int i, rc;
-  int commit_internal = !(db->flags&SQLITE_InternChanges);
+  int commit_internal = !(db->mDbFlags&DBFLAG_SchemaChange);
   
   assert( sqlite3_mutex_held(db->mutex) );
   assert( sqlite3BtreeHoldsMutex(db->aDb[0].pBt) );
   assert( db->init.busy==0 );
-  rc = SQLITE_OK;
-  db->init.busy = 1;
   ENC(db) = SCHEMA_ENC(db);
-  for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
-    if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue;
-    rc = sqlite3InitOne(db, i, pzErrMsg);
-    if( rc ){
-      sqlite3ResetOneSchema(db, i);
-    }
+  assert( db->nDb>0 );
+  /* Do the main schema first */
+  if( !DbHasProperty(db, 0, DB_SchemaLoaded) ){
+    rc = sqlite3InitOne(db, 0, pzErrMsg);
+    if( rc ) return rc;
   }
-
-  /* Once all the other databases have been initialized, load the schema
-  ** for the TEMP database. This is loaded last, as the TEMP database
-  ** schema may contain references to objects in other databases.
-  */
-#ifndef SQLITE_OMIT_TEMPDB
-  assert( db->nDb>1 );
-  if( rc==SQLITE_OK && !DbHasProperty(db, 1, DB_SchemaLoaded) ){
-    rc = sqlite3InitOne(db, 1, pzErrMsg);
-    if( rc ){
-      sqlite3ResetOneSchema(db, 1);
+  /* All other schemas after the main schema. The "temp" schema must be last */
+  for(i=db->nDb-1; i>0; i--){
+    if( !DbHasProperty(db, i, DB_SchemaLoaded) ){
+      rc = sqlite3InitOne(db, i, pzErrMsg);
+      if( rc ) return rc;
     }
   }
-#endif
-
-  db->init.busy = 0;
-  if( rc==SQLITE_OK && commit_internal ){
+  if( commit_internal ){
     sqlite3CommitInternalChanges(db);
   }
-
-  return rc; 
+  return SQLITE_OK;
 }
 
 /*
@@ -117235,16 +117525,14 @@ SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){
 ** Free all memory allocations in the pParse object
 */
 SQLITE_PRIVATE void sqlite3ParserReset(Parse *pParse){
-  if( pParse ){
-    sqlite3 *db = pParse->db;
-    sqlite3DbFree(db, pParse->aLabel);
-    sqlite3ExprListDelete(db, pParse->pConstExpr);
-    if( db ){
-      assert( db->lookaside.bDisable >= pParse->disableLookaside );
-      db->lookaside.bDisable -= pParse->disableLookaside;
-    }
-    pParse->disableLookaside = 0;
+  sqlite3 *db = pParse->db;
+  sqlite3DbFree(db, pParse->aLabel);
+  sqlite3ExprListDelete(db, pParse->pConstExpr);
+  if( db ){
+    assert( db->lookaside.bDisable >= pParse->disableLookaside );
+    db->lookaside.bDisable -= pParse->disableLookaside;
   }
+  pParse->disableLookaside = 0;
 }
 
 /*
@@ -117430,6 +117718,7 @@ static int sqlite3LockAndPrepare(
   sqlite3BtreeEnterAll(db);
   rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail);
   if( rc==SQLITE_SCHEMA ){
+    sqlite3ResetOneSchema(db, -1);
     sqlite3_finalize(*ppStmt);
     rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail);
   }
@@ -117723,7 +118012,7 @@ static void clearSelect(sqlite3 *db, Select *p, int bFree){
     sqlite3ExprListDelete(db, p->pOrderBy);
     sqlite3ExprDelete(db, p->pLimit);
     sqlite3ExprDelete(db, p->pOffset);
-    if( p->pWith ) sqlite3WithDelete(db, p->pWith);
+    if( OK_IF_ALWAYS_TRUE(p->pWith) ) sqlite3WithDelete(db, p->pWith);
     if( bFree ) sqlite3DbFreeNN(db, p);
     p = pPrior;
     bFree = 1;
@@ -117766,7 +118055,8 @@ SQLITE_PRIVATE Select *sqlite3SelectNew(
     pNew = &standin;
   }
   if( pEList==0 ){
-    pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(pParse->db,TK_ASTERISK,0));
+    pEList = sqlite3ExprListAppend(pParse, 0,
+                                   sqlite3Expr(pParse->db,TK_ASTERISK,0));
   }
   pNew->pEList = pEList;
   pNew->op = TK_SELECT;
@@ -117790,7 +118080,8 @@ SQLITE_PRIVATE Select *sqlite3SelectNew(
   pNew->pLimit = pLimit;
   pNew->pOffset = pOffset;
   pNew->pWith = 0;
-  assert( pOffset==0 || pLimit!=0 || pParse->nErr>0 || pParse->db->mallocFailed!=0 );
+  assert( pOffset==0 || pLimit!=0 || pParse->nErr>0
+                     || pParse->db->mallocFailed!=0 );
   if( pParse->db->mallocFailed ) {
     clearSelect(pParse->db, pNew, pNew!=&standin);
     pNew = 0;
@@ -117817,7 +118108,7 @@ SQLITE_PRIVATE void sqlite3SelectSetName(Select *p, const char *zName){
 ** Delete the given Select structure and all of its substructures.
 */
 SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){
-  if( p ) clearSelect(db, p, 1);
+  if( OK_IF_ALWAYS_TRUE(p) ) clearSelect(db, p, 1);
 }
 
 /*
@@ -118058,11 +118349,10 @@ static int sqliteProcessJoin(Parse *pParse, Select *p){
   pLeft = &pSrc->a[0];
   pRight = &pLeft[1];
   for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){
-    Table *pLeftTab = pLeft->pTab;
     Table *pRightTab = pRight->pTab;
     int isOuter;
 
-    if( NEVER(pLeftTab==0 || pRightTab==0) ) continue;
+    if( NEVER(pLeft->pTab==0 || pRightTab==0) ) continue;
     isOuter = (pRight->fg.jointype & JT_OUTER)!=0;
 
     /* When the NATURAL keyword is present, add WHERE clause terms for
@@ -118210,11 +118500,11 @@ static void pushOntoSorter(
     if( pParse->db->mallocFailed ) return;
     pOp->p2 = nKey + nData;
     pKI = pOp->p4.pKeyInfo;
-    memset(pKI->aSortOrder, 0, pKI->nField); /* Makes OP_Jump below testable */
+    memset(pKI->aSortOrder, 0, pKI->nKeyField); /* Makes OP_Jump testable */
     sqlite3VdbeChangeP4(v, -1, (char*)pKI, P4_KEYINFO);
-    testcase( pKI->nXField>2 );
+    testcase( pKI->nAllField > pKI->nKeyField+2 );
     pOp->p4.pKeyInfo = keyInfoFromExprList(pParse, pSort->pOrderBy, nOBSat,
-                                           pKI->nXField-1);
+                                           pKI->nAllField-pKI->nKeyField-1);
     addrJmp = sqlite3VdbeCurrentAddr(v);
     sqlite3VdbeAddOp3(v, OP_Jump, addrJmp+1, 0, addrJmp+1); VdbeCoverage(v);
     pSort->labelBkOut = sqlite3VdbeMakeLabel(v);
@@ -118312,16 +118602,15 @@ static void codeDistinct(
 ** This routine generates the code for the inside of the inner loop
 ** of a SELECT.
 **
-** If srcTab is negative, then the pEList expressions
+** If srcTab is negative, then the p->pEList expressions
 ** are evaluated in order to get the data for this row.  If srcTab is
-** zero or more, then data is pulled from srcTab and pEList is used only 
+** zero or more, then data is pulled from srcTab and p->pEList is used only 
 ** to get the number of columns and the collation sequence for each column.
 */
 static void selectInnerLoop(
   Parse *pParse,          /* The parser context */
   Select *p,              /* The complete select statement being coded */
-  ExprList *pEList,       /* List of values being extracted */
-  int srcTab,             /* Pull data from this table */
+  int srcTab,             /* Pull data from this table if non-negative */
   SortCtx *pSort,         /* If not NULL, info on how to process ORDER BY */
   DistinctCtx *pDistinct, /* If not NULL, info on how to process DISTINCT */
   SelectDest *pDest,      /* How to dispose of the results */
@@ -118345,7 +118634,7 @@ static void selectInnerLoop(
   int regOrig;                /* Start of memory holding full result (or 0) */
 
   assert( v );
-  assert( pEList!=0 );
+  assert( p->pEList!=0 );
   hasDistinct = pDistinct ? pDistinct->eTnctType : WHERE_DISTINCT_NOOP;
   if( pSort && pSort->pOrderBy==0 ) pSort = 0;
   if( pSort==0 && !hasDistinct ){
@@ -118355,7 +118644,7 @@ static void selectInnerLoop(
 
   /* Pull the requested columns.
   */
-  nResultCol = pEList->nExpr;
+  nResultCol = p->pEList->nExpr;
 
   if( pDest->iSdst==0 ){
     if( pSort ){
@@ -118378,7 +118667,7 @@ static void selectInnerLoop(
   if( srcTab>=0 ){
     for(i=0; i<nResultCol; i++){
       sqlite3VdbeAddOp3(v, OP_Column, srcTab, i, regResult+i);
-      VdbeComment((v, "%s", pEList->a[i].zName));
+      VdbeComment((v, "%s", p->pEList->a[i].zName));
     }
   }else if( eDest!=SRT_Exists ){
     /* If the destination is an EXISTS(...) expression, the actual
@@ -118391,24 +118680,25 @@ static void selectInnerLoop(
       ecelFlags = 0;
     }
     if( pSort && hasDistinct==0 && eDest!=SRT_EphemTab && eDest!=SRT_Table ){
-      /* For each expression in pEList that is a copy of an expression in
+      /* For each expression in p->pEList that is a copy of an expression in
       ** the ORDER BY clause (pSort->pOrderBy), set the associated 
       ** iOrderByCol value to one more than the index of the ORDER BY 
       ** expression within the sort-key that pushOntoSorter() will generate.
-      ** This allows the pEList field to be omitted from the sorted record,
+      ** This allows the p->pEList field to be omitted from the sorted record,
       ** saving space and CPU cycles.  */
       ecelFlags |= (SQLITE_ECEL_OMITREF|SQLITE_ECEL_REF);
       for(i=pSort->nOBSat; i<pSort->pOrderBy->nExpr; i++){
         int j;
         if( (j = pSort->pOrderBy->a[i].u.x.iOrderByCol)>0 ){
-          pEList->a[j-1].u.x.iOrderByCol = i+1-pSort->nOBSat;
+          p->pEList->a[j-1].u.x.iOrderByCol = i+1-pSort->nOBSat;
         }
       }
       regOrig = 0;
       assert( eDest==SRT_Set || eDest==SRT_Mem 
            || eDest==SRT_Coroutine || eDest==SRT_Output );
     }
-    nResultCol = sqlite3ExprCodeExprList(pParse,pEList,regResult,0,ecelFlags);
+    nResultCol = sqlite3ExprCodeExprList(pParse,p->pEList,regResult,
+                                         0,ecelFlags);
   }
 
   /* If the DISTINCT keyword was present on the SELECT statement
@@ -118440,7 +118730,7 @@ static void selectInnerLoop(
 
         iJump = sqlite3VdbeCurrentAddr(v) + nResultCol;
         for(i=0; i<nResultCol; i++){
-          CollSeq *pColl = sqlite3ExprCollSeq(pParse, pEList->a[i].pExpr);
+          CollSeq *pColl = sqlite3ExprCollSeq(pParse, p->pEList->a[i].pExpr);
           if( i<nResultCol-1 ){
             sqlite3VdbeAddOp3(v, OP_Ne, regResult+i, iJump, regPrev+i);
             VdbeCoverage(v);
@@ -118683,8 +118973,8 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoAlloc(sqlite3 *db, int N, int X){
   KeyInfo *p = sqlite3DbMallocRawNN(db, sizeof(KeyInfo) + nExtra);
   if( p ){
     p->aSortOrder = (u8*)&p->aColl[N+X];
-    p->nField = (u16)N;
-    p->nXField = (u16)X;
+    p->nKeyField = (u16)N;
+    p->nAllField = (u16)(N+X);
     p->enc = ENC(db);
     p->db = db;
     p->nRef = 1;
@@ -118758,10 +119048,7 @@ static KeyInfo *keyInfoFromExprList(
   if( pInfo ){
     assert( sqlite3KeyInfoIsWriteable(pInfo) );
     for(i=iStart, pItem=pList->a+iStart; i<nExpr; i++, pItem++){
-      CollSeq *pColl;
-      pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
-      if( !pColl ) pColl = db->pDfltColl;
-      pInfo->aColl[i-iStart] = pColl;
+      pInfo->aColl[i-iStart] = sqlite3ExprNNCollSeq(pParse, pItem->pExpr);
       pInfo->aSortOrder[i-iStart] = pItem->sortOrder;
     }
   }
@@ -119011,23 +119298,23 @@ static void generateSortTail(
 ** the SQLITE_ENABLE_COLUMN_METADATA compile-time option is used.
 */
 #ifdef SQLITE_ENABLE_COLUMN_METADATA
-# define columnType(A,B,C,D,E,F) columnTypeImpl(A,B,C,D,E,F)
+# define columnType(A,B,C,D,E) columnTypeImpl(A,B,C,D,E)
 #else /* if !defined(SQLITE_ENABLE_COLUMN_METADATA) */
-# define columnType(A,B,C,D,E,F) columnTypeImpl(A,B,F)
+# define columnType(A,B,C,D,E) columnTypeImpl(A,B)
 #endif
 static const char *columnTypeImpl(
   NameContext *pNC, 
+#ifndef SQLITE_ENABLE_COLUMN_METADATA
+  Expr *pExpr
+#else
   Expr *pExpr,
-#ifdef SQLITE_ENABLE_COLUMN_METADATA
   const char **pzOrigDb,
   const char **pzOrigTab,
-  const char **pzOrigCol,
+  const char **pzOrigCol
 #endif
-  u8 *pEstWidth
 ){
   char const *zType = 0;
   int j;
-  u8 estWidth = 1;
 #ifdef SQLITE_ENABLE_COLUMN_METADATA
   char const *zOrigDb = 0;
   char const *zOrigTab = 0;
@@ -119096,33 +119383,32 @@ static const char *columnTypeImpl(
           sNC.pSrcList = pS->pSrc;
           sNC.pNext = pNC;
           sNC.pParse = pNC->pParse;
-          zType = columnType(&sNC, p,&zOrigDb,&zOrigTab,&zOrigCol, &estWidth); 
+          zType = columnType(&sNC, p,&zOrigDb,&zOrigTab,&zOrigCol); 
         }
-      }else if( pTab->pSchema ){
-        /* A real table */
+      }else{
+        /* A real table or a CTE table */
         assert( !pS );
-        if( iCol<0 ) iCol = pTab->iPKey;
-        assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
 #ifdef SQLITE_ENABLE_COLUMN_METADATA
+        if( iCol<0 ) iCol = pTab->iPKey;
+        assert( iCol==XN_ROWID || (iCol>=0 && iCol<pTab->nCol) );
         if( iCol<0 ){
           zType = "INTEGER";
           zOrigCol = "rowid";
         }else{
           zOrigCol = pTab->aCol[iCol].zName;
           zType = sqlite3ColumnType(&pTab->aCol[iCol],0);
-          estWidth = pTab->aCol[iCol].szEst;
         }
         zOrigTab = pTab->zName;
-        if( pNC->pParse ){
+        if( pNC->pParse && pTab->pSchema ){
           int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema);
           zOrigDb = pNC->pParse->db->aDb[iDb].zDbSName;
         }
 #else
+        assert( iCol==XN_ROWID || (iCol>=0 && iCol<pTab->nCol) );
         if( iCol<0 ){
           zType = "INTEGER";
         }else{
           zType = sqlite3ColumnType(&pTab->aCol[iCol],0);
-          estWidth = pTab->aCol[iCol].szEst;
         }
 #endif
       }
@@ -119141,7 +119427,7 @@ static const char *columnTypeImpl(
       sNC.pSrcList = pS->pSrc;
       sNC.pNext = pNC;
       sNC.pParse = pNC->pParse;
-      zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol, &estWidth); 
+      zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol); 
       break;
     }
 #endif
@@ -119155,7 +119441,6 @@ static const char *columnTypeImpl(
     *pzOrigCol = zOrigCol;
   }
 #endif
-  if( pEstWidth ) *pEstWidth = estWidth;
   return zType;
 }
 
@@ -119182,7 +119467,7 @@ static void generateColumnTypes(
     const char *zOrigDb = 0;
     const char *zOrigTab = 0;
     const char *zOrigCol = 0;
-    zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol, 0);
+    zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol);
 
     /* The vdbe must make its own copy of the column-type and other 
     ** column specific strings, in case the schema is reset before this
@@ -119192,7 +119477,7 @@ static void generateColumnTypes(
     sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, SQLITE_TRANSIENT);
     sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, SQLITE_TRANSIENT);
 #else
-    zType = columnType(&sNC, p, 0, 0, 0, 0);
+    zType = columnType(&sNC, p, 0, 0, 0);
 #endif
     sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT);
   }
@@ -119222,9 +119507,9 @@ static void generateColumnTypes(
 **                              other words, the zSpan of the result expression.
 **
 **    short=ON, full=OFF:       (This is the default setting).  If the result
-**                              refers directly to a table column, then the result
-**                              column name is just the table column name: COLUMN. 
-**                              Otherwise use zSpan.
+**                              refers directly to a table column, then the
+**                              result column name is just the table column
+**                              name: COLUMN.  Otherwise use zSpan.
 **
 **    full=ON, short=ANY:       If the result refers directly to a table column,
 **                              then the result column name with the table name
@@ -119265,6 +119550,8 @@ static void generateColumnNames(
     Expr *p = pEList->a[i].pExpr;
 
     assert( p!=0 );
+    assert( p->op!=TK_AGG_COLUMN );  /* Agg processing has not run yet */
+    assert( p->op!=TK_COLUMN || p->pTab!=0 ); /* Covering idx not yet coded */
     if( pEList->a[i].zName ){
       /* An AS clause always takes first priority */
       char *zName = pEList->a[i].zName;
@@ -119339,6 +119626,7 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList(
     nCol = pEList->nExpr;
     aCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol);
     testcase( aCol==0 );
+    if( nCol>32767 ) nCol = 32767;
   }else{
     nCol = 0;
     aCol = 0;
@@ -119358,7 +119646,9 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList(
         pColExpr = pColExpr->pRight;
         assert( pColExpr!=0 );
       }
-      if( pColExpr->op==TK_COLUMN && pColExpr->pTab!=0 ){
+      if( (pColExpr->op==TK_COLUMN || pColExpr->op==TK_AGG_COLUMN)
+       && pColExpr->pTab!=0 
+      ){
         /* For columns use the column name name */
         int iCol = pColExpr->iColumn;
         Table *pTab = pColExpr->pTab;
@@ -119433,7 +119723,6 @@ SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(
   int i;
   Expr *p;
   struct ExprList_item *a;
-  u64 szAll = 0;
 
   assert( pSelect!=0 );
   assert( (pSelect->selFlags & SF_Resolved)!=0 );
@@ -119446,10 +119735,11 @@ SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(
     const char *zType;
     int n, m;
     p = a[i].pExpr;
-    zType = columnType(&sNC, p, 0, 0, 0, &pCol->szEst);
-    szAll += pCol->szEst;
+    zType = columnType(&sNC, p, 0, 0, 0);
+    /* pCol->szEst = ... // Column size est for SELECT tables never used */
     pCol->affinity = sqlite3ExprAffinity(p);
-    if( zType && (m = sqlite3Strlen30(zType))>0 ){
+    if( zType ){
+      m = sqlite3Strlen30(zType);
       n = sqlite3Strlen30(pCol->zName);
       pCol->zName = sqlite3DbReallocOrFree(db, pCol->zName, n+m+2);
       if( pCol->zName ){
@@ -119463,7 +119753,7 @@ SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(
       pCol->zColl = sqlite3DbStrDup(db, pColl->zName);
     }
   }
-  pTab->szTabRow = sqlite3LogEst(szAll*4);
+  pTab->szTabRow = 1; /* Any non-zero value works */
 }
 
 /*
@@ -119506,19 +119796,16 @@ SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
 ** Get a VDBE for the given parser context.  Create a new one if necessary.
 ** If an error occurs, return NULL and leave a message in pParse.
 */
-static SQLITE_NOINLINE Vdbe *allocVdbe(Parse *pParse){
-  Vdbe *v = pParse->pVdbe = sqlite3VdbeCreate(pParse);
-  if( v ) sqlite3VdbeAddOp2(v, OP_Init, 0, 1);
+SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){
+  if( pParse->pVdbe ){
+    return pParse->pVdbe;
+  }
   if( pParse->pToplevel==0
    && OptimizationEnabled(pParse->db,SQLITE_FactorOutConst)
   ){
     pParse->okConstFactor = 1;
   }
-  return v;
-}
-SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){
-  Vdbe *v = pParse->pVdbe;
-  return v ? v : allocVdbe(pParse);
+  return sqlite3VdbeCreate(pParse);
 }
 
 
@@ -119791,7 +120078,7 @@ static void generateWithRecursiveQuery(
   /* Output the single row in Current */
   addrCont = sqlite3VdbeMakeLabel(v);
   codeOffset(v, regOffset, addrCont);
-  selectInnerLoop(pParse, p, p->pEList, iCurrent,
+  selectInnerLoop(pParse, p, iCurrent,
       0, 0, pDest, addrCont, addrBreak);
   if( regLimit ){
     sqlite3VdbeAddOp2(v, OP_DecrJumpZero, regLimit, addrBreak);
@@ -119929,15 +120216,9 @@ static int multiSelect(
   db = pParse->db;
   pPrior = p->pPrior;
   dest = *pDest;
-  if( pPrior->pOrderBy ){
-    sqlite3ErrorMsg(pParse,"ORDER BY clause should come after %s not before",
-      selectOpName(p->op));
-    rc = 1;
-    goto multi_select_end;
-  }
-  if( pPrior->pLimit ){
-    sqlite3ErrorMsg(pParse,"LIMIT clause should come after %s not before",
-      selectOpName(p->op));
+  if( pPrior->pOrderBy || pPrior->pLimit ){
+    sqlite3ErrorMsg(pParse,"%s clause should come after %s not before",
+      pPrior->pOrderBy!=0 ? "ORDER BY" : "LIMIT", selectOpName(p->op));
     rc = 1;
     goto multi_select_end;
   }
@@ -120110,7 +120391,7 @@ static int multiSelect(
         computeLimitRegisters(pParse, p, iBreak);
         sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak); VdbeCoverage(v);
         iStart = sqlite3VdbeCurrentAddr(v);
-        selectInnerLoop(pParse, p, p->pEList, unionTab,
+        selectInnerLoop(pParse, p, unionTab,
                         0, 0, &dest, iCont, iBreak);
         sqlite3VdbeResolveLabel(v, iCont);
         sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart); VdbeCoverage(v);
@@ -120183,7 +120464,7 @@ static int multiSelect(
       iStart = sqlite3VdbeAddOp2(v, OP_RowData, tab1, r1);
       sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0); VdbeCoverage(v);
       sqlite3ReleaseTempReg(pParse, r1);
-      selectInnerLoop(pParse, p, p->pEList, tab1,
+      selectInnerLoop(pParse, p, tab1,
                       0, 0, &dest, iCont, iBreak);
       sqlite3VdbeResolveLabel(v, iCont);
       sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart); VdbeCoverage(v);
@@ -120835,7 +121116,9 @@ static Expr *substExpr(
   Expr *pExpr            /* Expr in which substitution occurs */
 ){
   if( pExpr==0 ) return 0;
-  if( ExprHasProperty(pExpr, EP_FromJoin) && pExpr->iRightJoinTable==pSubst->iTable ){
+  if( ExprHasProperty(pExpr, EP_FromJoin)
+   && pExpr->iRightJoinTable==pSubst->iTable
+  ){
     pExpr->iRightJoinTable = pSubst->iNewTable;
   }
   if( pExpr->op==TK_COLUMN && pExpr->iTable==pSubst->iTable ){
@@ -120948,68 +121231,74 @@ static void substSelect(
 ** exist on the table t1, a complete scan of the data might be
 ** avoided.
 **
-** Flattening is only attempted if all of the following are true:
+** Flattening is subject to the following constraints:
 **
-**   (1)  The subquery and the outer query do not both use aggregates.
+**  (**)  We no longer attempt to flatten aggregate subqueries. Was:
+**        The subquery and the outer query cannot both be aggregates.
 **
-**   (2)  The subquery is not an aggregate or (2a) the outer query is not a join
-**        and (2b) the outer query does not use subqueries other than the one
-**        FROM-clause subquery that is a candidate for flattening.  (2b is
-**        due to ticket [2f7170d73bf9abf80] from 2015-02-09.)
+**  (**)  We no longer attempt to flatten aggregate subqueries. Was:
+**        (2) If the subquery is an aggregate then
+**        (2a) the outer query must not be a join and
+**        (2b) the outer query must not use subqueries
+**             other than the one FROM-clause subquery that is a candidate
+**             for flattening.  (This is due to ticket [2f7170d73bf9abf80]
+**             from 2015-02-09.)
 **
-**   (3)  The subquery is not the right operand of a LEFT JOIN
-**        or (a) the subquery is not itself a join and (b) the FROM clause
-**        of the subquery does not contain a virtual table and (c) the 
-**        outer query is not an aggregate.
+**   (3)  If the subquery is the right operand of a LEFT JOIN then
+**        (3a) the subquery may not be a join and
+**        (3b) the FROM clause of the subquery may not contain a virtual
+**             table and
+**        (3c) the outer query may not be an aggregate.
 **
-**   (4)  The subquery is not DISTINCT.
+**   (4)  The subquery can not be DISTINCT.
 **
 **  (**)  At one point restrictions (4) and (5) defined a subset of DISTINCT
 **        sub-queries that were excluded from this optimization. Restriction 
 **        (4) has since been expanded to exclude all DISTINCT subqueries.
 **
-**   (6)  The subquery does not use aggregates or the outer query is not
-**        DISTINCT.
+**  (**)  We no longer attempt to flatten aggregate subqueries.  Was:
+**        If the subquery is aggregate, the outer query may not be DISTINCT.
 **
-**   (7)  The subquery has a FROM clause.  TODO:  For subqueries without
+**   (7)  The subquery must have a FROM clause.  TODO:  For subqueries without
 **        A FROM clause, consider adding a FROM clause with the special
 **        table sqlite_once that consists of a single row containing a
 **        single NULL.
 **
-**   (8)  The subquery does not use LIMIT or the outer query is not a join.
+**   (8)  If the subquery uses LIMIT then the outer query may not be a join.
 **
-**   (9)  The subquery does not use LIMIT or the outer query does not use
-**        aggregates.
+**   (9)  If the subquery uses LIMIT then the outer query may not be aggregate.
 **
 **  (**)  Restriction (10) was removed from the code on 2005-02-05 but we
 **        accidently carried the comment forward until 2014-09-15.  Original
-**        text: "The subquery does not use aggregates or the outer query 
-**        does not use LIMIT."
+**        constraint: "If the subquery is aggregate then the outer query 
+**        may not use LIMIT."
 **
-**  (11)  The subquery and the outer query do not both have ORDER BY clauses.
+**  (11)  The subquery and the outer query may not both have ORDER BY clauses.
 **
 **  (**)  Not implemented.  Subsumed into restriction (3).  Was previously
 **        a separate restriction deriving from ticket #350.
 **
-**  (13)  The subquery and outer query do not both use LIMIT.
+**  (13)  The subquery and outer query may not both use LIMIT.
 **
-**  (14)  The subquery does not use OFFSET.
+**  (14)  The subquery may not use OFFSET.
 **
-**  (15)  The outer query is not part of a compound select or the
-**        subquery does not have a LIMIT clause.
+**  (15)  If the outer query is part of a compound select, then the
+**        subquery may not use LIMIT.
 **        (See ticket #2339 and ticket [02a8e81d44]).
 **
-**  (16)  The outer query is not an aggregate or the subquery does
-**        not contain ORDER BY.  (Ticket #2942)  This used to not matter
+**  (16)  If the outer query is aggregate, then the subquery may not
+**        use ORDER BY.  (Ticket #2942)  This used to not matter
 **        until we introduced the group_concat() function.  
 **
-**  (17)  The sub-query is not a compound select, or it is a UNION ALL 
-**        compound clause made up entirely of non-aggregate queries, and 
-**        the parent query:
-**
-**          * is not itself part of a compound select,
-**          * is not an aggregate or DISTINCT query, and
-**          * is not a join
+**  (17)  If the subquery is a compound select, then
+**        (17a) all compound operators must be a UNION ALL, and
+**        (17b) no terms within the subquery compound may be aggregate
+**              or DISTINCT, and
+**        (17c) every term within the subquery compound must have a FROM clause
+**        (17d) the outer query may not be
+**              (17d1) aggregate, or
+**              (17d2) DISTINCT, or
+**              (17d3) a join.
 **
 **        The parent and sub-query may contain WHERE clauses. Subject to
 **        rules (11), (13) and (14), they may also contain ORDER BY,
@@ -121025,29 +121314,32 @@ static void substSelect(
 **        syntax error and return a detailed message.
 **
 **  (18)  If the sub-query is a compound select, then all terms of the
-**        ORDER by clause of the parent must be simple references to 
+**        ORDER BY clause of the parent must be simple references to 
 **        columns of the sub-query.
 **
-**  (19)  The subquery does not use LIMIT or the outer query does not
+**  (19)  If the subquery uses LIMIT then the outer query may not
 **        have a WHERE clause.
 **
-**  (20)  If the sub-query is a compound select, then it must not use
-**        an ORDER BY clause.  Ticket #3773.  We could relax this constraint
-**        somewhat by saying that the terms of the ORDER BY clause must
-**        appear as unmodified result columns in the outer query.  But we
-**        have other optimizations in mind to deal with that case.
+**  (**)  Subsumed into (17d3).  Was: If the sub-query is a compound select,
+**        then it must not use an ORDER BY clause - Ticket #3773.  Because
+**        of (17d3), then only way to have a compound subquery is if it is
+**        the only term in the FROM clause of the outer query.  But if the
+**        only term in the FROM clause has an ORDER BY, then it will be
+**        implemented as a co-routine and the flattener will never be called.
 **
-**  (21)  The subquery does not use LIMIT or the outer query is not
+**  (21)  If the subquery uses LIMIT then the outer query may not be
 **        DISTINCT.  (See ticket [752e1646fc]).
 **
-**  (22)  The subquery is not a recursive CTE.
+**  (22)  The subquery may not be a recursive CTE.
 **
-**  (23)  The parent is not a recursive CTE, or the sub-query is not a
-**        compound query. This restriction is because transforming the
+**  (**)  Subsumed into restriction (17d3).  Was: If the outer query is
+**        a recursive CTE, then the sub-query may not be a compound query.
+**        This restriction is because transforming the
 **        parent to a compound query confuses the code that handles
 **        recursive queries in multiSelect().
 **
-**  (24)  The subquery is not an aggregate that uses the built-in min() or 
+**  (**)  We no longer attempt to flatten aggregate subqueries.  Was:
+**        The subquery may not be an aggregate that uses the built-in min() or 
 **        or max() functions.  (Without this restriction, a query like:
 **        "SELECT x FROM (SELECT max(y), x FROM t1)" would not necessarily
 **        return the value X for which Y was maximal.)
@@ -121055,7 +121347,7 @@ static void substSelect(
 **
 ** In this routine, the "p" parameter is a pointer to the outer query.
 ** The subquery is p->pSrc->a[iFrom].  isAgg is true if the outer query
-** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates.
+** uses aggregates.
 **
 ** If flattening is not attempted, this routine is a no-op and returns 0.
 ** If flattening is attempted this routine returns 1.
@@ -121067,8 +121359,7 @@ static int flattenSubquery(
   Parse *pParse,       /* Parsing context */
   Select *p,           /* The parent or outer SELECT statement */
   int iFrom,           /* Index in p->pSrc->a[] of the inner subquery */
-  int isAgg,           /* True if outer SELECT uses aggregate functions */
-  int subqueryIsAgg    /* True if the subquery uses aggregate functions */
+  int isAgg            /* True if outer SELECT uses aggregate functions */
 ){
   const char *zSavedAuthContext = pParse->zAuthContext;
   Select *pParent;    /* Current UNION ALL term of the other query */
@@ -121087,7 +121378,7 @@ static int flattenSubquery(
   /* Check to see if flattening is permitted.  Return 0 if not.
   */
   assert( p!=0 );
-  assert( p->pPrior==0 );  /* Unable to flatten compound queries */
+  assert( p->pPrior==0 );
   if( OptimizationDisabled(db, SQLITE_QueryFlattener) ) return 0;
   pSrc = p->pSrc;
   assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
@@ -121095,16 +121386,6 @@ static int flattenSubquery(
   iParent = pSubitem->iCursor;
   pSub = pSubitem->pSelect;
   assert( pSub!=0 );
-  if( subqueryIsAgg ){
-    if( isAgg ) return 0;                                /* Restriction (1)   */
-    if( pSrc->nSrc>1 ) return 0;                         /* Restriction (2a)  */
-    if( (p->pWhere && ExprHasProperty(p->pWhere,EP_Subquery))
-     || (sqlite3ExprListFlags(p->pEList) & EP_Subquery)!=0
-     || (sqlite3ExprListFlags(p->pOrderBy) & EP_Subquery)!=0
-    ){
-      return 0;                                          /* Restriction (2b)  */
-    }
-  }
 
   pSubSrc = pSub->pSrc;
   assert( pSubSrc );
@@ -121119,13 +121400,10 @@ static int flattenSubquery(
     return 0;                                            /* Restriction (15) */
   }
   if( pSubSrc->nSrc==0 ) return 0;                       /* Restriction (7)  */
-  if( pSub->selFlags & SF_Distinct ) return 0;           /* Restriction (5)  */
+  if( pSub->selFlags & SF_Distinct ) return 0;           /* Restriction (4)  */
   if( pSub->pLimit && (pSrc->nSrc>1 || isAgg) ){
      return 0;         /* Restrictions (8)(9) */
   }
-  if( (p->selFlags & SF_Distinct)!=0 && subqueryIsAgg ){
-     return 0;         /* Restriction (6)  */
-  }
   if( p->pOrderBy && pSub->pOrderBy ){
      return 0;                                           /* Restriction (11) */
   }
@@ -121134,18 +121412,14 @@ static int flattenSubquery(
   if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){
      return 0;         /* Restriction (21) */
   }
-  testcase( pSub->selFlags & SF_Recursive );
-  testcase( pSub->selFlags & SF_MinMaxAgg );
-  if( pSub->selFlags & (SF_Recursive|SF_MinMaxAgg) ){
-    return 0; /* Restrictions (22) and (24) */
-  }
-  if( (p->selFlags & SF_Recursive) && pSub->pPrior ){
-    return 0; /* Restriction (23) */
+  if( pSub->selFlags & (SF_Recursive) ){
+    return 0; /* Restrictions (22) */
   }
 
   /*
   ** If the subquery is the right operand of a LEFT JOIN, then the
-  ** subquery may not be a join itself.  Example of why this is not allowed:
+  ** subquery may not be a join itself (3a). Example of why this is not
+  ** allowed:
   **
   **         t1 LEFT OUTER JOIN (t2 JOIN t3)
   **
@@ -121156,54 +121430,53 @@ static int flattenSubquery(
   ** which is not at all the same thing.
   **
   ** If the subquery is the right operand of a LEFT JOIN, then the outer
-  ** query cannot be an aggregate.  This is an artifact of the way aggregates
-  ** are processed - there is no mechanism to determine if the LEFT JOIN
-  ** table should be all-NULL.
+  ** query cannot be an aggregate. (3c)  This is an artifact of the way
+  ** aggregates are processed - there is no mechanism to determine if
+  ** the LEFT JOIN table should be all-NULL.
   **
   ** See also tickets #306, #350, and #3300.
   */
   if( (pSubitem->fg.jointype & JT_OUTER)!=0 ){
     isLeftJoin = 1;
     if( pSubSrc->nSrc>1 || isAgg || IsVirtual(pSubSrc->a[0].pTab) ){
-      return 0; /* Restriction (3) */
+      /*  (3a)             (3c)     (3b) */
+      return 0;
     }
   }
 #ifdef SQLITE_EXTRA_IFNULLROW
   else if( iFrom>0 && !isAgg ){
     /* Setting isLeftJoin to -1 causes OP_IfNullRow opcodes to be generated for
-    ** every reference to any result column from subquery in a join, even though
-    ** they are not necessary.  This will stress-test the OP_IfNullRow opcode. */
+    ** every reference to any result column from subquery in a join, even
+    ** though they are not necessary.  This will stress-test the OP_IfNullRow 
+    ** opcode. */
     isLeftJoin = -1;
   }
 #endif
 
-  /* Restriction 17: If the sub-query is a compound SELECT, then it must
+  /* Restriction (17): If the sub-query is a compound SELECT, then it must
   ** use only the UNION ALL operator. And none of the simple select queries
   ** that make up the compound SELECT are allowed to be aggregate or distinct
   ** queries.
   */
   if( pSub->pPrior ){
-    if( pSub->pOrderBy ){
-      return 0;  /* Restriction 20 */
-    }
     if( isAgg || (p->selFlags & SF_Distinct)!=0 || pSrc->nSrc!=1 ){
-      return 0;
+      return 0; /* (17d1), (17d2), or (17d3) */
     }
     for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){
       testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
       testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
       assert( pSub->pSrc!=0 );
       assert( pSub->pEList->nExpr==pSub1->pEList->nExpr );
-      if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0
-       || (pSub1->pPrior && pSub1->op!=TK_ALL) 
-       || pSub1->pSrc->nSrc<1
+      if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0    /* (17b) */
+       || (pSub1->pPrior && pSub1->op!=TK_ALL)                 /* (17a) */
+       || pSub1->pSrc->nSrc<1                                  /* (17c) */
       ){
         return 0;
       }
       testcase( pSub1->pSrc->nSrc>1 );
     }
 
-    /* Restriction 18. */
+    /* Restriction (18). */
     if( p->pOrderBy ){
       int ii;
       for(ii=0; ii<p->pOrderBy->nExpr; ii++){
@@ -121212,6 +121485,23 @@ static int flattenSubquery(
     }
   }
 
+  /* Ex-restriction (23):
+  ** The only way that the recursive part of a CTE can contain a compound
+  ** subquery is for the subquery to be one term of a join.  But if the
+  ** subquery is a join, then the flattening has already been stopped by
+  ** restriction (17d3)
+  */
+  assert( (p->selFlags & SF_Recursive)==0 || pSub->pPrior==0 );
+
+  /* Ex-restriction (20):
+  ** A compound subquery must be the only term in the FROM clause of the
+  ** outer query by restriction (17d3).  But if that term also has an
+  ** ORDER BY clause, then the subquery will be implemented by co-routine
+  ** and so the flattener will never be invoked.  Hence, it is not possible
+  ** for the subquery to be a compound and have an ORDER BY clause.
+  */
+  assert( pSub->pPrior==0 || pSub->pOrderBy==0 );
+
   /***** If we reach this point, flattening is permitted. *****/
   SELECTTRACE(1,pParse,p,("flatten %s.%p from term %d\n",
                    pSub->zSelName, pSub, iFrom));
@@ -121424,18 +121714,7 @@ static int flattenSubquery(
     if( isLeftJoin>0 ){
       setJoinExpr(pWhere, iNewParent);
     }
-    if( subqueryIsAgg ){
-      assert( pParent->pHaving==0 );
-      pParent->pHaving = pParent->pWhere;
-      pParent->pWhere = pWhere;
-      pParent->pHaving = sqlite3ExprAnd(db, 
-          sqlite3ExprDup(db, pSub->pHaving, 0), pParent->pHaving
-      );
-      assert( pParent->pGroupBy==0 );
-      pParent->pGroupBy = sqlite3ExprListDup(db, pSub->pGroupBy, 0);
-    }else{
-      pParent->pWhere = sqlite3ExprAnd(db, pWhere, pParent->pWhere);
-    }
+    pParent->pWhere = sqlite3ExprAnd(db, pWhere, pParent->pWhere);
     if( db->mallocFailed==0 ){
       SubstContext x;
       x.pParse = pParse;
@@ -121498,9 +121777,13 @@ static int flattenSubquery(
 **
 ** Do not attempt this optimization if:
 **
-**   (1) The inner query is an aggregate.  (In that case, we'd really want
-**       to copy the outer WHERE-clause terms onto the HAVING clause of the
-**       inner query.  But they probably won't help there so do not bother.)
+**   (1) (** This restriction was removed on 2017-09-29.  We used to
+**           disallow this optimization for aggregate subqueries, but now
+**           it is allowed by putting the extra terms on the HAVING clause.
+**           The added HAVING clause is pointless if the subquery lacks
+**           a GROUP BY clause.  But such a HAVING clause is also harmless
+**           so there does not appear to be any reason to add extra logic
+**           to suppress it. **)
 **
 **   (2) The inner query is the recursive part of a common table expression.
 **
@@ -121525,16 +121808,22 @@ static int pushDownWhereTerms(
 ){
   Expr *pNew;
   int nChng = 0;
-  Select *pX;           /* For looping over compound SELECTs in pSubq */
   if( pWhere==0 ) return 0;
-  for(pX=pSubq; pX; pX=pX->pPrior){
-    if( (pX->selFlags & (SF_Aggregate|SF_Recursive))!=0 ){
-      testcase( pX->selFlags & SF_Aggregate );
-      testcase( pX->selFlags & SF_Recursive );
-      testcase( pX!=pSubq );
-      return 0; /* restrictions (1) and (2) */
+  if( pSubq->selFlags & SF_Recursive ) return 0;  /* restriction (2) */
+
+#ifdef SQLITE_DEBUG
+  /* Only the first term of a compound can have a WITH clause.  But make
+  ** sure no other terms are marked SF_Recursive in case something changes
+  ** in the future.
+  */
+  {
+    Select *pX;  
+    for(pX=pSubq; pX; pX=pX->pPrior){
+      assert( (pX->selFlags & (SF_Recursive))==0 );
     }
   }
+#endif
+
   if( pSubq->pLimit!=0 ){
     return 0; /* restriction (3) */
   }
@@ -121542,7 +121831,7 @@ static int pushDownWhereTerms(
     nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, iCursor);
     pWhere = pWhere->pLeft;
   }
-  if( ExprHasProperty(pWhere,EP_FromJoin) ) return 0; /* restriction 5 */
+  if( ExprHasProperty(pWhere,EP_FromJoin) ) return 0; /* restriction (5) */
   if( sqlite3ExprIsTableConstant(pWhere, iCursor) ){
     nChng++;
     while( pSubq ){
@@ -121554,7 +121843,11 @@ static int pushDownWhereTerms(
       x.isLeftJoin = 0;
       x.pEList = pSubq->pEList;
       pNew = substExpr(&x, pNew);
-      pSubq->pWhere = sqlite3ExprAnd(pParse->db, pSubq->pWhere, pNew);
+      if( pSubq->selFlags & SF_Aggregate ){
+        pSubq->pHaving = sqlite3ExprAnd(pParse->db, pSubq->pHaving, pNew);
+      }else{
+        pSubq->pWhere = sqlite3ExprAnd(pParse->db, pSubq->pWhere, pNew);
+      }
       pSubq = pSubq->pPrior;
     }
   }
@@ -121882,7 +122175,8 @@ static int withExpand(
       );
       return SQLITE_ERROR;
     }
-    assert( pTab->nTabRef==1 || ((pSel->selFlags&SF_Recursive) && pTab->nTabRef==2 ));
+    assert( pTab->nTabRef==1 || 
+            ((pSel->selFlags&SF_Recursive) && pTab->nTabRef==2 ));
 
     pCte->zCteErr = "circular reference: %s";
     pSavedWith = pParse->pWith;
@@ -121939,7 +122233,7 @@ static int withExpand(
 */
 static void selectPopWith(Walker *pWalker, Select *p){
   Parse *pParse = pWalker->pParse;
-  if( pParse->pWith && p->pPrior==0 ){
+  if( OK_IF_ALWAYS_TRUE(pParse->pWith) && p->pPrior==0 ){
     With *pWith = findRightmost(p)->pWith;
     if( pWith!=0 ){
       assert( pParse->pWith==pWith );
@@ -121994,7 +122288,7 @@ static int selectExpander(Walker *pWalker, Select *p){
   }
   pTabList = p->pSrc;
   pEList = p->pEList;
-  if( p->pWith ){
+  if( OK_IF_ALWAYS_TRUE(p->pWith) ){
     sqlite3WithPush(pParse, p->pWith, 0);
   }
 
@@ -122026,7 +122320,11 @@ static int selectExpander(Walker *pWalker, Select *p){
       pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table));
       if( pTab==0 ) return WRC_Abort;
       pTab->nTabRef = 1;
-      pTab->zName = sqlite3MPrintf(db, "sqlite_sq_%p", (void*)pTab);
+      if( pFrom->zAlias ){
+        pTab->zName = sqlite3DbStrDup(db, pFrom->zAlias);
+      }else{
+        pTab->zName = sqlite3MPrintf(db, "subquery_%p", (void*)pTab);
+      }
       while( pSel->pPrior ){ pSel = pSel->pPrior; }
       sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol);
       pTab->iPKey = -1;
@@ -122236,12 +122534,10 @@ static int selectExpander(Walker *pWalker, Select *p){
     sqlite3ExprListDelete(db, pEList);
     p->pEList = pNew;
   }
-#if SQLITE_MAX_COLUMN
   if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
     sqlite3ErrorMsg(pParse, "too many columns in result set");
     return WRC_Abort;
   }
-#endif
   return WRC_Continue;
 }
 
@@ -122295,7 +122591,7 @@ static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
   Walker w;
   w.xExprCallback = sqlite3ExprWalkNoop;
   w.pParse = pParse;
-  if( pParse->hasCompound ){
+  if( OK_IF_ALWAYS_TRUE(pParse->hasCompound) ){
     w.xSelectCallback = convertCompoundSelectToSubquery;
     w.xSelectCallback2 = 0;
     sqlite3WalkSelect(&w, pSelect);
@@ -122383,15 +122679,13 @@ SQLITE_PRIVATE void sqlite3SelectPrep(
   Select *p,             /* The SELECT statement being coded. */
   NameContext *pOuterNC  /* Name context for container */
 ){
-  sqlite3 *db;
-  if( NEVER(p==0) ) return;
-  db = pParse->db;
-  if( db->mallocFailed ) return;
+  assert( p!=0 || pParse->db->mallocFailed );
+  if( pParse->db->mallocFailed ) return;
   if( p->selFlags & SF_HasTypeInfo ) return;
   sqlite3SelectExpand(pParse, p);
-  if( pParse->nErr || db->mallocFailed ) return;
+  if( pParse->nErr || pParse->db->mallocFailed ) return;
   sqlite3ResolveSelectNames(pParse, p, pOuterNC);
-  if( pParse->nErr || db->mallocFailed ) return;
+  if( pParse->nErr || pParse->db->mallocFailed ) return;
   sqlite3SelectAddTypeInfo(pParse, p);
 }
 
@@ -122686,24 +122980,24 @@ static int countOfViewOptimization(Parse *pParse, Select *p){
   Expr *pExpr;
   Expr *pCount;
   sqlite3 *db;
-  if( (p->selFlags & SF_Aggregate)==0 ) return 0;   /* This is an aggregate query */
+  if( (p->selFlags & SF_Aggregate)==0 ) return 0;   /* This is an aggregate */
   if( p->pEList->nExpr!=1 ) return 0;               /* Single result column */
   pExpr = p->pEList->a[0].pExpr;
   if( pExpr->op!=TK_AGG_FUNCTION ) return 0;        /* Result is an aggregate */
-  if( sqlite3_stricmp(pExpr->u.zToken,"count") ) return 0;  /* Must be count() */
+  if( sqlite3_stricmp(pExpr->u.zToken,"count") ) return 0;  /* Is count() */
   if( pExpr->x.pList!=0 ) return 0;                 /* Must be count(*) */
-  if( p->pSrc->nSrc!=1 ) return 0;                  /* One table in the FROM clause */
+  if( p->pSrc->nSrc!=1 ) return 0;                  /* One table in FROM  */
   pSub = p->pSrc->a[0].pSelect;
   if( pSub==0 ) return 0;                           /* The FROM is a subquery */
-  if( pSub->pPrior==0 ) return 0;                   /* Must be a compound subquery */
+  if( pSub->pPrior==0 ) return 0;                   /* Must be a compound ry */
   do{
     if( pSub->op!=TK_ALL && pSub->pPrior ) return 0;  /* Must be UNION ALL */
     if( pSub->pWhere ) return 0;                      /* No WHERE clause */
     if( pSub->selFlags & SF_Aggregate ) return 0;     /* Not an aggregate */
-    pSub = pSub->pPrior;                              /* Repeat over compound terms */
+    pSub = pSub->pPrior;                              /* Repeat over compound */
   }while( pSub );
 
-  /* If we reach this point, that means it is OK to perform the transformation */
+  /* If we reach this point then it is OK to perform the transformation */
 
   db = pParse->db;
   pCount = pExpr;
@@ -122843,7 +123137,6 @@ SQLITE_PRIVATE int sqlite3Select(
   for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
     struct SrcList_item *pItem = &pTabList->a[i];
     Select *pSub = pItem->pSelect;
-    int isAggSub;
     Table *pTab = pItem->pTab;
     if( pSub==0 ) continue;
 
@@ -122855,13 +123148,36 @@ SQLITE_PRIVATE int sqlite3Select(
       goto select_end;
     }
 
-    isAggSub = (pSub->selFlags & SF_Aggregate)!=0;
-    if( flattenSubquery(pParse, p, i, isAgg, isAggSub) ){
+    /* Do not try to flatten an aggregate subquery.
+    **
+    ** Flattening an aggregate subquery is only possible if the outer query
+    ** is not a join.  But if the outer query is not a join, then the subquery
+    ** will be implemented as a co-routine and there is no advantage to
+    ** flattening in that case.
+    */
+    if( (pSub->selFlags & SF_Aggregate)!=0 ) continue;
+    assert( pSub->pGroupBy==0 );
+
+    /* If the subquery contains an ORDER BY clause and if
+    ** it will be implemented as a co-routine, then do not flatten.  This
+    ** restriction allows SQL constructs like this:
+    **
+    **  SELECT expensive_function(x)
+    **    FROM (SELECT x FROM tab ORDER BY y LIMIT 10);
+    **
+    ** The expensive_function() is only computed on the 10 rows that
+    ** are output, rather than every row of the table.
+    */
+    if( pSub->pOrderBy!=0
+     && i==0
+     && (pTabList->nSrc==1
+         || (pTabList->a[1].fg.jointype&(JT_LEFT|JT_CROSS))!=0)
+    ){
+      continue;
+    }
+
+    if( flattenSubquery(pParse, p, i, isAgg) ){
       /* This subquery can be absorbed into its parent. */
-      if( isAggSub ){
-        isAgg = 1;
-        p->selFlags |= SF_Aggregate;
-      }
       i = -1;
     }
     pTabList = p->pSrc;
@@ -122895,10 +123211,14 @@ SQLITE_PRIVATE int sqlite3Select(
     struct SrcList_item *pItem = &pTabList->a[i];
     SelectDest dest;
     Select *pSub;
+#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
+    const char *zSavedAuthContext;
+#endif
 
-    /* Issue SQLITE_READ authorizations with a fake column name for any tables that
-    ** are referenced but from which no values are extracted. Examples of where these
-    ** kinds of null SQLITE_READ authorizations would occur:
+    /* Issue SQLITE_READ authorizations with a fake column name for any
+    ** tables that are referenced but from which no values are extracted.
+    ** Examples of where these kinds of null SQLITE_READ authorizations
+    ** would occur:
     **
     **     SELECT count(*) FROM t1;   -- SQLITE_READ t1.""
     **     SELECT t1.* FROM t1, t2;   -- SQLITE_READ t2.""
@@ -122906,10 +123226,10 @@ SQLITE_PRIVATE int sqlite3Select(
     ** The fake column name is an empty string.  It is possible for a table to
     ** have a column named by the empty string, in which case there is no way to
     ** distinguish between an unreferenced table and an actual reference to the
-    ** "" column.  The original design was for the fake column name to be a NULL,
+    ** "" column. The original design was for the fake column name to be a NULL,
     ** which would be unambiguous.  But legacy authorization callbacks might
-    ** assume the column name is non-NULL and segfault.  The use of an empty string
-    ** for the fake column name seems safer.
+    ** assume the column name is non-NULL and segfault.  The use of an empty
+    ** string for the fake column name seems safer.
     */
     if( pItem->colUsed==0 ){
       sqlite3AuthCheck(pParse, SQLITE_READ, pItem->zName, "", pItem->zDatabase);
@@ -122961,16 +123281,14 @@ SQLITE_PRIVATE int sqlite3Select(
 #endif
     }
 
+    zSavedAuthContext = pParse->zAuthContext;
+    pParse->zAuthContext = pItem->zName;
+
     /* Generate code to implement the subquery
     **
-    ** The subquery is implemented as a co-routine if all of these are true:
-    **   (1)  The subquery is guaranteed to be the outer loop (so that it
-    **        does not need to be computed more than once)
-    **   (2)  The ALL keyword after SELECT is omitted.  (Applications are
-    **        allowed to say "SELECT ALL" instead of just "SELECT" to disable
-    **        the use of co-routines.)
-    **   (3)  Co-routines are not disabled using sqlite3_test_control()
-    **        with SQLITE_TESTCTRL_OPTIMIZATIONS.
+    ** The subquery is implemented as a co-routine if the subquery is
+    ** guaranteed to be the outer loop (so that it does not need to be
+    ** computed more than once)
     **
     ** TODO: Are there other reasons beside (1) to use a co-routine
     ** implementation?
@@ -122978,13 +123296,12 @@ SQLITE_PRIVATE int sqlite3Select(
     if( i==0
      && (pTabList->nSrc==1
             || (pTabList->a[1].fg.jointype&(JT_LEFT|JT_CROSS))!=0)  /* (1) */
-     && (p->selFlags & SF_All)==0                                   /* (2) */
-     && OptimizationEnabled(db, SQLITE_SubqCoroutine)               /* (3) */
     ){
       /* Implement a co-routine that will return a single row of the result
       ** set on each invocation.
       */
       int addrTop = sqlite3VdbeCurrentAddr(v)+1;
+     
       pItem->regReturn = ++pParse->nMem;
       sqlite3VdbeAddOp3(v, OP_InitCoroutine, pItem->regReturn, 0, addrTop);
       VdbeComment((v, "%s", pItem->pTab->zName));
@@ -123042,6 +123359,7 @@ SQLITE_PRIVATE int sqlite3Select(
     }
     if( db->mallocFailed ) goto select_end;
     pParse->nHeight -= sqlite3SelectExprHeight(p);
+    pParse->zAuthContext = zSavedAuthContext;
 #endif
   }
 
@@ -123189,7 +123507,8 @@ SQLITE_PRIVATE int sqlite3Select(
     }
 
     /* Use the standard inner loop. */
-    selectInnerLoop(pParse, p, pEList, -1, &sSort, &sDistinct, pDest,
+    assert( p->pEList==pEList );
+    selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest,
                     sqlite3WhereContinueLabel(pWInfo),
                     sqlite3WhereBreakLabel(pWInfo));
 
@@ -123492,7 +123811,7 @@ SQLITE_PRIVATE int sqlite3Select(
       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
       finalizeAggFunctions(pParse, &sAggInfo);
       sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL);
-      selectInnerLoop(pParse, p, p->pEList, -1, &sSort,
+      selectInnerLoop(pParse, p, -1, &sSort,
                       &sDistinct, pDest,
                       addrOutputRow+1, addrSetAbort);
       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
@@ -123636,7 +123955,7 @@ SQLITE_PRIVATE int sqlite3Select(
 
       sSort.pOrderBy = 0;
       sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL);
-      selectInnerLoop(pParse, p, p->pEList, -1, 0, 0, 
+      selectInnerLoop(pParse, p, -1, 0, 0, 
                       pDest, addrEnd, addrEnd);
       sqlite3ExprListDelete(db, pDel);
     }
@@ -124470,7 +124789,7 @@ SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const ch
       *pp = (*pp)->pNext;
     }
     sqlite3DeleteTrigger(db, pTrigger);
-    db->flags |= SQLITE_InternChanges;
+    db->mDbFlags |= DBFLAG_SchemaChange;
   }
 }
 
@@ -125791,12 +126110,6 @@ static void updateVirtualTable(
   if( pWInfo==0 ) return;
 
   /* Populate the argument registers. */
-  sqlite3VdbeAddOp2(v, OP_Rowid, iCsr, regArg);
-  if( pRowid ){
-    sqlite3ExprCode(pParse, pRowid, regArg+1);
-  }else{
-    sqlite3VdbeAddOp2(v, OP_Rowid, iCsr, regArg+1);
-  }
   for(i=0; i<pTab->nCol; i++){
     if( aXRef[i]>=0 ){
       sqlite3ExprCode(pParse, pChanges->a[aXRef[i]].pExpr, regArg+2+i);
@@ -125804,6 +126117,23 @@ static void updateVirtualTable(
       sqlite3VdbeAddOp3(v, OP_VColumn, iCsr, i, regArg+2+i);
     }
   }
+  if( HasRowid(pTab) ){
+    sqlite3VdbeAddOp2(v, OP_Rowid, iCsr, regArg);
+    if( pRowid ){
+      sqlite3ExprCode(pParse, pRowid, regArg+1);
+    }else{
+      sqlite3VdbeAddOp2(v, OP_Rowid, iCsr, regArg+1);
+    }
+  }else{
+    Index *pPk;   /* PRIMARY KEY index */
+    i16 iPk;      /* PRIMARY KEY column */
+    pPk = sqlite3PrimaryKeyIndex(pTab);
+    assert( pPk!=0 );
+    assert( pPk->nKeyCol==1 );
+    iPk = pPk->aiColumn[0];
+    sqlite3VdbeAddOp3(v, OP_VColumn, iCsr, iPk, regArg);
+    sqlite3VdbeAddOp2(v, OP_SCopy, regArg+2+iPk, regArg+1);
+  }
 
   bOnePass = sqlite3WhereOkOnePass(pWInfo, aDummy);
 
@@ -125988,7 +126318,8 @@ SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){
   int rc = SQLITE_OK;     /* Return code from service routines */
   Btree *pMain;           /* The database being vacuumed */
   Btree *pTemp;           /* The temporary database we vacuum into */
-  int saved_flags;        /* Saved value of the db->flags */
+  u16 saved_mDbFlags;     /* Saved value of db->mDbFlags */
+  u32 saved_flags;        /* Saved value of db->flags */
   u64 saved_nChange;      /* Saved value of db->nChange */
   u64 saved_nTotalChange; /* Saved value of db->nTotalChange */
   u8 saved_mTrace;        /* Saved trace settings */
@@ -126011,11 +126342,12 @@ SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){
   ** restored before returning. Then set the writable-schema flag, and
   ** disable CHECK and foreign key constraints.  */
   saved_flags = db->flags;
+  saved_mDbFlags = db->mDbFlags;
   saved_nChange = db->nChange;
   saved_nTotalChange = db->nTotalChange;
   saved_mTrace = db->mTrace;
-  db->flags |= (SQLITE_WriteSchema | SQLITE_IgnoreChecks
-                 | SQLITE_PreferBuiltin | SQLITE_Vacuum);
+  db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks;
+  db->mDbFlags |= DBFLAG_PreferBuiltin | DBFLAG_Vacuum;
   db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder | SQLITE_CountRows);
   db->mTrace = 0;
 
@@ -126126,8 +126458,8 @@ SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){
       "WHERE type='table'AND coalesce(rootpage,1)>0",
       zDbMain
   );
-  assert( (db->flags & SQLITE_Vacuum)!=0 );
-  db->flags &= ~SQLITE_Vacuum;
+  assert( (db->mDbFlags & DBFLAG_Vacuum)!=0 );
+  db->mDbFlags &= ~DBFLAG_Vacuum;
   if( rc!=SQLITE_OK ) goto end_of_vacuum;
 
   /* Copy the triggers, views, and virtual tables from the main database
@@ -126195,6 +126527,7 @@ SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){
 end_of_vacuum:
   /* Restore the original value of db->flags */
   db->init.iDb = 0;
+  db->mDbFlags = saved_mDbFlags;
   db->flags = saved_flags;
   db->nChange = saved_nChange;
   db->nTotalChange = saved_nTotalChange;
@@ -126271,8 +126604,10 @@ SQLITE_PRIVATE Module *sqlite3VtabCreateModule(
 ){
   Module *pMod;
   int nName = sqlite3Strlen30(zName);
-  pMod = (Module *)sqlite3DbMallocRawNN(db, sizeof(Module) + nName + 1);
-  if( pMod ){
+  pMod = (Module *)sqlite3Malloc(sizeof(Module) + nName + 1);
+  if( pMod==0 ){
+    sqlite3OomFault(db);
+  }else{
     Module *pDel;
     char *zCopy = (char *)(&pMod[1]);
     memcpy(zCopy, zName, nName+1);
@@ -126748,13 +127083,14 @@ static int vtabCallConstructor(
     }
   }
 
-  zModuleName = sqlite3MPrintf(db, "%s", pTab->zName);
+  zModuleName = sqlite3DbStrDup(db, pTab->zName);
   if( !zModuleName ){
     return SQLITE_NOMEM_BKPT;
   }
 
-  pVTable = sqlite3DbMallocZero(db, sizeof(VTable));
+  pVTable = sqlite3MallocZero(sizeof(VTable));
   if( !pVTable ){
+    sqlite3OomFault(db);
     sqlite3DbFree(db, zModuleName);
     return SQLITE_NOMEM_BKPT;
   }
@@ -126874,6 +127210,7 @@ SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){
     rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xConnect, &zErr);
     if( rc!=SQLITE_OK ){
       sqlite3ErrorMsg(pParse, "%s", zErr);
+      pParse->rc = rc;
     }
     sqlite3DbFree(db, zErr);
   }
@@ -126963,10 +127300,10 @@ SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab,
 */
 SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
   VtabCtx *pCtx;
-  Parse *pParse;
   int rc = SQLITE_OK;
   Table *pTab;
   char *zErr = 0;
+  Parse sParse;
 
 #ifdef SQLITE_ENABLE_API_ARMOR
   if( !sqlite3SafetyCheckOk(db) || zCreateTable==0 ){
@@ -126983,55 +127320,55 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
   pTab = pCtx->pTab;
   assert( IsVirtual(pTab) );
 
-  pParse = sqlite3StackAllocZero(db, sizeof(*pParse));
-  if( pParse==0 ){
-    rc = SQLITE_NOMEM_BKPT;
-  }else{
-    pParse->declareVtab = 1;
-    pParse->db = db;
-    pParse->nQueryLoop = 1;
-  
-    if( SQLITE_OK==sqlite3RunParser(pParse, zCreateTable, &zErr) 
-     && pParse->pNewTable
-     && !db->mallocFailed
-     && !pParse->pNewTable->pSelect
-     && !IsVirtual(pParse->pNewTable)
-    ){
-      if( !pTab->aCol ){
-        Table *pNew = pParse->pNewTable;
-        Index *pIdx;
-        pTab->aCol = pNew->aCol;
-        pTab->nCol = pNew->nCol;
-        pTab->tabFlags |= pNew->tabFlags & (TF_WithoutRowid|TF_NoVisibleRowid);
-        pNew->nCol = 0;
-        pNew->aCol = 0;
-        assert( pTab->pIndex==0 );
-        if( !HasRowid(pNew) && pCtx->pVTable->pMod->pModule->xUpdate!=0 ){
-          rc = SQLITE_ERROR;
-        }
-        pIdx = pNew->pIndex;
-        if( pIdx ){
-          assert( pIdx->pNext==0 );
-          pTab->pIndex = pIdx;
-          pNew->pIndex = 0;
-          pIdx->pTable = pTab;
-        }
+  memset(&sParse, 0, sizeof(sParse));
+  sParse.declareVtab = 1;
+  sParse.db = db;
+  sParse.nQueryLoop = 1;
+  if( SQLITE_OK==sqlite3RunParser(&sParse, zCreateTable, &zErr) 
+   && sParse.pNewTable
+   && !db->mallocFailed
+   && !sParse.pNewTable->pSelect
+   && !IsVirtual(sParse.pNewTable)
+  ){
+    if( !pTab->aCol ){
+      Table *pNew = sParse.pNewTable;
+      Index *pIdx;
+      pTab->aCol = pNew->aCol;
+      pTab->nCol = pNew->nCol;
+      pTab->tabFlags |= pNew->tabFlags & (TF_WithoutRowid|TF_NoVisibleRowid);
+      pNew->nCol = 0;
+      pNew->aCol = 0;
+      assert( pTab->pIndex==0 );
+      assert( HasRowid(pNew) || sqlite3PrimaryKeyIndex(pNew)!=0 );
+      if( !HasRowid(pNew)
+       && pCtx->pVTable->pMod->pModule->xUpdate!=0
+       && sqlite3PrimaryKeyIndex(pNew)->nKeyCol!=1
+      ){
+        /* WITHOUT ROWID virtual tables must either be read-only (xUpdate==0)
+        ** or else must have a single-column PRIMARY KEY */
+        rc = SQLITE_ERROR;
+      }
+      pIdx = pNew->pIndex;
+      if( pIdx ){
+        assert( pIdx->pNext==0 );
+        pTab->pIndex = pIdx;
+        pNew->pIndex = 0;
+        pIdx->pTable = pTab;
       }
-      pCtx->bDeclared = 1;
-    }else{
-      sqlite3ErrorWithMsg(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr);
-      sqlite3DbFree(db, zErr);
-      rc = SQLITE_ERROR;
-    }
-    pParse->declareVtab = 0;
-  
-    if( pParse->pVdbe ){
-      sqlite3VdbeFinalize(pParse->pVdbe);
     }
-    sqlite3DeleteTable(db, pParse->pNewTable);
-    sqlite3ParserReset(pParse);
-    sqlite3StackFree(db, pParse);
+    pCtx->bDeclared = 1;
+  }else{
+    sqlite3ErrorWithMsg(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr);
+    sqlite3DbFree(db, zErr);
+    rc = SQLITE_ERROR;
+  }
+  sParse.declareVtab = 0;
+
+  if( sParse.pVdbe ){
+    sqlite3VdbeFinalize(sParse.pVdbe);
   }
+  sqlite3DeleteTable(db, sParse.pNewTable);
+  sqlite3ParserReset(&sParse);
 
   assert( (rc&0xff)==rc );
   rc = sqlite3ApiExit(db, rc);
@@ -128009,7 +128346,6 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, struct SrcList_item*, WhereC
 **     WO_LE    == SQLITE_INDEX_CONSTRAINT_LE
 **     WO_GT    == SQLITE_INDEX_CONSTRAINT_GT
 **     WO_GE    == SQLITE_INDEX_CONSTRAINT_GE
-**     WO_MATCH == SQLITE_INDEX_CONSTRAINT_MATCH
 */
 #define WO_IN     0x0001
 #define WO_EQ     0x0002
@@ -128017,7 +128353,7 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, struct SrcList_item*, WhereC
 #define WO_LE     (WO_EQ<<(TK_LE-TK_EQ))
 #define WO_GT     (WO_EQ<<(TK_GT-TK_EQ))
 #define WO_GE     (WO_EQ<<(TK_GE-TK_EQ))
-#define WO_MATCH  0x0040
+#define WO_AUX    0x0040       /* Op useful to virtual tables only */
 #define WO_IS     0x0080
 #define WO_ISNULL 0x0100
 #define WO_OR     0x0200       /* Two or more OR-connected terms */
@@ -128830,7 +129166,7 @@ static int codeCursorHintIsOrFunction(Walker *pWalker, Expr *pExpr){
     pWalker->eCode = 1;
   }else if( pExpr->op==TK_FUNCTION ){
     int d1;
-    char d2[3];
+    char d2[4];
     if( 0==sqlite3IsLikeFunction(pWalker->pParse->db, pExpr, &d1, d2) ){
       pWalker->eCode = 1;
     }
@@ -129053,7 +129389,7 @@ static void codeDeferredSeek(
 */
 static void codeExprOrVector(Parse *pParse, Expr *p, int iReg, int nReg){
   assert( nReg>0 );
-  if( sqlite3ExprIsVector(p) ){
+  if( p && sqlite3ExprIsVector(p) ){
 #ifndef SQLITE_OMIT_SUBQUERY
     if( (p->flags & EP_xIsSelect) ){
       Vdbe *v = pParse->pVdbe;
@@ -129106,9 +129442,9 @@ static int whereIndexExprTransNode(Walker *p, Expr *pExpr){
 }
 
 /*
-** For an indexes on expression X, locate every instance of expression X in pExpr
-** and change that subexpression into a reference to the appropriate column of
-** the index.
+** For an indexes on expression X, locate every instance of expression X
+** in pExpr and change that subexpression into a reference to the appropriate
+** column of the index.
 */
 static void whereIndexExprTrans(
   Index *pIdx,      /* The Index */
@@ -130385,12 +130721,12 @@ static int isLikeOrGlob(
   int *pisComplete, /* True if the only wildcard is % in the last character */
   int *pnoCase      /* True if uppercase is equivalent to lowercase */
 ){
-  const char *z = 0;         /* String on RHS of LIKE operator */
+  const u8 *z = 0;         /* String on RHS of LIKE operator */
   Expr *pRight, *pLeft;      /* Right and left size of LIKE operator */
   ExprList *pList;           /* List of operands to the LIKE operator */
   int c;                     /* One character in z[] */
   int cnt;                   /* Number of non-wildcard prefix characters */
-  char wc[3];                /* Wildcard characters */
+  char wc[4];                /* Wildcard characters */
   sqlite3 *db = pParse->db;  /* Database connection */
   sqlite3_value *pVal = 0;
   int op;                    /* Opcode of pRight */
@@ -130412,12 +130748,12 @@ static int isLikeOrGlob(
     int iCol = pRight->iColumn;
     pVal = sqlite3VdbeGetBoundValue(pReprepare, iCol, SQLITE_AFF_BLOB);
     if( pVal && sqlite3_value_type(pVal)==SQLITE_TEXT ){
-      z = (char *)sqlite3_value_text(pVal);
+      z = sqlite3_value_text(pVal);
     }
     sqlite3VdbeSetVarmask(pParse->pVdbe, iCol);
     assert( pRight->op==TK_VARIABLE || pRight->op==TK_REGISTER );
   }else if( op==TK_STRING ){
-    z = pRight->u.zToken;
+    z = (u8*)pRight->u.zToken;
   }
   if( z ){
 
@@ -130437,16 +130773,42 @@ static int isLikeOrGlob(
         return 0;
       }
     }
+
+    /* Count the number of prefix characters prior to the first wildcard */
     cnt = 0;
     while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){
       cnt++;
+      if( c==wc[3] && z[cnt]!=0 ) cnt++;
     }
+
+    /* The optimization is possible only if (1) the pattern does not begin
+    ** with a wildcard and if (2) the non-wildcard prefix does not end with
+    ** an (illegal 0xff) character.  The second condition is necessary so
+    ** that we can increment the prefix key to find an upper bound for the
+    ** range search. 
+    */
     if( cnt!=0 && 255!=(u8)z[cnt-1] ){
       Expr *pPrefix;
+
+      /* A "complete" match if the pattern ends with "*" or "%" */
       *pisComplete = c==wc[0] && z[cnt+1]==0;
-      pPrefix = sqlite3Expr(db, TK_STRING, z);
-      if( pPrefix ) pPrefix->u.zToken[cnt] = 0;
+
+      /* Get the pattern prefix.  Remove all escapes from the prefix. */
+      pPrefix = sqlite3Expr(db, TK_STRING, (char*)z);
+      if( pPrefix ){
+        int iFrom, iTo;
+        char *zNew = pPrefix->u.zToken;
+        zNew[cnt] = 0;
+        for(iFrom=iTo=0; iFrom<cnt; iFrom++){
+          if( zNew[iFrom]==wc[3] ) iFrom++;
+          zNew[iTo++] = zNew[iFrom];
+        }
+        zNew[iTo] = 0;
+      }
       *ppPrefix = pPrefix;
+
+      /* If the RHS pattern is a bound parameter, make arrangements to
+      ** reprepare the statement when that parameter is rebound */
       if( op==TK_VARIABLE ){
         Vdbe *v = pParse->pVdbe;
         sqlite3VdbeSetVarmask(v, pRight->iColumn);
@@ -130477,48 +130839,84 @@ static int isLikeOrGlob(
 
 #ifndef SQLITE_OMIT_VIRTUALTABLE
 /*
-** Check to see if the given expression is of the form
-**
-**         column OP expr
-**
-** where OP is one of MATCH, GLOB, LIKE or REGEXP and "column" is a 
-** column of a virtual table.
-**
-** If it is then return TRUE.  If not, return FALSE.
-*/
-static int isMatchOfColumn(
+** Check to see if the pExpr expression is a form that needs to be passed
+** to the xBestIndex method of virtual tables.  Forms of interest include:
+**
+**          Expression                   Virtual Table Operator
+**          -----------------------      ---------------------------------
+**      1.  column MATCH expr            SQLITE_INDEX_CONSTRAINT_MATCH
+**      2.  column GLOB expr             SQLITE_INDEX_CONSTRAINT_GLOB
+**      3.  column LIKE expr             SQLITE_INDEX_CONSTRAINT_LIKE
+**      4.  column REGEXP expr           SQLITE_INDEX_CONSTRAINT_REGEXP
+**      5.  column != expr               SQLITE_INDEX_CONSTRAINT_NE
+**      6.  expr != column               SQLITE_INDEX_CONSTRAINT_NE
+**      7.  column IS NOT expr           SQLITE_INDEX_CONSTRAINT_ISNOT
+**      8.  expr IS NOT column           SQLITE_INDEX_CONSTRAINT_ISNOT
+**      9.  column IS NOT NULL           SQLITE_INDEX_CONSTRAINT_ISNOTNULL
+**
+** In every case, "column" must be a column of a virtual table.  If there
+** is a match, set *ppLeft to the "column" expression, set *ppRight to the 
+** "expr" expression (even though in forms (6) and (8) the column is on the
+** right and the expression is on the left).  Also set *peOp2 to the
+** appropriate virtual table operator.  The return value is 1 or 2 if there
+** is a match.  The usual return is 1, but if the RHS is also a column
+** of virtual table in forms (5) or (7) then return 2.
+**
+** If the expression matches none of the patterns above, return 0.
+*/
+static int isAuxiliaryVtabOperator(
   Expr *pExpr,                    /* Test this expression */
-  unsigned char *peOp2            /* OUT: 0 for MATCH, or else an op2 value */
-){
-  static const struct Op2 {
-    const char *zOp;
-    unsigned char eOp2;
-  } aOp[] = {
-    { "match",  SQLITE_INDEX_CONSTRAINT_MATCH },
-    { "glob",   SQLITE_INDEX_CONSTRAINT_GLOB },
-    { "like",   SQLITE_INDEX_CONSTRAINT_LIKE },
-    { "regexp", SQLITE_INDEX_CONSTRAINT_REGEXP }
-  };
-  ExprList *pList;
-  Expr *pCol;                     /* Column reference */
-  int i;
+  unsigned char *peOp2,           /* OUT: 0 for MATCH, or else an op2 value */
+  Expr **ppLeft,                  /* Column expression to left of MATCH/op2 */
+  Expr **ppRight                  /* Expression to left of MATCH/op2 */
+){
+  if( pExpr->op==TK_FUNCTION ){
+    static const struct Op2 {
+      const char *zOp;
+      unsigned char eOp2;
+    } aOp[] = {
+      { "match",  SQLITE_INDEX_CONSTRAINT_MATCH },
+      { "glob",   SQLITE_INDEX_CONSTRAINT_GLOB },
+      { "like",   SQLITE_INDEX_CONSTRAINT_LIKE },
+      { "regexp", SQLITE_INDEX_CONSTRAINT_REGEXP }
+    };
+    ExprList *pList;
+    Expr *pCol;                     /* Column reference */
+    int i;
 
-  if( pExpr->op!=TK_FUNCTION ){
-    return 0;
-  }
-  pList = pExpr->x.pList;
-  if( pList==0 || pList->nExpr!=2 ){
-    return 0;
-  }
-  pCol = pList->a[1].pExpr;
-  if( pCol->op!=TK_COLUMN || !IsVirtual(pCol->pTab) ){
-    return 0;
-  }
-  for(i=0; i<ArraySize(aOp); i++){
-    if( sqlite3StrICmp(pExpr->u.zToken, aOp[i].zOp)==0 ){
-      *peOp2 = aOp[i].eOp2;
-      return 1;
+    pList = pExpr->x.pList;
+    if( pList==0 || pList->nExpr!=2 ){
+      return 0;
+    }
+    pCol = pList->a[1].pExpr;
+    if( pCol->op!=TK_COLUMN || !IsVirtual(pCol->pTab) ){
+      return 0;
     }
+    for(i=0; i<ArraySize(aOp); i++){
+      if( sqlite3StrICmp(pExpr->u.zToken, aOp[i].zOp)==0 ){
+        *peOp2 = aOp[i].eOp2;
+        *ppRight = pList->a[0].pExpr;
+        *ppLeft = pCol;
+        return 1;
+      }
+    }
+  }else if( pExpr->op==TK_NE || pExpr->op==TK_ISNOT || pExpr->op==TK_NOTNULL ){
+    int res = 0;
+    Expr *pLeft = pExpr->pLeft;
+    Expr *pRight = pExpr->pRight;
+    if( pLeft->op==TK_COLUMN && IsVirtual(pLeft->pTab) ){
+      res++;
+    }
+    if( pRight && pRight->op==TK_COLUMN && IsVirtual(pRight->pTab) ){
+      res++;
+      SWAP(Expr*, pLeft, pRight);
+    }
+    *ppLeft = pLeft;
+    *ppRight = pRight;
+    if( pExpr->op==TK_NE ) *peOp2 = SQLITE_INDEX_CONSTRAINT_NE;
+    if( pExpr->op==TK_ISNOT ) *peOp2 = SQLITE_INDEX_CONSTRAINT_ISNOT;
+    if( pExpr->op==TK_NOTNULL ) *peOp2 = SQLITE_INDEX_CONSTRAINT_ISNOTNULL;
+    return res;
   }
   return 0;
 }
@@ -130769,7 +131167,7 @@ static void exprAnalyzeOrTerm(
           for(j=0, pAndTerm=pAndWC->a; j<pAndWC->nTerm; j++, pAndTerm++){
             assert( pAndTerm->pExpr );
             if( allowedOp(pAndTerm->pExpr->op) 
-             || pAndTerm->eOperator==WO_MATCH 
+             || pAndTerm->eOperator==WO_AUX
             ){
               b |= sqlite3WhereGetMask(&pWInfo->sMaskSet, pAndTerm->leftCursor);
             }
@@ -130971,7 +131369,6 @@ static void exprAnalyzeOrTerm(
 static int termIsEquivalence(Parse *pParse, Expr *pExpr){
   char aff1, aff2;
   CollSeq *pColl;
-  const char *zColl1, *zColl2;
   if( !OptimizationEnabled(pParse->db, SQLITE_Transitive) ) return 0;
   if( pExpr->op!=TK_EQ && pExpr->op!=TK_IS ) return 0;
   if( ExprHasProperty(pExpr, EP_FromJoin) ) return 0;
@@ -130984,11 +131381,7 @@ static int termIsEquivalence(Parse *pParse, Expr *pExpr){
   }
   pColl = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, pExpr->pRight);
   if( pColl==0 || sqlite3StrICmp(pColl->zName, "BINARY")==0 ) return 1;
-  pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
-  zColl1 = pColl ? pColl->zName : 0;
-  pColl = sqlite3ExprCollSeq(pParse, pExpr->pRight);
-  zColl2 = pColl ? pColl->zName : 0;
-  return sqlite3_stricmp(zColl1, zColl2)==0;
+  return sqlite3ExprCollSeqMatch(pParse, pExpr->pLeft, pExpr->pRight);
 }
 
 /*
@@ -131351,41 +131744,46 @@ static void exprAnalyze(
 #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
 
 #ifndef SQLITE_OMIT_VIRTUALTABLE
-  /* Add a WO_MATCH auxiliary term to the constraint set if the
-  ** current expression is of the form:  column MATCH expr.
+  /* Add a WO_AUX auxiliary term to the constraint set if the
+  ** current expression is of the form "column OP expr" where OP
+  ** is an operator that gets passed into virtual tables but which is
+  ** not normally optimized for ordinary tables.  In other words, OP
+  ** is one of MATCH, LIKE, GLOB, REGEXP, !=, IS, IS NOT, or NOT NULL.
   ** This information is used by the xBestIndex methods of
   ** virtual tables.  The native query optimizer does not attempt
   ** to do anything with MATCH functions.
   */
-  if( pWC->op==TK_AND && isMatchOfColumn(pExpr, &eOp2) ){
-    int idxNew;
+  if( pWC->op==TK_AND ){
     Expr *pRight, *pLeft;
-    WhereTerm *pNewTerm;
-    Bitmask prereqColumn, prereqExpr;
-
-    pRight = pExpr->x.pList->a[0].pExpr;
-    pLeft = pExpr->x.pList->a[1].pExpr;
-    prereqExpr = sqlite3WhereExprUsage(pMaskSet, pRight);
-    prereqColumn = sqlite3WhereExprUsage(pMaskSet, pLeft);
-    if( (prereqExpr & prereqColumn)==0 ){
-      Expr *pNewExpr;
-      pNewExpr = sqlite3PExpr(pParse, TK_MATCH, 
-                              0, sqlite3ExprDup(db, pRight, 0));
-      if( ExprHasProperty(pExpr, EP_FromJoin) && pNewExpr ){
-        ExprSetProperty(pNewExpr, EP_FromJoin);
+    int res = isAuxiliaryVtabOperator(pExpr, &eOp2, &pLeft, &pRight);
+    while( res-- > 0 ){
+      int idxNew;
+      WhereTerm *pNewTerm;
+      Bitmask prereqColumn, prereqExpr;
+
+      prereqExpr = sqlite3WhereExprUsage(pMaskSet, pRight);
+      prereqColumn = sqlite3WhereExprUsage(pMaskSet, pLeft);
+      if( (prereqExpr & prereqColumn)==0 ){
+        Expr *pNewExpr;
+        pNewExpr = sqlite3PExpr(pParse, TK_MATCH, 
+            0, sqlite3ExprDup(db, pRight, 0));
+        if( ExprHasProperty(pExpr, EP_FromJoin) && pNewExpr ){
+          ExprSetProperty(pNewExpr, EP_FromJoin);
+        }
+        idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
+        testcase( idxNew==0 );
+        pNewTerm = &pWC->a[idxNew];
+        pNewTerm->prereqRight = prereqExpr;
+        pNewTerm->leftCursor = pLeft->iTable;
+        pNewTerm->u.leftColumn = pLeft->iColumn;
+        pNewTerm->eOperator = WO_AUX;
+        pNewTerm->eMatchOp = eOp2;
+        markTermAsChild(pWC, idxNew, idxTerm);
+        pTerm = &pWC->a[idxTerm];
+        pTerm->wtFlags |= TERM_COPIED;
+        pNewTerm->prereqAll = pTerm->prereqAll;
       }
-      idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
-      testcase( idxNew==0 );
-      pNewTerm = &pWC->a[idxNew];
-      pNewTerm->prereqRight = prereqExpr;
-      pNewTerm->leftCursor = pLeft->iTable;
-      pNewTerm->u.leftColumn = pLeft->iColumn;
-      pNewTerm->eOperator = WO_MATCH;
-      pNewTerm->eMatchOp = eOp2;
-      markTermAsChild(pWC, idxNew, idxTerm);
-      pTerm = &pWC->a[idxTerm];
-      pTerm->wtFlags |= TERM_COPIED;
-      pNewTerm->prereqAll = pTerm->prereqAll;
+      SWAP(Expr*, pLeft, pRight);
     }
   }
 #endif /* SQLITE_OMIT_VIRTUALTABLE */
@@ -132064,8 +132462,8 @@ static int findIndexCol(
      && p->iColumn==pIdx->aiColumn[iCol]
      && p->iTable==iBase
     ){
-      CollSeq *pColl = sqlite3ExprCollSeq(pParse, pList->a[i].pExpr);
-      if( pColl && 0==sqlite3StrICmp(pColl->zName, zColl) ){
+      CollSeq *pColl = sqlite3ExprNNCollSeq(pParse, pList->a[i].pExpr);
+      if( 0==sqlite3StrICmp(pColl->zName, zColl) ){
         return i;
       }
     }
@@ -132529,7 +132927,7 @@ static sqlite3_index_info *allocateIndexInfo(
     testcase( pTerm->eOperator & WO_ISNULL );
     testcase( pTerm->eOperator & WO_IS );
     testcase( pTerm->eOperator & WO_ALL );
-    if( (pTerm->eOperator & ~(WO_ISNULL|WO_EQUIV|WO_IS))==0 ) continue;
+    if( (pTerm->eOperator & ~(WO_EQUIV))==0 ) continue;
     if( pTerm->wtFlags & TERM_VNULL ) continue;
     assert( pTerm->u.leftColumn>=(-1) );
     nTerm++;
@@ -132577,7 +132975,7 @@ static sqlite3_index_info *allocateIndexInfo(
                                                                    pUsage;
 
   for(i=j=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
-    u8 op;
+    u16 op;
     if( pTerm->leftCursor != pSrc->iCursor ) continue;
     if( pTerm->prereqRight & mUnusable ) continue;
     assert( IsPowerOfTwo(pTerm->eOperator & ~WO_EQUIV) );
@@ -132585,34 +132983,40 @@ static sqlite3_index_info *allocateIndexInfo(
     testcase( pTerm->eOperator & WO_IS );
     testcase( pTerm->eOperator & WO_ISNULL );
     testcase( pTerm->eOperator & WO_ALL );
-    if( (pTerm->eOperator & ~(WO_ISNULL|WO_EQUIV|WO_IS))==0 ) continue;
+    if( (pTerm->eOperator & ~(WO_EQUIV))==0 ) continue;
     if( pTerm->wtFlags & TERM_VNULL ) continue;
     assert( pTerm->u.leftColumn>=(-1) );
     pIdxCons[j].iColumn = pTerm->u.leftColumn;
     pIdxCons[j].iTermOffset = i;
-    op = (u8)pTerm->eOperator & WO_ALL;
+    op = pTerm->eOperator & WO_ALL;
     if( op==WO_IN ) op = WO_EQ;
-    if( op==WO_MATCH ){
-      op = pTerm->eMatchOp;
-    }
-    pIdxCons[j].op = op;
-    /* The direct assignment in the previous line is possible only because
-    ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical.  The
-    ** following asserts verify this fact. */
-    assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ );
-    assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT );
-    assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE );
-    assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT );
-    assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE );
-    assert( WO_MATCH==SQLITE_INDEX_CONSTRAINT_MATCH );
-    assert( pTerm->eOperator & (WO_IN|WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_MATCH) );
-
-    if( op & (WO_LT|WO_LE|WO_GT|WO_GE)
-     && sqlite3ExprIsVector(pTerm->pExpr->pRight) 
-    ){
-      if( i<16 ) mNoOmit |= (1 << i);
-      if( op==WO_LT ) pIdxCons[j].op = WO_LE;
-      if( op==WO_GT ) pIdxCons[j].op = WO_GE;
+    if( op==WO_AUX ){
+      pIdxCons[j].op = pTerm->eMatchOp;
+    }else if( op & (WO_ISNULL|WO_IS) ){
+      if( op==WO_ISNULL ){
+        pIdxCons[j].op = SQLITE_INDEX_CONSTRAINT_ISNULL;
+      }else{
+        pIdxCons[j].op = SQLITE_INDEX_CONSTRAINT_IS;
+      }
+    }else{
+      pIdxCons[j].op = (u8)op;
+      /* The direct assignment in the previous line is possible only because
+      ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical.  The
+      ** following asserts verify this fact. */
+      assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ );
+      assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT );
+      assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE );
+      assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT );
+      assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE );
+      assert( pTerm->eOperator&(WO_IN|WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_AUX) );
+
+      if( op & (WO_LT|WO_LE|WO_GT|WO_GE)
+       && sqlite3ExprIsVector(pTerm->pExpr->pRight) 
+      ){
+        if( i<16 ) mNoOmit |= (1 << i);
+        if( op==WO_LT ) pIdxCons[j].op = WO_LE;
+        if( op==WO_GT ) pIdxCons[j].op = WO_GE;
+      }
     }
 
     j++;
@@ -133540,18 +133944,19 @@ static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){
 ** Return TRUE if all of the following are true:
 **
 **   (1)  X has the same or lower cost that Y
-**   (2)  X is a proper subset of Y
-**   (3)  X skips at least as many columns as Y
-**
-** By "proper subset" we mean that X uses fewer WHERE clause terms
-** than Y and that every WHERE clause term used by X is also used
-** by Y.
+**   (2)  X uses fewer WHERE clause terms than Y
+**   (3)  Every WHERE clause term used by X is also used by Y
+**   (4)  X skips at least as many columns as Y
+**   (5)  If X is a covering index, than Y is too
 **
+** Conditions (2) and (3) mean that X is a "proper subset" of Y.
 ** If X is a proper subset of Y then Y is a better choice and ought
 ** to have a lower cost.  This routine returns TRUE when that cost 
-** relationship is inverted and needs to be adjusted.  The third rule
+** relationship is inverted and needs to be adjusted.  Constraint (4)
 ** was added because if X uses skip-scan less than Y it still might
-** deserve a lower cost even if it is a proper subset of Y.
+** deserve a lower cost even if it is a proper subset of Y.  Constraint (5)
+** was added because a covering index probably deserves to have a lower cost
+** than a non-covering index even if it is a proper subset.
 */
 static int whereLoopCheaperProperSubset(
   const WhereLoop *pX,       /* First WhereLoop to compare */
@@ -133573,6 +133978,10 @@ static int whereLoopCheaperProperSubset(
     }
     if( j<0 ) return 0;  /* X not a subset of Y since term X[i] not used by Y */
   }
+  if( (pX->wsFlags&WHERE_IDX_ONLY)!=0 
+   && (pY->wsFlags&WHERE_IDX_ONLY)==0 ){
+    return 0;  /* Constraint (5) */
+  }
   return 1;  /* All conditions meet */
 }
 
@@ -134324,7 +134733,7 @@ static int indexMightHelpWithOrderBy(
     }else if( (aColExpr = pIndex->aColExpr)!=0 ){
       for(jj=0; jj<pIndex->nKeyCol; jj++){
         if( pIndex->aiColumn[jj]!=XN_EXPR ) continue;
-        if( sqlite3ExprCompare(0, pExpr,aColExpr->a[jj].pExpr,iCursor)==0 ){
+        if( sqlite3ExprCompareSkip(pExpr,aColExpr->a[jj].pExpr,iCursor)==0 ){
           return 1;
         }
       }
@@ -135234,14 +135643,10 @@ static i8 wherePathSatisfiesOrderBy(
         if( j>=pLoop->nLTerm ) continue;
       }
       if( (pTerm->eOperator&(WO_EQ|WO_IS))!=0 && pOBExpr->iColumn>=0 ){
-        const char *z1, *z2;
-        pColl = sqlite3ExprCollSeq(pWInfo->pParse, pOrderBy->a[i].pExpr);
-        if( !pColl ) pColl = db->pDfltColl;
-        z1 = pColl->zName;
-        pColl = sqlite3ExprCollSeq(pWInfo->pParse, pTerm->pExpr);
-        if( !pColl ) pColl = db->pDfltColl;
-        z2 = pColl->zName;
-        if( sqlite3StrICmp(z1, z2)!=0 ) continue;
+        if( sqlite3ExprCollSeqMatch(pWInfo->pParse, 
+                  pOrderBy->a[i].pExpr, pTerm->pExpr)==0 ){
+          continue;
+        }
         testcase( pTerm->pExpr->op==TK_IS );
       }
       obSat |= MASKBIT(i);
@@ -135313,7 +135718,7 @@ static i8 wherePathSatisfiesOrderBy(
         if( pIndex ){
           iColumn = pIndex->aiColumn[j];
           revIdx = pIndex->aSortOrder[j];
-          if( iColumn==pIndex->pTable->iPKey ) iColumn = -1;
+          if( iColumn==pIndex->pTable->iPKey ) iColumn = XN_ROWID;
         }else{
           iColumn = XN_ROWID;
           revIdx = 0;
@@ -135340,19 +135745,18 @@ static i8 wherePathSatisfiesOrderBy(
           testcase( wctrlFlags & WHERE_GROUPBY );
           testcase( wctrlFlags & WHERE_DISTINCTBY );
           if( (wctrlFlags & (WHERE_GROUPBY|WHERE_DISTINCTBY))==0 ) bOnce = 0;
-          if( iColumn>=(-1) ){
+          if( iColumn>=XN_ROWID ){
             if( pOBExpr->op!=TK_COLUMN ) continue;
             if( pOBExpr->iTable!=iCur ) continue;
             if( pOBExpr->iColumn!=iColumn ) continue;
           }else{
-            if( sqlite3ExprCompare(0,
-                  pOBExpr,pIndex->aColExpr->a[j].pExpr,iCur) ){
+            Expr *pIdxExpr = pIndex->aColExpr->a[j].pExpr;
+            if( sqlite3ExprCompareSkip(pOBExpr, pIdxExpr, iCur) ){
               continue;
             }
           }
-          if( iColumn>=0 ){
-            pColl = sqlite3ExprCollSeq(pWInfo->pParse, pOrderBy->a[i].pExpr);
-            if( !pColl ) pColl = db->pDfltColl;
+          if( iColumn!=XN_ROWID ){
+            pColl = sqlite3ExprNNCollSeq(pWInfo->pParse, pOrderBy->a[i].pExpr);
             if( sqlite3StrICmp(pColl->zName, pIndex->azColl[j])!=0 ) continue;
           }
           pLoop->u.btree.nIdxCol = j+1;
@@ -135989,6 +136393,7 @@ static int exprIsDeterministic(Expr *p){
   memset(&w, 0, sizeof(w));
   w.eCode = 1;
   w.xExprCallback = exprNodeIsDeterministic;
+  w.xSelectCallback = sqlite3SelectWalkFail;
   sqlite3WalkExpr(&w, p);
   return w.eCode;
 }
@@ -136198,37 +136603,38 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
     if( wctrlFlags & WHERE_WANT_DISTINCT ){
       pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE;
     }
-  }
-
-  /* Assign a bit from the bitmask to every term in the FROM clause.
-  **
-  ** The N-th term of the FROM clause is assigned a bitmask of 1<<N.
-  **
-  ** The rule of the previous sentence ensures thta if X is the bitmask for
-  ** a table T, then X-1 is the bitmask for all other tables to the left of T.
-  ** Knowing the bitmask for all tables to the left of a left join is
-  ** important.  Ticket #3015.
-  **
-  ** Note that bitmasks are created for all pTabList->nSrc tables in
-  ** pTabList, not just the first nTabList tables.  nTabList is normally
-  ** equal to pTabList->nSrc but might be shortened to 1 if the
-  ** WHERE_OR_SUBCLAUSE flag is set.
-  */
-  for(ii=0; ii<pTabList->nSrc; ii++){
-    createMask(pMaskSet, pTabList->a[ii].iCursor);
-    sqlite3WhereTabFuncArgs(pParse, &pTabList->a[ii], &pWInfo->sWC);
-  }
-#ifdef SQLITE_DEBUG
-  {
-    Bitmask mx = 0;
-    for(ii=0; ii<pTabList->nSrc; ii++){
-      Bitmask m = sqlite3WhereGetMask(pMaskSet, pTabList->a[ii].iCursor);
-      assert( m>=mx );
-      mx = m;
+  }else{
+    /* Assign a bit from the bitmask to every term in the FROM clause.
+    **
+    ** The N-th term of the FROM clause is assigned a bitmask of 1<<N.
+    **
+    ** The rule of the previous sentence ensures thta if X is the bitmask for
+    ** a table T, then X-1 is the bitmask for all other tables to the left of T.
+    ** Knowing the bitmask for all tables to the left of a left join is
+    ** important.  Ticket #3015.
+    **
+    ** Note that bitmasks are created for all pTabList->nSrc tables in
+    ** pTabList, not just the first nTabList tables.  nTabList is normally
+    ** equal to pTabList->nSrc but might be shortened to 1 if the
+    ** WHERE_OR_SUBCLAUSE flag is set.
+    */
+    ii = 0;
+    do{
+      createMask(pMaskSet, pTabList->a[ii].iCursor);
+      sqlite3WhereTabFuncArgs(pParse, &pTabList->a[ii], &pWInfo->sWC);
+    }while( (++ii)<pTabList->nSrc );
+  #ifdef SQLITE_DEBUG
+    {
+      Bitmask mx = 0;
+      for(ii=0; ii<pTabList->nSrc; ii++){
+        Bitmask m = sqlite3WhereGetMask(pMaskSet, pTabList->a[ii].iCursor);
+        assert( m>=mx );
+        mx = m;
+      }
     }
+  #endif
   }
-#endif
-
+  
   /* Analyze all of the subexpressions. */
   sqlite3WhereExprAnalyze(pTabList, &pWInfo->sWC);
   if( db->mallocFailed ) goto whereBeginError;
@@ -136451,7 +136857,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
       Index *pIx = pLoop->u.btree.pIndex;
       int iIndexCur;
       int op = OP_OpenRead;
-      /* iAuxArg is always set if to a positive value if ONEPASS is possible */
+      /* iAuxArg is always set to a positive value if ONEPASS is possible */
       assert( iAuxArg!=0 || (pWInfo->wctrlFlags & WHERE_ONEPASS_DESIRED)==0 );
       if( !HasRowid(pTab) && IsPrimaryKeyIndex(pIx)
        && (wctrlFlags & WHERE_OR_SUBCLAUSE)!=0
@@ -137032,7 +137438,8 @@ static void disableLookaside(Parse *pParse){
 **    YY_MAX_SHIFT       Maximum value for shift actions
 **    YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions
 **    YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions
-**    YY_MIN_REDUCE      Maximum value for reduce actions
+**    YY_MIN_REDUCE      Minimum value for reduce actions
+**    YY_MAX_REDUCE      Maximum value for reduce actions
 **    YY_ERROR_ACTION    The yy_action[] code for syntax error
 **    YY_ACCEPT_ACTION   The yy_action[] code for accept
 **    YY_NO_ACTION       The yy_action[] code for no-op
@@ -137044,7 +137451,7 @@ static void disableLookaside(Parse *pParse){
 #define YYCODETYPE unsigned char
 #define YYNOCODE 252
 #define YYACTIONTYPE unsigned short int
-#define YYWILDCARD 69
+#define YYWILDCARD 83
 #define sqlite3ParserTOKENTYPE Token
 typedef union {
   int yyinit;
@@ -137153,413 +137560,413 @@ typedef union {
 *********** Begin parsing tables **********************************************/
 #define YY_ACTTAB_COUNT (1569)
 static const YYACTIONTYPE yy_action[] = {
- /*     0 */   328,  414,  346,  751,  751,  203,  943,  357,  973,   98,
- /*    10 */    98,   98,   98,   91,   96,   96,   96,   96,   95,   95,
- /*    20 */    94,   94,   94,   93,  354, 1327,  155,  155,    2,  812,
- /*    30 */   975,  975,   98,   98,   98,   98,   20,   96,   96,   96,
- /*    40 */    96,   95,   95,   94,   94,   94,   93,  354,   92,   89,
- /*    50 */   178,   99,  100,   90,  851,  854,  843,  843,   97,   97,
- /*    60 */    98,   98,   98,   98,  354,   96,   96,   96,   96,   95,
- /*    70 */    95,   94,   94,   94,   93,  354,  328,  343,  973,  266,
- /*    80 */   368,  253,  212,  169,  291,  408,  286,  407,  199,  790,
- /*    90 */   242,  415,   21,  954,  382,  284,   93,  354,  791,   95,
- /*   100 */    95,   94,   94,   94,   93,  354,  975,  975,   96,   96,
- /*   110 */    96,   96,   95,   95,   94,   94,   94,   93,  354,  812,
- /*   120 */   332,  242,  415, 1239,  830, 1239,  132,   99,  100,   90,
- /*   130 */   851,  854,  843,  843,   97,   97,   98,   98,   98,   98,
- /*   140 */   453,   96,   96,   96,   96,   95,   95,   94,   94,   94,
- /*   150 */    93,  354,  328,  823,  352,  351,  120,  822,  120,   75,
- /*   160 */    52,   52,  954,  955,  956, 1088,  981,  146,  364,  266,
- /*   170 */   373,  265,  954,  979,  958,  980,   92,   89,  178,  374,
- /*   180 */   230,  374,  975,  975, 1145,  364,  363,  101,  822,  822,
- /*   190 */   824,  387,   24, 1290,  384,  431,  416,  372,  982,  383,
- /*   200 */   982, 1036,  328,   99,  100,   90,  851,  854,  843,  843,
- /*   210 */    97,   97,   98,   98,   98,   98,  376,   96,   96,   96,
- /*   220 */    96,   95,   95,   94,   94,   94,   93,  354,  954,  132,
- /*   230 */   894,  453,  975,  975,  894,   60,   94,   94,   94,   93,
- /*   240 */   354,  954,  955,  956,  958,  103,  364,  954,  388,  337,
- /*   250 */   701,   52,   52,   99,  100,   90,  851,  854,  843,  843,
- /*   260 */    97,   97,   98,   98,   98,   98, 1026,   96,   96,   96,
- /*   270 */    96,   95,   95,   94,   94,   94,   93,  354,  328,  458,
- /*   280 */   999,  453,  227,   61,  157,  243,  347,  114, 1029, 1215,
- /*   290 */   147,  830,  954,  376, 1075,  954,  323,  954,  955,  956,
- /*   300 */   194,   10,   10,  405,  402,  401, 1215, 1217,  975,  975,
- /*   310 */   761,  171,  170,  157,  400,  340,  954,  955,  956,  701,
- /*   320 */   823,  314,  153,  954,  822,  324,   82,   23,   80,   99,
- /*   330 */   100,   90,  851,  854,  843,  843,   97,   97,   98,   98,
- /*   340 */    98,   98,  892,   96,   96,   96,   96,   95,   95,   94,
- /*   350 */    94,   94,   93,  354,  328,  822,  822,  824,  281,  231,
- /*   360 */   304,  954,  955,  956,  954,  955,  956, 1215,  194,   25,
- /*   370 */   453,  405,  402,  401,  954,  358,  304,  453,  954,   74,
- /*   380 */   453,    1,  400,  132,  975,  975,  954,  224,  224,  812,
- /*   390 */    10,   10,  954,  955,  956, 1294,  132,   52,   52,  418,
- /*   400 */    52,   52, 1067, 1067,  342,   99,  100,   90,  851,  854,
- /*   410 */   843,  843,   97,   97,   98,   98,   98,   98, 1118,   96,
- /*   420 */    96,   96,   96,   95,   95,   94,   94,   94,   93,  354,
- /*   430 */   328, 1117,  431,  421,  705,  431,  430, 1264, 1264,  266,
- /*   440 */   373,  265,  954,  954,  955,  956,  756,  954,  955,  956,
- /*   450 */   453,  755,  453, 1062, 1041,  954,  955,  956,  446,  710,
- /*   460 */   975,  975, 1062,  397,   92,   89,  178,  450,  450,  450,
- /*   470 */    51,   51,   52,   52,  442,  777, 1028,   92,   89,  178,
- /*   480 */   172,   99,  100,   90,  851,  854,  843,  843,   97,   97,
- /*   490 */    98,   98,   98,   98,  198,   96,   96,   96,   96,   95,
- /*   500 */    95,   94,   94,   94,   93,  354,  328,  431,  411,  913,
- /*   510 */   698,  954,  955,  956,   92,   89,  178,  224,  224,  157,
- /*   520 */   241,  221,  422,  303,  775,  914,  419,  378,  453,  418,
- /*   530 */    58,  327, 1065, 1065, 1246,  382,  975,  975,  382,  776,
- /*   540 */   452,  915,  366,  739,  300,  685,    9,    9,   52,   52,
- /*   550 */   234,  333,  234,  260,  420,  740,  284,   99,  100,   90,
- /*   560 */   851,  854,  843,  843,   97,   97,   98,   98,   98,   98,
- /*   570 */   453,   96,   96,   96,   96,   95,   95,   94,   94,   94,
- /*   580 */    93,  354,  328,  426,   72,  453,  831,  120,  371,  453,
- /*   590 */    10,   10,    5,  305,  203,  453,  177,  973,  257,  423,
- /*   600 */   259,  775,  200,  175,  233,   10,   10,  840,  840,   36,
- /*   610 */    36, 1293,  975,  975,  728,   37,   37,  352,  351,  428,
- /*   620 */   203,  264,  775,  973,  232,  934, 1320,  874,  341, 1320,
- /*   630 */   425,  852,  855,   99,  100,   90,  851,  854,  843,  843,
- /*   640 */    97,   97,   98,   98,   98,   98,  272,   96,   96,   96,
- /*   650 */    96,   95,   95,   94,   94,   94,   93,  354,  328,  844,
- /*   660 */   453,  982,  817,  982, 1204,  453,  913,  973,  719,  353,
- /*   670 */   353,  353,  932,  177,  453,  934, 1321,  258,  198, 1321,
- /*   680 */    12,   12,  914,  406,  453,   27,   27,  250,  975,  975,
- /*   690 */   118,  720,  162,  973,   38,   38,  272,  176,  915,  775,
- /*   700 */   436, 1269,  943,  357,   39,   39,  320,  995,  328,   99,
- /*   710 */   100,   90,  851,  854,  843,  843,   97,   97,   98,   98,
- /*   720 */    98,   98,  932,   96,   96,   96,   96,   95,   95,   94,
- /*   730 */    94,   94,   93,  354,  453,  333,  453,  361,  975,  975,
- /*   740 */  1045,  320,  933,  344,  897,  897,  390,  673,  674,  675,
- /*   750 */   279, 1322,  321,  996,   40,   40,   41,   41,  272,   99,
- /*   760 */   100,   90,  851,  854,  843,  843,   97,   97,   98,   98,
- /*   770 */    98,   98,  453,   96,   96,   96,   96,   95,   95,   94,
- /*   780 */    94,   94,   93,  354,  328,  453,  359,  453,  996,  453,
- /*   790 */  1020,  334,   42,   42,  790,  274,  453,  277,  453,  228,
- /*   800 */   453,  302,  453,  791,  453,   28,   28,   29,   29,   31,
- /*   810 */    31,  453, 1145,  453,  975,  975,   43,   43,   44,   44,
- /*   820 */    45,   45,   11,   11,   46,   46,  891,   78,  891,  272,
- /*   830 */   272,  105,  105,   47,   47,   99,  100,   90,  851,  854,
- /*   840 */   843,  843,   97,   97,   98,   98,   98,   98,  453,   96,
- /*   850 */    96,   96,   96,   95,   95,   94,   94,   94,   93,  354,
- /*   860 */   328,  453,  117,  453, 1077,  158,  453,  695,   48,   48,
- /*   870 */   229, 1245,  453, 1254,  453,  418,  453,  338,  453,  245,
- /*   880 */   453,   33,   33,   49,   49,  453,   50,   50,  246, 1145,
- /*   890 */   975,  975,   34,   34,  122,  122,  123,  123,  124,  124,
- /*   900 */    56,   56,  272,   81,  249,   35,   35,  197,  196,  195,
- /*   910 */   328,   99,  100,   90,  851,  854,  843,  843,   97,   97,
- /*   920 */    98,   98,   98,   98,  453,   96,   96,   96,   96,   95,
- /*   930 */    95,   94,   94,   94,   93,  354,  453,  695,  453, 1145,
- /*   940 */   975,  975,  972, 1211,  106,  106,  272, 1213,  272, 1270,
- /*   950 */     2,  890,  272,  890,  339, 1044,   53,   53,  107,  107,
- /*   960 */   328,   99,  100,   90,  851,  854,  843,  843,   97,   97,
- /*   970 */    98,   98,   98,   98,  453,   96,   96,   96,   96,   95,
- /*   980 */    95,   94,   94,   94,   93,  354,  453, 1074,  453, 1070,
- /*   990 */   975,  975, 1043,  271,  108,  108,  449,  334,  335,  133,
- /*  1000 */   223,  175,  305,  225,  389, 1259,  104,  104,  121,  121,
- /*  1010 */   328,   99,   88,   90,  851,  854,  843,  843,   97,   97,
- /*  1020 */    98,   98,   98,   98, 1145,   96,   96,   96,   96,   95,
- /*  1030 */    95,   94,   94,   94,   93,  354,  453,  350,  453,  167,
- /*  1040 */   975,  975,  929,  814,  375,  322,  202,  202,  377,  267,
- /*  1050 */   398,  202,   74,  208,  725,  726,  119,  119,  112,  112,
- /*  1060 */   328,  410,  100,   90,  851,  854,  843,  843,   97,   97,
- /*  1070 */    98,   98,   98,   98,  453,   96,   96,   96,   96,   95,
- /*  1080 */    95,   94,   94,   94,   93,  354,  453,  756,  453,  348,
- /*  1090 */   975,  975,  755,  282,  111,  111,   74,  718,  717,  708,
- /*  1100 */   290,  881,  753, 1283,  261,   77,  109,  109,  110,  110,
- /*  1110 */  1234,  289, 1138,   90,  851,  854,  843,  843,   97,   97,
- /*  1120 */    98,   98,   98,   98, 1237,   96,   96,   96,   96,   95,
- /*  1130 */    95,   94,   94,   94,   93,  354,   86,  448,  453,    3,
- /*  1140 */  1197,  453, 1073,  132,  355,  120, 1017,   86,  448,  784,
- /*  1150 */     3, 1095,  202,  380,  451,  355, 1233,  120,   55,   55,
- /*  1160 */   453,   57,   57,  826,  877,  451,  453,  208,  453,  708,
- /*  1170 */   453,  881,  237,  437,  439,  120,  443,  432,  365,  120,
- /*  1180 */    54,   54,  132,  453,  437,  830,   52,   52,   26,   26,
- /*  1190 */    30,   30,  385,  132,  412,  447,  830,  693,  268,  393,
- /*  1200 */   116,  273,  276,   32,   32,   83,   84,  120,  278,  120,
- /*  1210 */   120,  280,   85,  355,  455,  454,   83,   84,  822, 1058,
- /*  1220 */  1042,  431,  433,   85,  355,  455,  454,  120,  120,  822,
- /*  1230 */   381,  218,  285,  826, 1111, 1144,   86,  448,  413,    3,
- /*  1240 */  1091, 1102,  434,  435,  355,  306,  307, 1150, 1025,  822,
- /*  1250 */   822,  824,  825,   19,  451, 1019, 1008, 1007, 1009, 1277,
- /*  1260 */   822,  822,  824,  825,   19,  293,  159,  295,  297,    7,
- /*  1270 */   319,  173,  263,  437,  252,  367,  256, 1236,  379, 1041,
- /*  1280 */   299,  438,  168,  990,  403,  830,  288, 1208, 1207,  205,
- /*  1290 */  1280,  312, 1253,   86,  448,  987,    3, 1251,  336,  144,
- /*  1300 */   102,  355, 1133,  135,   59,   83,   84,  760,  429,  130,
- /*  1310 */   137,  451,   85,  355,  455,  454,   72,  226,  822,  251,
- /*  1320 */   156,   62,  318,  318,  317,  215,  315, 1130,  254,  682,
- /*  1330 */   437,  255,  369,  396,  139,  140,  141,  142,  370,  185,
- /*  1340 */   148, 1238,  830,  180, 1140,  248,  386,  160, 1202,  822,
- /*  1350 */   822,  824,  825,   19,  247,  189,   67, 1103,  392, 1222,
- /*  1360 */   270,  219,   83,   84,  190,  154,  394,  182,  275,   85,
- /*  1370 */   355,  455,  454,  191,  183,  822,  192,  132,  181, 1010,
- /*  1380 */   325, 1061,   76,  448, 1060,    3,  409, 1059,  345,  326,
- /*  1390 */   355,  710, 1032, 1052,  424, 1033,  287,   71, 1031, 1292,
- /*  1400 */   451, 1099,  204,  292,    6, 1051,  822,  822,  824,  825,
- /*  1410 */    19, 1100, 1098,  301,  294,  296, 1188, 1097,   79,  437,
- /*  1420 */   298,  441,  349,  239,  445,   73,  329,  427,  213,  309,
- /*  1430 */   238,  830, 1081,  308,  310,  311,   22,  240, 1016,  456,
- /*  1440 */   949,  214,  216,  217,  457, 1005, 1000,  125,  126,  115,
- /*  1450 */   235,   83,   84,  362,  669,  356,  127,  166,   85,  355,
- /*  1460 */   455,  454,  244,  330,  822,  360,  179,  889,  887,  113,
- /*  1470 */   810,  136,  128,  184,  138,  742,  134,  331,  262,  903,
- /*  1480 */   143,  129,   63,  145,   64,   65,   66,  906,  187,  186,
- /*  1490 */   902,    8,   13,  188,  269,  822,  822,  824,  825,   19,
- /*  1500 */   895,  202,  149,  984,  391,  161,  150,  684,  289,  395,
- /*  1510 */   193,  399,  404,  151,   68,   14,  236,  283,   15,   69,
- /*  1520 */    16,  131,  829,  828,  721,  857,  754,   70,  750,    4,
- /*  1530 */   417,  174,  220,  222,  783,  152,  207,  778,   77,  861,
- /*  1540 */   201,   17,   74,   18,  872,  858,  856,  912,  210,  911,
- /*  1550 */   938,  206,  163,  440,  211,  939,  164,  209,  165,  444,
- /*  1560 */   860,  827,  694,   87, 1285,  313,  316,  944, 1284,
+ /*     0 */   328, 1327,  155,  155,    2,  203,   94,   94,   94,   93,
+ /*    10 */   354,   98,   98,   98,   98,   91,   95,   95,   94,   94,
+ /*    20 */    94,   93,  354,  272,   99,  100,   90,  975,  975,  851,
+ /*    30 */   854,  843,  843,   97,   97,   98,   98,   98,   98,  354,
+ /*    40 */   973,   96,   96,   96,   96,   95,   95,   94,   94,   94,
+ /*    50 */    93,  354,  954,   96,   96,   96,   96,   95,   95,   94,
+ /*    60 */    94,   94,   93,  354,  250,   96,   96,   96,   96,   95,
+ /*    70 */    95,   94,   94,   94,   93,  354,  224,  224,  973,  132,
+ /*    80 */   892,  352,  351,  419,  172,  328, 1290,  453,  418,  954,
+ /*    90 */   955,  956,  812,  981, 1036,  954,  304,  790,  432,  132,
+ /*   100 */   979,  366,  980,    9,    9,  791,  132,   52,   52,   99,
+ /*   110 */   100,   90,  975,  975,  851,  854,  843,  843,   97,   97,
+ /*   120 */    98,   98,   98,   98,  376,  982,  241,  982,  266,  373,
+ /*   130 */   265,  120,  954,  955,  956,  194,   58,  328,  405,  402,
+ /*   140 */   401,  812,  431,  433,   75,  812, 1264, 1264,  132,  400,
+ /*   150 */    96,   96,   96,   96,   95,   95,   94,   94,   94,   93,
+ /*   160 */   354,   99,  100,   90,  975,  975,  851,  854,  843,  843,
+ /*   170 */    97,   97,   98,   98,   98,   98,  790,  266,  373,  265,
+ /*   180 */   830,  266,  368,  253,  791, 1088,  101, 1118,   72,  328,
+ /*   190 */   227, 1117,  242,  415,  446,  823,   92,   89,  178,  822,
+ /*   200 */  1026,  272,   96,   96,   96,   96,   95,   95,   94,   94,
+ /*   210 */    94,   93,  354,   99,  100,   90,  975,  975,  851,  854,
+ /*   220 */   843,  843,   97,   97,   98,   98,   98,   98,  453,  376,
+ /*   230 */   822,  822,  824,   92,   89,  178,   60,   92,   89,  178,
+ /*   240 */  1029,  328,  361,  934, 1320,  304,   61, 1320,   52,   52,
+ /*   250 */   840,  840,  852,  855,   96,   96,   96,   96,   95,   95,
+ /*   260 */    94,   94,   94,   93,  354,   99,  100,   90,  975,  975,
+ /*   270 */   851,  854,  843,  843,   97,   97,   98,   98,   98,   98,
+ /*   280 */    92,   89,  178,  431,  416,  198,  934, 1321,  458,  999,
+ /*   290 */  1321,  359, 1028,  328,  243,  231,  114,  281,  352,  351,
+ /*   300 */  1246,  954,  420, 1075,  932,  844,   96,   96,   96,   96,
+ /*   310 */    95,   95,   94,   94,   94,   93,  354,   99,  100,   90,
+ /*   320 */   975,  975,  851,  854,  843,  843,   97,   97,   98,   98,
+ /*   330 */    98,   98,  453,  332,  453,  120,   23,  260,  954,  955,
+ /*   340 */   956,  972,  982,  442,  982,  328,  333,  932,  958,  705,
+ /*   350 */   200,  175,   52,   52,   52,   52,  943,  357,   96,   96,
+ /*   360 */    96,   96,   95,   95,   94,   94,   94,   93,  354,   99,
+ /*   370 */   100,   90,  975,  975,  851,  854,  843,  843,   97,   97,
+ /*   380 */    98,   98,   98,   98,  358,  453,  958,  431,  421,  431,
+ /*   390 */   430, 1294,   92,   89,  178,  272,  257,  328,  259, 1062,
+ /*   400 */  1041,  698,   93,  354,  387,   52,   52,  384, 1062,  378,
+ /*   410 */    96,   96,   96,   96,   95,   95,   94,   94,   94,   93,
+ /*   420 */   354,   99,  100,   90,  975,  975,  851,  854,  843,  843,
+ /*   430 */    97,   97,   98,   98,   98,   98,  228,  453,  167,  453,
+ /*   440 */   431,  411,  157,  450,  450,  450,  353,  353,  353,  328,
+ /*   450 */   314,  320,  995,  831,  324,  242,  415,   51,   51,   36,
+ /*   460 */    36,  258,   96,   96,   96,   96,   95,   95,   94,   94,
+ /*   470 */    94,   93,  354,   99,  100,   90,  975,  975,  851,  854,
+ /*   480 */   843,  843,   97,   97,   98,   98,   98,   98,  194,  320,
+ /*   490 */   933,  405,  402,  401,  224,  224, 1269,  943,  357, 1322,
+ /*   500 */   321,  328,  400, 1067, 1067,  817,  418, 1065, 1065,  954,
+ /*   510 */   303,  452,  996,  272,   96,   96,   96,   96,   95,   95,
+ /*   520 */    94,   94,   94,   93,  354,   99,  100,   90,  975,  975,
+ /*   530 */   851,  854,  843,  843,   97,   97,   98,   98,   98,   98,
+ /*   540 */   761, 1045,  453,  897,  897,  390,  954,  955,  956,  414,
+ /*   550 */   996,  751,  751,  328,  229,  272,  221,  300,  272,  775,
+ /*   560 */   894,  382,   52,   52,  894,  425,   96,   96,   96,   96,
+ /*   570 */    95,   95,   94,   94,   94,   93,  354,   99,  100,   90,
+ /*   580 */   975,  975,  851,  854,  843,  843,   97,   97,   98,   98,
+ /*   590 */    98,   98,  103,  453,  279,  388, 1245,  347,  157, 1211,
+ /*   600 */   913,  673,  674,  675,  176,  197,  196,  195,  328,  302,
+ /*   610 */   323, 1270,    2,   37,   37,  914, 1138, 1044,   96,   96,
+ /*   620 */    96,   96,   95,   95,   94,   94,   94,   93,  354,  701,
+ /*   630 */   915,  177,   99,  100,   90,  975,  975,  851,  854,  843,
+ /*   640 */   843,   97,   97,   98,   98,   98,   98,  230,  146,  120,
+ /*   650 */   739, 1239,  830,  274, 1145,  277, 1145,  775,  171,  170,
+ /*   660 */   740, 1145,   82,  328,   80,  272,  701,  823,  158,  272,
+ /*   670 */   382,  822,   78,   96,   96,   96,   96,   95,   95,   94,
+ /*   680 */    94,   94,   93,  354,  120,  954,  397,   99,  100,   90,
+ /*   690 */   975,  975,  851,  854,  843,  843,   97,   97,   98,   98,
+ /*   700 */    98,   98,  822,  822,  824, 1145, 1074,  374,  335,  133,
+ /*   710 */  1070, 1145, 1254,  198,  272,  328, 1020,  334,  245,  337,
+ /*   720 */    24,  338,  954,  955,  956,  372,  339,   81,   96,   96,
+ /*   730 */    96,   96,   95,   95,   94,   94,   94,   93,  354,   99,
+ /*   740 */   100,   90,  975,  975,  851,  854,  843,  843,   97,   97,
+ /*   750 */    98,   98,   98,   98,  132,  271,  264,  449,  334,  223,
+ /*   760 */   175, 1293,  929,  756,  728,  322, 1077,  328,  755,  246,
+ /*   770 */   389,  305,  305,  382,  333,  365,  348,  418, 1237,  284,
+ /*   780 */    96,   96,   96,   96,   95,   95,   94,   94,   94,   93,
+ /*   790 */   354,   99,   88,   90,  975,  975,  851,  854,  843,  843,
+ /*   800 */    97,   97,   98,   98,   98,   98,  341,  350,  725,  726,
+ /*   810 */   453,  120,  118,  891,  162,  891,  814,  375,  328,  202,
+ /*   820 */   202,  377,  249,  267,  202,  398,   74,  708,  208, 1073,
+ /*   830 */    12,   12,   96,   96,   96,   96,   95,   95,   94,   94,
+ /*   840 */    94,   93,  354,  100,   90,  975,  975,  851,  854,  843,
+ /*   850 */   843,   97,   97,   98,   98,   98,   98,  453,  775,  232,
+ /*   860 */   453,  282,  120,  290,   74,  708,  718,  717,  328,  346,
+ /*   870 */   753,  881, 1213,   77,  289, 1259,  784,   52,   52,  202,
+ /*   880 */    27,   27,  422,   96,   96,   96,   96,   95,   95,   94,
+ /*   890 */    94,   94,   93,  354,   90,  975,  975,  851,  854,  843,
+ /*   900 */   843,   97,   97,   98,   98,   98,   98,   86,  448,  881,
+ /*   910 */     3, 1197,  426, 1017,  877,  439,  890,  208,  890,  693,
+ /*   920 */  1095,  261,  116,  826,  451, 1234,  117, 1233,   86,  448,
+ /*   930 */   177,    3,  385,   96,   96,   96,   96,   95,   95,   94,
+ /*   940 */    94,   94,   93,  354,  343,  451,  120,  355,  120,  212,
+ /*   950 */   169,  291,  408,  286,  407,  199,  775,  954,  437,  423,
+ /*   960 */   443,  826,  284,  695, 1043,  268,  273,  132,  355,  153,
+ /*   970 */   830,  380,   74,  276,  278,  280,   83,   84, 1058,  437,
+ /*   980 */   147, 1042,  447,   85,  355,  455,  454,  285,  132,  822,
+ /*   990 */    25,  830,  453,  120,  954,  955,  956,   83,   84,   86,
+ /*  1000 */   448,  695,    3,  412,   85,  355,  455,  454,  453,    5,
+ /*  1010 */   822,  203,   32,   32, 1111,  120,  451,  954,  225, 1144,
+ /*  1020 */   822,  822,  824,  825,   19,  203,  226,  954,   38,   38,
+ /*  1030 */  1091,  318,  318,  317,  215,  315,  120,  453,  682,  355,
+ /*  1040 */   237,  822,  822,  824,  825,   19,  973,  413,  381,    1,
+ /*  1050 */   437,  180,  710,  248,  954,  955,  956,   10,   10,  453,
+ /*  1060 */   973,  247,  830, 1102,  954,  955,  956,  434,   83,   84,
+ /*  1070 */   760,  340,  954,   20,  435,   85,  355,  455,  454,   10,
+ /*  1080 */    10,  822,   86,  448,  973,    3,  954,  453,  306,  307,
+ /*  1090 */   182,  954, 1150,  342, 1025, 1019, 1008,  183,  973,  451,
+ /*  1100 */   132,  181,   76,  448,   21,    3,  453,   10,   10,  954,
+ /*  1110 */   955,  956,  822,  822,  824,  825,   19,  719, 1283,  451,
+ /*  1120 */   393,  233,  355,  954,  955,  956,   10,   10,  954,  955,
+ /*  1130 */   956, 1007,  218,  437, 1009,  329, 1277,  777,  293,  295,
+ /*  1140 */   428,  297,  355,    7,  159,  830,  367,  406,  319,  364,
+ /*  1150 */   252,   83,   84,  437, 1236,  720,  776,  263,   85,  355,
+ /*  1160 */   455,  454,  362,  379,  822,  830,  364,  363,  403, 1215,
+ /*  1170 */   157,   83,   84,  685,   98,   98,   98,   98,   85,  355,
+ /*  1180 */   455,  454,  327,  256,  822,  299, 1215, 1217, 1239,  173,
+ /*  1190 */  1041,  288,  438,  344, 1208,  822,  822,  824,  825,   19,
+ /*  1200 */   312,  234,  453,  234,   96,   96,   96,   96,   95,   95,
+ /*  1210 */    94,   94,   94,   93,  354,  822,  822,  824,  825,   19,
+ /*  1220 */   913,  120,   39,   39, 1207,  453,  168,  364,  453, 1280,
+ /*  1230 */   371,  453,  135,  453,  990,  914,  453, 1253,  453, 1251,
+ /*  1240 */   453,  205,  987,  453,  374,   40,   40, 1215,   41,   41,
+ /*  1250 */   915,   42,   42,   28,   28,  874,   29,   29,   31,   31,
+ /*  1260 */    43,   43,  383,   44,   44,  453,   59,  453,  336,  453,
+ /*  1270 */   436,   62,  144,  156,  453,  102,  453, 1133,  453,  251,
+ /*  1280 */   453,  429,  453,  130,  137,   45,   45,   11,   11,   46,
+ /*  1290 */    46,  254, 1204,  453,  105,  105,   47,   47,   48,   48,
+ /*  1300 */    33,   33,   49,   49, 1130,  453,   72,  255,  453,  369,
+ /*  1310 */   139,  453,  396,   50,   50,  453,  370,  453,  185,  453,
+ /*  1320 */   160,  140,  453,  141,  453,   34,   34,  453,  122,  122,
+ /*  1330 */   453,  123,  123,  453,  142,  124,  124,   56,   56,   35,
+ /*  1340 */    35,  453,  106,  106,   53,   53,  453,  107,  107,  453,
+ /*  1350 */   108,  108,  453,  104,  104,  453,  410,  453,  148,  453,
+ /*  1360 */  1140,  121,  121,  453,  189,  453,  119,  119,  453,  112,
+ /*  1370 */   112,  453,  111,  111, 1238,  109,  109,  110,  110,   55,
+ /*  1380 */    55, 1202,  756,   57,   57,   54,   54,  755,   26,   26,
+ /*  1390 */   386,   30,   30,   67, 1222,  392,  270, 1103,  219,  190,
+ /*  1400 */   154,  394,  275,  191,  325, 1010,  192,  409, 1061, 1060,
+ /*  1410 */  1059,  345, 1052,  710,  326, 1051, 1033,  424, 1099,   71,
+ /*  1420 */  1032,  287,  204, 1031,  292, 1292, 1100,  294,    6,  301,
+ /*  1430 */  1098, 1097,  296,  298,   79,  441,  349,  445,   73,  213,
+ /*  1440 */   427, 1016,   22,  456, 1188,  949,  214,  238,  216,  217,
+ /*  1450 */   457,  239,  240, 1005, 1000,  125,  309, 1081,  308,  310,
+ /*  1460 */   311,  126,  115,  235,  669,  356,  127,  166,  244,  179,
+ /*  1470 */   360,  113,  889,  887,  330,  331,  810,  136,  134,  128,
+ /*  1480 */   138,  742,  262,  184,  903,  143,  145,   63,   64,   65,
+ /*  1490 */    66,  129,  906,  186,  187,  902,    8,   13,  188,  269,
+ /*  1500 */   895,  984,  202,  161,  391,  149,  150,  684,  395,  289,
+ /*  1510 */   193,  283,  151,  399,   68,   14,  750,   15,  404,   69,
+ /*  1520 */    16,  131,  236,  829,  721,  828,  857,   70,  754,    4,
+ /*  1530 */   417,  174,  220,  222,  152,  783,  778,   77,  872,   74,
+ /*  1540 */   201,  858,   17,  856,  912,  206,  911,  207,   18,  861,
+ /*  1550 */   938,  163,  440,  210,  939,  164,  209,  165,  444,  860,
+ /*  1560 */   827,  316,  694,   87,  211,  313, 1285,  944, 1284,
 };
 static const YYCODETYPE yy_lookahead[] = {
- /*     0 */    19,  115,   19,  117,  118,   24,    1,    2,   27,   79,
- /*    10 */    80,   81,   82,   83,   84,   85,   86,   87,   88,   89,
- /*    20 */    90,   91,   92,   93,   94,  144,  145,  146,  147,   58,
- /*    30 */    49,   50,   79,   80,   81,   82,   22,   84,   85,   86,
- /*    40 */    87,   88,   89,   90,   91,   92,   93,   94,  221,  222,
- /*    50 */   223,   70,   71,   72,   73,   74,   75,   76,   77,   78,
- /*    60 */    79,   80,   81,   82,   94,   84,   85,   86,   87,   88,
- /*    70 */    89,   90,   91,   92,   93,   94,   19,   94,   97,  108,
- /*    80 */   109,  110,   99,  100,  101,  102,  103,  104,  105,   32,
- /*    90 */   119,  120,   78,   27,  152,  112,   93,   94,   41,   88,
- /*   100 */    89,   90,   91,   92,   93,   94,   49,   50,   84,   85,
- /*   110 */    86,   87,   88,   89,   90,   91,   92,   93,   94,   58,
- /*   120 */   157,  119,  120,  163,   68,  163,   65,   70,   71,   72,
- /*   130 */    73,   74,   75,   76,   77,   78,   79,   80,   81,   82,
- /*   140 */   152,   84,   85,   86,   87,   88,   89,   90,   91,   92,
- /*   150 */    93,   94,   19,   97,   88,   89,  196,  101,  196,   26,
- /*   160 */   172,  173,   96,   97,   98,  210,  100,   22,  152,  108,
- /*   170 */   109,  110,   27,  107,   27,  109,  221,  222,  223,  219,
- /*   180 */   238,  219,   49,   50,  152,  169,  170,   54,  132,  133,
- /*   190 */   134,  228,  232,  171,  231,  207,  208,  237,  132,  237,
- /*   200 */   134,  179,   19,   70,   71,   72,   73,   74,   75,   76,
- /*   210 */    77,   78,   79,   80,   81,   82,  152,   84,   85,   86,
- /*   220 */    87,   88,   89,   90,   91,   92,   93,   94,   27,   65,
- /*   230 */    30,  152,   49,   50,   34,   52,   90,   91,   92,   93,
- /*   240 */    94,   96,   97,   98,   97,   22,  230,   27,   48,  217,
- /*   250 */    27,  172,  173,   70,   71,   72,   73,   74,   75,   76,
- /*   260 */    77,   78,   79,   80,   81,   82,  172,   84,   85,   86,
- /*   270 */    87,   88,   89,   90,   91,   92,   93,   94,   19,  148,
- /*   280 */   149,  152,  218,   24,  152,  154,  207,  156,  172,  152,
- /*   290 */    22,   68,   27,  152,  163,   27,  164,   96,   97,   98,
- /*   300 */    99,  172,  173,  102,  103,  104,  169,  170,   49,   50,
- /*   310 */    90,   88,   89,  152,  113,  186,   96,   97,   98,   96,
- /*   320 */    97,  160,   57,   27,  101,  164,  137,  196,  139,   70,
- /*   330 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
- /*   340 */    81,   82,   11,   84,   85,   86,   87,   88,   89,   90,
- /*   350 */    91,   92,   93,   94,   19,  132,  133,  134,   23,  218,
- /*   360 */   152,   96,   97,   98,   96,   97,   98,  230,   99,   22,
- /*   370 */   152,  102,  103,  104,   27,  244,  152,  152,   27,   26,
- /*   380 */   152,   22,  113,   65,   49,   50,   27,  194,  195,   58,
- /*   390 */   172,  173,   96,   97,   98,  185,   65,  172,  173,  206,
- /*   400 */   172,  173,  190,  191,  186,   70,   71,   72,   73,   74,
- /*   410 */    75,   76,   77,   78,   79,   80,   81,   82,  175,   84,
- /*   420 */    85,   86,   87,   88,   89,   90,   91,   92,   93,   94,
- /*   430 */    19,  175,  207,  208,   23,  207,  208,  119,  120,  108,
- /*   440 */   109,  110,   27,   96,   97,   98,  116,   96,   97,   98,
- /*   450 */   152,  121,  152,  179,  180,   96,   97,   98,  250,  106,
- /*   460 */    49,   50,  188,   19,  221,  222,  223,  168,  169,  170,
- /*   470 */   172,  173,  172,  173,  250,  124,  172,  221,  222,  223,
- /*   480 */    26,   70,   71,   72,   73,   74,   75,   76,   77,   78,
- /*   490 */    79,   80,   81,   82,   50,   84,   85,   86,   87,   88,
- /*   500 */    89,   90,   91,   92,   93,   94,   19,  207,  208,   12,
- /*   510 */    23,   96,   97,   98,  221,  222,  223,  194,  195,  152,
- /*   520 */   199,   23,   19,  225,   26,   28,  152,  152,  152,  206,
- /*   530 */   209,  164,  190,  191,  241,  152,   49,   50,  152,  124,
- /*   540 */   152,   44,  219,   46,  152,   21,  172,  173,  172,  173,
- /*   550 */   183,  107,  185,   16,  163,   58,  112,   70,   71,   72,
- /*   560 */    73,   74,   75,   76,   77,   78,   79,   80,   81,   82,
- /*   570 */   152,   84,   85,   86,   87,   88,   89,   90,   91,   92,
- /*   580 */    93,   94,   19,  207,  130,  152,   23,  196,   64,  152,
- /*   590 */   172,  173,   22,  152,   24,  152,   98,   27,   61,   96,
- /*   600 */    63,   26,  211,  212,  186,  172,  173,   49,   50,  172,
- /*   610 */   173,   23,   49,   50,   26,  172,  173,   88,   89,  186,
- /*   620 */    24,  238,  124,   27,  238,   22,   23,  103,  187,   26,
- /*   630 */   152,   73,   74,   70,   71,   72,   73,   74,   75,   76,
- /*   640 */    77,   78,   79,   80,   81,   82,  152,   84,   85,   86,
- /*   650 */    87,   88,   89,   90,   91,   92,   93,   94,   19,  101,
- /*   660 */   152,  132,   23,  134,  140,  152,   12,   97,   36,  168,
- /*   670 */   169,  170,   69,   98,  152,   22,   23,  140,   50,   26,
- /*   680 */   172,  173,   28,   51,  152,  172,  173,  193,   49,   50,
- /*   690 */    22,   59,   24,   97,  172,  173,  152,  152,   44,  124,
- /*   700 */    46,    0,    1,    2,  172,  173,   22,   23,   19,   70,
- /*   710 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
- /*   720 */    81,   82,   69,   84,   85,   86,   87,   88,   89,   90,
- /*   730 */    91,   92,   93,   94,  152,  107,  152,  193,   49,   50,
- /*   740 */   181,   22,   23,  111,  108,  109,  110,    7,    8,    9,
- /*   750 */    16,  247,  248,   69,  172,  173,  172,  173,  152,   70,
- /*   760 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
- /*   770 */    81,   82,  152,   84,   85,   86,   87,   88,   89,   90,
- /*   780 */    91,   92,   93,   94,   19,  152,  242,  152,   69,  152,
- /*   790 */   166,  167,  172,  173,   32,   61,  152,   63,  152,  193,
- /*   800 */   152,  152,  152,   41,  152,  172,  173,  172,  173,  172,
- /*   810 */   173,  152,  152,  152,   49,   50,  172,  173,  172,  173,
- /*   820 */   172,  173,  172,  173,  172,  173,  132,  138,  134,  152,
- /*   830 */   152,  172,  173,  172,  173,   70,   71,   72,   73,   74,
- /*   840 */    75,   76,   77,   78,   79,   80,   81,   82,  152,   84,
- /*   850 */    85,   86,   87,   88,   89,   90,   91,   92,   93,   94,
- /*   860 */    19,  152,   22,  152,  195,   24,  152,   27,  172,  173,
- /*   870 */   193,  193,  152,  152,  152,  206,  152,  217,  152,  152,
- /*   880 */   152,  172,  173,  172,  173,  152,  172,  173,  152,  152,
- /*   890 */    49,   50,  172,  173,  172,  173,  172,  173,  172,  173,
- /*   900 */   172,  173,  152,  138,  152,  172,  173,  108,  109,  110,
- /*   910 */    19,   70,   71,   72,   73,   74,   75,   76,   77,   78,
- /*   920 */    79,   80,   81,   82,  152,   84,   85,   86,   87,   88,
- /*   930 */    89,   90,   91,   92,   93,   94,  152,   97,  152,  152,
- /*   940 */    49,   50,   26,  193,  172,  173,  152,  152,  152,  146,
- /*   950 */   147,  132,  152,  134,  217,  181,  172,  173,  172,  173,
- /*   960 */    19,   70,   71,   72,   73,   74,   75,   76,   77,   78,
- /*   970 */    79,   80,   81,   82,  152,   84,   85,   86,   87,   88,
- /*   980 */    89,   90,   91,   92,   93,   94,  152,  193,  152,  193,
- /*   990 */    49,   50,  181,  193,  172,  173,  166,  167,  245,  246,
- /*  1000 */   211,  212,  152,   22,  217,  152,  172,  173,  172,  173,
- /*  1010 */    19,   70,   71,   72,   73,   74,   75,   76,   77,   78,
- /*  1020 */    79,   80,   81,   82,  152,   84,   85,   86,   87,   88,
- /*  1030 */    89,   90,   91,   92,   93,   94,  152,  187,  152,  123,
- /*  1040 */    49,   50,   23,   23,   23,   26,   26,   26,   23,   23,
- /*  1050 */    23,   26,   26,   26,    7,    8,  172,  173,  172,  173,
- /*  1060 */    19,   90,   71,   72,   73,   74,   75,   76,   77,   78,
- /*  1070 */    79,   80,   81,   82,  152,   84,   85,   86,   87,   88,
- /*  1080 */    89,   90,   91,   92,   93,   94,  152,  116,  152,  217,
- /*  1090 */    49,   50,  121,   23,  172,  173,   26,  100,  101,   27,
- /*  1100 */   101,   27,   23,  122,  152,   26,  172,  173,  172,  173,
- /*  1110 */   152,  112,  163,   72,   73,   74,   75,   76,   77,   78,
- /*  1120 */    79,   80,   81,   82,  163,   84,   85,   86,   87,   88,
- /*  1130 */    89,   90,   91,   92,   93,   94,   19,   20,  152,   22,
- /*  1140 */    23,  152,  163,   65,   27,  196,  163,   19,   20,   23,
- /*  1150 */    22,  213,   26,   19,   37,   27,  152,  196,  172,  173,
- /*  1160 */   152,  172,  173,   27,   23,   37,  152,   26,  152,   97,
- /*  1170 */   152,   97,  210,   56,  163,  196,  163,  163,  100,  196,
- /*  1180 */   172,  173,   65,  152,   56,   68,  172,  173,  172,  173,
- /*  1190 */   172,  173,  152,   65,  163,  163,   68,   23,  152,  234,
- /*  1200 */    26,  152,  152,  172,  173,   88,   89,  196,  152,  196,
- /*  1210 */   196,  152,   95,   96,   97,   98,   88,   89,  101,  152,
- /*  1220 */   152,  207,  208,   95,   96,   97,   98,  196,  196,  101,
- /*  1230 */    96,  233,  152,   97,  152,  152,   19,   20,  207,   22,
- /*  1240 */   152,  152,  152,  191,   27,  152,  152,  152,  152,  132,
- /*  1250 */   133,  134,  135,  136,   37,  152,  152,  152,  152,  152,
- /*  1260 */   132,  133,  134,  135,  136,  210,  197,  210,  210,  198,
- /*  1270 */   150,  184,  239,   56,  201,  214,  214,  201,  239,  180,
- /*  1280 */   214,  227,  198,   38,  176,   68,  175,  175,  175,  122,
- /*  1290 */   155,  200,  159,   19,   20,   40,   22,  159,  159,   22,
- /*  1300 */   129,   27,  205,  243,  240,   88,   89,   90,  126,   70,
- /*  1310 */   189,   37,   95,   96,   97,   98,  130,    5,  101,  204,
- /*  1320 */   220,  240,   10,   11,   12,   13,   14,  205,  204,   17,
- /*  1330 */    56,  201,   18,   18,  192,  192,  192,  192,  159,  158,
- /*  1340 */   189,  201,   68,   31,  189,   33,  159,  220,  201,  132,
- /*  1350 */   133,  134,  135,  136,   42,  158,  137,  159,   45,  236,
- /*  1360 */   235,  159,   88,   89,  158,   22,  177,   55,  159,   95,
- /*  1370 */    96,   97,   98,  158,   62,  101,  158,   65,   66,  159,
- /*  1380 */   177,  174,   19,   20,  174,   22,  107,  174,   47,  177,
- /*  1390 */    27,  106,  176,  182,  125,  174,  174,  107,  174,  174,
- /*  1400 */    37,  216,  159,  215,   22,  182,  132,  133,  134,  135,
- /*  1410 */   136,  216,  216,  159,  215,  215,  224,  216,  137,   56,
- /*  1420 */   215,  177,   94,  229,  177,  128,  114,  127,   25,  203,
- /*  1430 */   226,   68,  205,  204,  202,  201,   26,  229,  162,  161,
- /*  1440 */    13,  153,  153,    6,  151,  151,  151,  165,  165,  178,
- /*  1450 */   178,   88,   89,  141,    4,    3,  165,   22,   95,   96,
- /*  1460 */    97,   98,  142,  249,  101,   67,   15,   23,   23,   16,
- /*  1470 */   120,  131,  111,  125,  123,   20,  246,  249,   16,    1,
- /*  1480 */   123,  111,   78,  131,   78,   78,   78,   96,  122,   35,
- /*  1490 */     1,    5,   22,  107,  140,  132,  133,  134,  135,  136,
- /*  1500 */    53,   26,   53,   60,   43,   24,  107,   20,  112,   19,
- /*  1510 */   105,   52,   52,   22,   22,   22,   52,   23,   22,   22,
- /*  1520 */    22,   39,   23,   23,   29,   23,   23,   26,  116,   22,
- /*  1530 */    26,  122,   23,   23,   96,   22,   22,  124,   26,   11,
- /*  1540 */    35,   35,   26,   35,   23,   23,   23,   23,  122,   23,
- /*  1550 */    23,   26,   22,   24,  122,   23,   22,   26,   22,   24,
- /*  1560 */    23,   23,   23,   22,  122,   23,   15,    1,  122,
+ /*     0 */    19,  144,  145,  146,  147,   24,   90,   91,   92,   93,
+ /*    10 */    94,   54,   55,   56,   57,   58,   88,   89,   90,   91,
+ /*    20 */    92,   93,   94,  152,   43,   44,   45,   46,   47,   48,
+ /*    30 */    49,   50,   51,   52,   53,   54,   55,   56,   57,   94,
+ /*    40 */    59,   84,   85,   86,   87,   88,   89,   90,   91,   92,
+ /*    50 */    93,   94,   59,   84,   85,   86,   87,   88,   89,   90,
+ /*    60 */    91,   92,   93,   94,  193,   84,   85,   86,   87,   88,
+ /*    70 */    89,   90,   91,   92,   93,   94,  194,  195,   97,   79,
+ /*    80 */    11,   88,   89,  152,   26,   19,  171,  152,  206,   96,
+ /*    90 */    97,   98,   72,  100,  179,   59,  152,   31,  163,   79,
+ /*   100 */   107,  219,  109,  172,  173,   39,   79,  172,  173,   43,
+ /*   110 */    44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
+ /*   120 */    54,   55,   56,   57,  152,  132,  199,  134,  108,  109,
+ /*   130 */   110,  196,   96,   97,   98,   99,  209,   19,  102,  103,
+ /*   140 */   104,   72,  207,  208,   26,   72,  119,  120,   79,  113,
+ /*   150 */    84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
+ /*   160 */    94,   43,   44,   45,   46,   47,   48,   49,   50,   51,
+ /*   170 */    52,   53,   54,   55,   56,   57,   31,  108,  109,  110,
+ /*   180 */    82,  108,  109,  110,   39,  210,   68,  175,  130,   19,
+ /*   190 */   218,  175,  119,  120,  250,   97,  221,  222,  223,  101,
+ /*   200 */   172,  152,   84,   85,   86,   87,   88,   89,   90,   91,
+ /*   210 */    92,   93,   94,   43,   44,   45,   46,   47,   48,   49,
+ /*   220 */    50,   51,   52,   53,   54,   55,   56,   57,  152,  152,
+ /*   230 */   132,  133,  134,  221,  222,  223,   66,  221,  222,  223,
+ /*   240 */   172,   19,  193,   22,   23,  152,   24,   26,  172,  173,
+ /*   250 */    46,   47,   48,   49,   84,   85,   86,   87,   88,   89,
+ /*   260 */    90,   91,   92,   93,   94,   43,   44,   45,   46,   47,
+ /*   270 */    48,   49,   50,   51,   52,   53,   54,   55,   56,   57,
+ /*   280 */   221,  222,  223,  207,  208,   46,   22,   23,  148,  149,
+ /*   290 */    26,  242,  172,   19,  154,  218,  156,   23,   88,   89,
+ /*   300 */   241,   59,  163,  163,   83,  101,   84,   85,   86,   87,
+ /*   310 */    88,   89,   90,   91,   92,   93,   94,   43,   44,   45,
+ /*   320 */    46,   47,   48,   49,   50,   51,   52,   53,   54,   55,
+ /*   330 */    56,   57,  152,  157,  152,  196,  196,   16,   96,   97,
+ /*   340 */    98,   26,  132,  250,  134,   19,  107,   83,   59,   23,
+ /*   350 */   211,  212,  172,  173,  172,  173,    1,    2,   84,   85,
+ /*   360 */    86,   87,   88,   89,   90,   91,   92,   93,   94,   43,
+ /*   370 */    44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
+ /*   380 */    54,   55,   56,   57,  244,  152,   97,  207,  208,  207,
+ /*   390 */   208,  185,  221,  222,  223,  152,   75,   19,   77,  179,
+ /*   400 */   180,   23,   93,   94,  228,  172,  173,  231,  188,  152,
+ /*   410 */    84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
+ /*   420 */    94,   43,   44,   45,   46,   47,   48,   49,   50,   51,
+ /*   430 */    52,   53,   54,   55,   56,   57,  193,  152,  123,  152,
+ /*   440 */   207,  208,  152,  168,  169,  170,  168,  169,  170,   19,
+ /*   450 */   160,   22,   23,   23,  164,  119,  120,  172,  173,  172,
+ /*   460 */   173,  140,   84,   85,   86,   87,   88,   89,   90,   91,
+ /*   470 */    92,   93,   94,   43,   44,   45,   46,   47,   48,   49,
+ /*   480 */    50,   51,   52,   53,   54,   55,   56,   57,   99,   22,
+ /*   490 */    23,  102,  103,  104,  194,  195,    0,    1,    2,  247,
+ /*   500 */   248,   19,  113,  190,  191,   23,  206,  190,  191,   59,
+ /*   510 */   225,  152,   83,  152,   84,   85,   86,   87,   88,   89,
+ /*   520 */    90,   91,   92,   93,   94,   43,   44,   45,   46,   47,
+ /*   530 */    48,   49,   50,   51,   52,   53,   54,   55,   56,   57,
+ /*   540 */    90,  181,  152,  108,  109,  110,   96,   97,   98,  115,
+ /*   550 */    83,  117,  118,   19,  193,  152,   23,  152,  152,   26,
+ /*   560 */    29,  152,  172,  173,   33,  152,   84,   85,   86,   87,
+ /*   570 */    88,   89,   90,   91,   92,   93,   94,   43,   44,   45,
+ /*   580 */    46,   47,   48,   49,   50,   51,   52,   53,   54,   55,
+ /*   590 */    56,   57,   22,  152,   16,   64,  193,  207,  152,  193,
+ /*   600 */    12,    7,    8,    9,  152,  108,  109,  110,   19,  152,
+ /*   610 */   164,  146,  147,  172,  173,   27,  163,  181,   84,   85,
+ /*   620 */    86,   87,   88,   89,   90,   91,   92,   93,   94,   59,
+ /*   630 */    42,   98,   43,   44,   45,   46,   47,   48,   49,   50,
+ /*   640 */    51,   52,   53,   54,   55,   56,   57,  238,   22,  196,
+ /*   650 */    62,  163,   82,   75,  152,   77,  152,  124,   88,   89,
+ /*   660 */    72,  152,  137,   19,  139,  152,   96,   97,   24,  152,
+ /*   670 */   152,  101,  138,   84,   85,   86,   87,   88,   89,   90,
+ /*   680 */    91,   92,   93,   94,  196,   59,   19,   43,   44,   45,
+ /*   690 */    46,   47,   48,   49,   50,   51,   52,   53,   54,   55,
+ /*   700 */    56,   57,  132,  133,  134,  152,  193,  219,  245,  246,
+ /*   710 */   193,  152,  152,   46,  152,   19,  166,  167,  152,  217,
+ /*   720 */   232,  217,   96,   97,   98,  237,  217,  138,   84,   85,
+ /*   730 */    86,   87,   88,   89,   90,   91,   92,   93,   94,   43,
+ /*   740 */    44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
+ /*   750 */    54,   55,   56,   57,   79,  193,  238,  166,  167,  211,
+ /*   760 */   212,   23,   23,  116,   26,   26,  195,   19,  121,  152,
+ /*   770 */   217,  152,  152,  152,  107,  100,  217,  206,  163,  112,
+ /*   780 */    84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
+ /*   790 */    94,   43,   44,   45,   46,   47,   48,   49,   50,   51,
+ /*   800 */    52,   53,   54,   55,   56,   57,  187,  187,    7,    8,
+ /*   810 */   152,  196,   22,  132,   24,  134,   23,   23,   19,   26,
+ /*   820 */    26,   23,  152,   23,   26,   23,   26,   59,   26,  163,
+ /*   830 */   172,  173,   84,   85,   86,   87,   88,   89,   90,   91,
+ /*   840 */    92,   93,   94,   44,   45,   46,   47,   48,   49,   50,
+ /*   850 */    51,   52,   53,   54,   55,   56,   57,  152,   26,  238,
+ /*   860 */   152,   23,  196,  101,   26,   97,  100,  101,   19,   19,
+ /*   870 */    23,   59,  152,   26,  112,  152,   23,  172,  173,   26,
+ /*   880 */   172,  173,   19,   84,   85,   86,   87,   88,   89,   90,
+ /*   890 */    91,   92,   93,   94,   45,   46,   47,   48,   49,   50,
+ /*   900 */    51,   52,   53,   54,   55,   56,   57,   19,   20,   97,
+ /*   910 */    22,   23,  207,  163,   23,  163,  132,   26,  134,   23,
+ /*   920 */   213,  152,   26,   59,   36,  152,   22,  152,   19,   20,
+ /*   930 */    98,   22,  152,   84,   85,   86,   87,   88,   89,   90,
+ /*   940 */    91,   92,   93,   94,   94,   36,  196,   59,  196,   99,
+ /*   950 */   100,  101,  102,  103,  104,  105,  124,   59,   70,   96,
+ /*   960 */   163,   97,  112,   59,  181,  152,  152,   79,   59,   71,
+ /*   970 */    82,   19,   26,  152,  152,  152,   88,   89,  152,   70,
+ /*   980 */    22,  152,  163,   95,   96,   97,   98,  152,   79,  101,
+ /*   990 */    22,   82,  152,  196,   96,   97,   98,   88,   89,   19,
+ /*  1000 */    20,   97,   22,  163,   95,   96,   97,   98,  152,   22,
+ /*  1010 */   101,   24,  172,  173,  152,  196,   36,   59,   22,  152,
+ /*  1020 */   132,  133,  134,  135,  136,   24,    5,   59,  172,  173,
+ /*  1030 */   152,   10,   11,   12,   13,   14,  196,  152,   17,   59,
+ /*  1040 */   210,  132,  133,  134,  135,  136,   59,  207,   96,   22,
+ /*  1050 */    70,   30,  106,   32,   96,   97,   98,  172,  173,  152,
+ /*  1060 */    59,   40,   82,  152,   96,   97,   98,  152,   88,   89,
+ /*  1070 */    90,  186,   59,   22,  191,   95,   96,   97,   98,  172,
+ /*  1080 */   173,  101,   19,   20,   97,   22,   59,  152,  152,  152,
+ /*  1090 */    69,   59,  152,  186,  152,  152,  152,   76,   97,   36,
+ /*  1100 */    79,   80,   19,   20,   53,   22,  152,  172,  173,   96,
+ /*  1110 */    97,   98,  132,  133,  134,  135,  136,   35,  122,   36,
+ /*  1120 */   234,  186,   59,   96,   97,   98,  172,  173,   96,   97,
+ /*  1130 */    98,  152,  233,   70,  152,  114,  152,  124,  210,  210,
+ /*  1140 */   186,  210,   59,  198,  197,   82,  214,   65,  150,  152,
+ /*  1150 */   201,   88,   89,   70,  201,   73,  124,  239,   95,   96,
+ /*  1160 */    97,   98,  141,  239,  101,   82,  169,  170,  176,  152,
+ /*  1170 */   152,   88,   89,   21,   54,   55,   56,   57,   95,   96,
+ /*  1180 */    97,   98,  164,  214,  101,  214,  169,  170,  163,  184,
+ /*  1190 */   180,  175,  227,  111,  175,  132,  133,  134,  135,  136,
+ /*  1200 */   200,  183,  152,  185,   84,   85,   86,   87,   88,   89,
+ /*  1210 */    90,   91,   92,   93,   94,  132,  133,  134,  135,  136,
+ /*  1220 */    12,  196,  172,  173,  175,  152,  198,  230,  152,  155,
+ /*  1230 */    78,  152,  243,  152,   60,   27,  152,  159,  152,  159,
+ /*  1240 */   152,  122,   38,  152,  219,  172,  173,  230,  172,  173,
+ /*  1250 */    42,  172,  173,  172,  173,  103,  172,  173,  172,  173,
+ /*  1260 */   172,  173,  237,  172,  173,  152,  240,  152,  159,  152,
+ /*  1270 */    62,  240,   22,  220,  152,  129,  152,  205,  152,  204,
+ /*  1280 */   152,  126,  152,   43,  189,  172,  173,  172,  173,  172,
+ /*  1290 */   173,  204,  140,  152,  172,  173,  172,  173,  172,  173,
+ /*  1300 */   172,  173,  172,  173,  205,  152,  130,  201,  152,   18,
+ /*  1310 */   192,  152,   18,  172,  173,  152,  159,  152,  158,  152,
+ /*  1320 */   220,  192,  152,  192,  152,  172,  173,  152,  172,  173,
+ /*  1330 */   152,  172,  173,  152,  192,  172,  173,  172,  173,  172,
+ /*  1340 */   173,  152,  172,  173,  172,  173,  152,  172,  173,  152,
+ /*  1350 */   172,  173,  152,  172,  173,  152,   90,  152,  189,  152,
+ /*  1360 */   189,  172,  173,  152,  158,  152,  172,  173,  152,  172,
+ /*  1370 */   173,  152,  172,  173,  201,  172,  173,  172,  173,  172,
+ /*  1380 */   173,  201,  116,  172,  173,  172,  173,  121,  172,  173,
+ /*  1390 */   159,  172,  173,  137,  236,   61,  235,  159,  159,  158,
+ /*  1400 */    22,  177,  159,  158,  177,  159,  158,  107,  174,  174,
+ /*  1410 */   174,   63,  182,  106,  177,  182,  174,  125,  216,  107,
+ /*  1420 */   176,  174,  159,  174,  215,  174,  216,  215,   22,  159,
+ /*  1430 */   216,  216,  215,  215,  137,  177,   94,  177,  128,   25,
+ /*  1440 */   127,  162,   26,  161,  224,   13,  153,  226,  153,    6,
+ /*  1450 */   151,  229,  229,  151,  151,  165,  203,  205,  204,  202,
+ /*  1460 */   201,  165,  178,  178,    4,    3,  165,   22,  142,   15,
+ /*  1470 */    81,   16,   23,   23,  249,  249,  120,  131,  246,  111,
+ /*  1480 */   123,   20,   16,  125,    1,  123,  131,   53,   53,   53,
+ /*  1490 */    53,  111,   96,   34,  122,    1,    5,   22,  107,  140,
+ /*  1500 */    67,   74,   26,   24,   41,   67,  107,   20,   19,  112,
+ /*  1510 */   105,   23,   22,   66,   22,   22,  116,   22,   66,   22,
+ /*  1520 */    22,   37,   66,   23,   28,   23,   23,   26,   23,   22,
+ /*  1530 */    26,  122,   23,   23,   22,   96,  124,   26,   23,   26,
+ /*  1540 */    34,   23,   34,   23,   23,   26,   23,   22,   34,   11,
+ /*  1550 */    23,   22,   24,  122,   23,   22,   26,   22,   24,   23,
+ /*  1560 */    23,   15,   23,   22,  122,   23,  122,    1,  122,
 };
 #define YY_SHIFT_USE_DFLT (1569)
 #define YY_SHIFT_COUNT    (458)
-#define YY_SHIFT_MIN      (-114)
+#define YY_SHIFT_MIN      (-84)
 #define YY_SHIFT_MAX      (1566)
 static const short yy_shift_ofst[] = {
- /*     0 */     5, 1117, 1312, 1128, 1274, 1274, 1274, 1274,   61,  -19,
- /*    10 */    57,   57,  183, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /*    20 */    66,   66,  201,  -29,  331,  318,  133,  259,  335,  411,
- /*    30 */   487,  563,  639,  689,  765,  841,  891,  891,  891,  891,
- /*    40 */   891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
- /*    50 */   891,  891,  891,  941,  891,  991, 1041, 1041, 1217, 1274,
- /*    60 */  1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /*    70 */  1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /*    80 */  1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /*    90 */  1363, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /*   100 */  1274, 1274, 1274, 1274,  -70,  -47,  -47,  -47,  -47,  -47,
- /*   110 */    24,   11,  146,  296,  524,  444,  529,  529,  296,    3,
- /*   120 */     2,  -30, 1569, 1569, 1569,  -17,  -17,  -17,  145,  145,
- /*   130 */   497,  497,  265,  603,  653,  296,  296,  296,  296,  296,
- /*   140 */   296,  296,  296,  296,  296,  296,  296,  296,  296,  296,
- /*   150 */   296,  296,  296,  296,  296,  701, 1078,  147,  147,    2,
- /*   160 */   164,  164,  164,  164,  164,  164, 1569, 1569, 1569,  223,
- /*   170 */    56,   56,  268,  269,  220,  347,  351,  415,  359,  296,
- /*   180 */   296,  296,  296,  296,  296,  296,  296,  296,  296,  296,
- /*   190 */   296,  296,  296,  296,  296,  632,  632,  632,  296,  296,
- /*   200 */   498,  296,  296,  296,  570,  296,  296,  654,  296,  296,
- /*   210 */   296,  296,  296,  296,  296,  296,  296,  296,  636,  200,
- /*   220 */   596,  596,  596,  575, -114,  971,  740,  454,  503,  503,
- /*   230 */  1134,  454, 1134,  353,  588,  628,  762,  503,  189,  762,
- /*   240 */   762,  916,  330,  668, 1245, 1167, 1167, 1255, 1255, 1167,
- /*   250 */  1277, 1171, 1182, 1239, 1171, 1182, 1186, 1314, 1314, 1314,
- /*   260 */  1314, 1167, 1315, 1186, 1277, 1239, 1239, 1186, 1167, 1315,
- /*   270 */  1219, 1313, 1167, 1167, 1315, 1343, 1167, 1315, 1167, 1315,
- /*   280 */  1343, 1279, 1279, 1279, 1341, 1343, 1279, 1285, 1279, 1341,
- /*   290 */  1279, 1279, 1269, 1290, 1269, 1290, 1269, 1290, 1269, 1290,
- /*   300 */  1167, 1382, 1167, 1281, 1343, 1328, 1328, 1343, 1171, 1182,
- /*   310 */  1297, 1300, 1186, 1403, 1410, 1427, 1427, 1437, 1437, 1437,
- /*   320 */  1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569,  558,  537,
- /*   330 */   684,  719,  734,  799,  840, 1019,   14, 1020, 1021, 1025,
- /*   340 */  1026, 1027, 1070, 1072,  997, 1047,  999, 1079, 1126, 1074,
- /*   350 */  1141,  694,  819, 1174, 1136,  981, 1450, 1452, 1435, 1320,
- /*   360 */  1451, 1398, 1453, 1444, 1445, 1350, 1340, 1361, 1351, 1455,
- /*   370 */  1348, 1462, 1478, 1357, 1352, 1404, 1406, 1407, 1408, 1370,
- /*   380 */  1391, 1454, 1366, 1489, 1486, 1470, 1386, 1354, 1447, 1475,
- /*   390 */  1449, 1443, 1461, 1399, 1481, 1487, 1490, 1396, 1405, 1491,
- /*   400 */  1459, 1492, 1493, 1494, 1496, 1460, 1495, 1497, 1464, 1482,
- /*   410 */  1499, 1500, 1502, 1501, 1412, 1498, 1503, 1507, 1504, 1409,
- /*   420 */  1509, 1510, 1438, 1505, 1513, 1413, 1512, 1506, 1516, 1508,
- /*   430 */  1521, 1512, 1522, 1523, 1524, 1525, 1526, 1514, 1528, 1527,
- /*   440 */  1530, 1529, 1531, 1532, 1534, 1535, 1531, 1537, 1536, 1538,
- /*   450 */  1539, 1541, 1426, 1432, 1442, 1446, 1542, 1551, 1566,
+ /*     0 */   355,  888, 1021,  909, 1063, 1063, 1063, 1063,   20,  -19,
+ /*    10 */    66,   66,  170, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
+ /*    20 */    -7,   -7,   36,   73,   69,   27,  118,  222,  274,  326,
+ /*    30 */   378,  430,  482,  534,  589,  644,  696,  696,  696,  696,
+ /*    40 */   696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+ /*    50 */   696,  696,  696,  748,  696,  799,  849,  849,  980, 1063,
+ /*    60 */  1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
+ /*    70 */  1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
+ /*    80 */  1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
+ /*    90 */  1083, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
+ /*   100 */  1063, 1063, 1063, 1063,  -43, 1120, 1120, 1120, 1120, 1120,
+ /*   110 */   -31,  -72,  -84,  242, 1152,  667,  210,  210,  242,  309,
+ /*   120 */   336,  -55, 1569, 1569, 1569,  850,  850,  850,  626,  626,
+ /*   130 */   588,  588,  898,  221,  264,  242,  242,  242,  242,  242,
+ /*   140 */   242,  242,  242,  242,  242,  242,  242,  242,  242,  242,
+ /*   150 */   242,  242,  242,  242,  242,  496,  675,  289,  289,  336,
+ /*   160 */     0,    0,    0,    0,    0,    0, 1569, 1569, 1569,  570,
+ /*   170 */    98,   98,  958,  389,  450,  968, 1013, 1032, 1027,  242,
+ /*   180 */   242,  242,  242,  242,  242,  242,  242,  242,  242,  242,
+ /*   190 */   242,  242,  242,  242,  242, 1082, 1082, 1082,  242,  242,
+ /*   200 */   533,  242,  242,  242,  987,  242,  242, 1208,  242,  242,
+ /*   210 */   242,  242,  242,  242,  242,  242,  242,  242,  435,  531,
+ /*   220 */  1001, 1001, 1001,  832,  434, 1266,  594,   58,  863,  863,
+ /*   230 */   952,   58,  952,  946,  738,  239,  145,  863,  525,  145,
+ /*   240 */   145,  315,  647,  790, 1174, 1119, 1119, 1204, 1204, 1119,
+ /*   250 */  1250, 1146, 1155, 1240, 1146, 1155, 1176, 1291, 1291, 1291,
+ /*   260 */  1291, 1119, 1294, 1176, 1250, 1240, 1240, 1176, 1119, 1294,
+ /*   270 */  1256, 1334, 1119, 1119, 1294, 1378, 1119, 1294, 1119, 1294,
+ /*   280 */  1378, 1300, 1300, 1300, 1348, 1378, 1300, 1307, 1300, 1348,
+ /*   290 */  1300, 1300, 1292, 1312, 1292, 1312, 1292, 1312, 1292, 1312,
+ /*   300 */  1119, 1406, 1119, 1297, 1378, 1342, 1342, 1378, 1146, 1155,
+ /*   310 */  1310, 1313, 1176, 1414, 1416, 1432, 1432, 1443, 1443, 1443,
+ /*   320 */  1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569,  204,  321,
+ /*   330 */   429,  467,  578,  497,  904,  739, 1051,  793,  794,  798,
+ /*   340 */   800,  802,  838,  768,  766,  801,  762,  847,  853,  812,
+ /*   350 */   891,  681,  784,  896,  864,  996, 1460, 1462, 1445, 1326,
+ /*   360 */  1454, 1389, 1455, 1449, 1450, 1356, 1346, 1368, 1357, 1461,
+ /*   370 */  1358, 1466, 1483, 1362, 1355, 1434, 1435, 1436, 1437, 1380,
+ /*   380 */  1396, 1459, 1372, 1494, 1491, 1475, 1391, 1359, 1433, 1476,
+ /*   390 */  1438, 1427, 1463, 1399, 1479, 1487, 1489, 1397, 1405, 1490,
+ /*   400 */  1447, 1492, 1493, 1488, 1495, 1452, 1496, 1497, 1456, 1484,
+ /*   410 */  1500, 1502, 1503, 1501, 1400, 1498, 1505, 1507, 1504, 1409,
+ /*   420 */  1509, 1510, 1439, 1506, 1512, 1412, 1511, 1508, 1513, 1514,
+ /*   430 */  1515, 1511, 1518, 1520, 1521, 1519, 1523, 1525, 1538, 1527,
+ /*   440 */  1529, 1528, 1530, 1531, 1533, 1534, 1530, 1536, 1535, 1537,
+ /*   450 */  1539, 1541, 1431, 1442, 1444, 1446, 1542, 1546, 1566,
 };
-#define YY_REDUCE_USE_DFLT (-174)
+#define YY_REDUCE_USE_DFLT (-144)
 #define YY_REDUCE_COUNT (327)
-#define YY_REDUCE_MIN   (-173)
-#define YY_REDUCE_MAX   (1295)
+#define YY_REDUCE_MIN   (-143)
+#define YY_REDUCE_MAX   (1303)
 static const short yy_reduce_ofst[] = {
- /*     0 */  -119, 1014,  131, 1031,  -12,  225,  228,  300,  -40,  -45,
- /*    10 */   243,  256,  293,  129,  218,  418,   79,  376,  433,  298,
- /*    20 */    16,  137,  367,  323,  -38,  391, -173, -173, -173, -173,
- /*    30 */  -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
- /*    40 */  -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
- /*    50 */  -173, -173, -173, -173, -173, -173, -173, -173,  374,  437,
- /*    60 */   443,  508,  513,  522,  532,  582,  584,  620,  633,  635,
- /*    70 */   637,  644,  646,  648,  650,  652,  659,  661,  696,  709,
- /*    80 */   711,  714,  720,  722,  724,  726,  728,  733,  772,  784,
- /*    90 */   786,  822,  834,  836,  884,  886,  922,  934,  936,  986,
- /*   100 */   989, 1008, 1016, 1018, -173, -173, -173, -173, -173, -173,
- /*   110 */  -173, -173, -173,  544,  -37,  274,  299,  501,  161, -173,
- /*   120 */   193, -173, -173, -173, -173,   22,   22,   22,   64,  141,
- /*   130 */   212,  342,  208,  504,  504,  132,  494,  606,  677,  678,
- /*   140 */   750,  794,  796,  -58,   32,  383,  660,  737,  386,  787,
- /*   150 */   800,  441,  872,  224,  850,  803,  949,  624,  830,  669,
- /*   160 */   961,  979,  983, 1011, 1013, 1032,  753,  789,  321,   94,
- /*   170 */   116,  304,  375,  210,  388,  392,  478,  545,  649,  721,
- /*   180 */   727,  736,  752,  795,  853,  952,  958, 1004, 1040, 1046,
- /*   190 */  1049, 1050, 1056, 1059, 1067,  559,  774,  811, 1068, 1080,
- /*   200 */   938, 1082, 1083, 1088,  962, 1089, 1090, 1052, 1093, 1094,
- /*   210 */  1095,  388, 1096, 1103, 1104, 1105, 1106, 1107,  965,  998,
- /*   220 */  1055, 1057, 1058,  938, 1069, 1071, 1120, 1073, 1061, 1062,
- /*   230 */  1033, 1076, 1039, 1108, 1087, 1099, 1111, 1066, 1054, 1112,
- /*   240 */  1113, 1091, 1084, 1135, 1060, 1133, 1138, 1064, 1081, 1139,
- /*   250 */  1100, 1097, 1115, 1121, 1122, 1124, 1130, 1142, 1143, 1144,
- /*   260 */  1145, 1179, 1181, 1140, 1127, 1151, 1155, 1147, 1187, 1197,
- /*   270 */  1123, 1125, 1198, 1202, 1206, 1189, 1209, 1215, 1220, 1218,
- /*   280 */  1203, 1207, 1210, 1213, 1211, 1212, 1221, 1216, 1222, 1223,
- /*   290 */  1224, 1225, 1185, 1188, 1195, 1199, 1196, 1200, 1201, 1205,
- /*   300 */  1243, 1192, 1254, 1204, 1244, 1194, 1208, 1247, 1227, 1229,
- /*   310 */  1226, 1232, 1234, 1276, 1278, 1288, 1289, 1293, 1294, 1295,
- /*   320 */  1214, 1228, 1230, 1282, 1283, 1271, 1272, 1291,
+ /*     0 */  -143,  -65,  140,  840,   76,  180,  182,  233,  488,  -25,
+ /*    10 */    12,   16,   59,  885,  907,  935,  390,  705,  954,  285,
+ /*    20 */   997, 1017, 1018, -118, 1025,  139,  171,  171,  171,  171,
+ /*    30 */   171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+ /*    40 */   171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+ /*    50 */   171,  171,  171,  171,  171,  171,  171,  171,  -69,  287,
+ /*    60 */   441,  658,  708,  856, 1050, 1073, 1076, 1079, 1081, 1084,
+ /*    70 */  1086, 1088, 1091, 1113, 1115, 1117, 1122, 1124, 1126, 1128,
+ /*    80 */  1130, 1141, 1153, 1156, 1159, 1163, 1165, 1167, 1170, 1172,
+ /*    90 */  1175, 1178, 1181, 1189, 1194, 1197, 1200, 1203, 1205, 1207,
+ /*   100 */  1211, 1213, 1216, 1219,  171,  171,  171,  171,  171,  171,
+ /*   110 */   171,  171,  171,   49,  176,  220,  275,  278,  290,  171,
+ /*   120 */   300,  171,  171,  171,  171,  -85,  -85,  -85,  -28,   77,
+ /*   130 */   313,  317,  -56,  252,  252,  446, -129,  243,  361,  403,
+ /*   140 */   406,  513,  517,  409,  502,  518,  504,  509,  621,  553,
+ /*   150 */   562,  619,  559,   93,  620,  465,  453,  550,  591,  571,
+ /*   160 */   615,  666,  750,  752,  797,  819,  463,  548,  -73,   28,
+ /*   170 */    68,  120,  257,  206,  359,  405,  413,  452,  457,  560,
+ /*   180 */   566,  617,  670,  720,  723,  769,  773,  775,  780,  813,
+ /*   190 */   814,  821,  822,  823,  826,  360,  436,  783,  829,  835,
+ /*   200 */   707,  862,  867,  878,  830,  911,  915,  883,  936,  937,
+ /*   210 */   940,  359,  942,  943,  944,  979,  982,  984,  886,  899,
+ /*   220 */   928,  929,  931,  707,  947,  945,  998,  949,  932,  969,
+ /*   230 */   918,  953,  924,  992, 1005, 1010, 1016,  971,  965, 1019,
+ /*   240 */  1049, 1000, 1028, 1074,  989, 1078, 1080, 1026, 1031, 1109,
+ /*   250 */  1053, 1072, 1075, 1095, 1099, 1087, 1106, 1118, 1129, 1131,
+ /*   260 */  1142, 1157, 1160, 1173, 1100, 1169, 1171, 1180, 1231, 1206,
+ /*   270 */  1158, 1161, 1238, 1239, 1241, 1224, 1243, 1245, 1246, 1248,
+ /*   280 */  1227, 1234, 1235, 1236, 1230, 1237, 1242, 1244, 1247, 1233,
+ /*   290 */  1249, 1251, 1202, 1209, 1210, 1212, 1214, 1217, 1215, 1218,
+ /*   300 */  1263, 1220, 1270, 1221, 1258, 1222, 1223, 1260, 1252, 1254,
+ /*   310 */  1253, 1257, 1259, 1279, 1282, 1293, 1295, 1299, 1302, 1303,
+ /*   320 */  1225, 1226, 1232, 1290, 1296, 1284, 1285, 1301,
 };
 static const YYACTIONTYPE yy_default[] = {
  /*     0 */  1274, 1264, 1264, 1264, 1197, 1197, 1197, 1197, 1264, 1092,
@@ -137629,73 +138036,87 @@ static const YYACTIONTYPE yy_default[] = {
 static const YYCODETYPE yyFallback[] = {
     0,  /*          $ => nothing */
     0,  /*       SEMI => nothing */
-   27,  /*    EXPLAIN => ID */
-   27,  /*      QUERY => ID */
-   27,  /*       PLAN => ID */
-   27,  /*      BEGIN => ID */
+   59,  /*    EXPLAIN => ID */
+   59,  /*      QUERY => ID */
+   59,  /*       PLAN => ID */
+   59,  /*      BEGIN => ID */
     0,  /* TRANSACTION => nothing */
-   27,  /*   DEFERRED => ID */
-   27,  /*  IMMEDIATE => ID */
-   27,  /*  EXCLUSIVE => ID */
+   59,  /*   DEFERRED => ID */
+   59,  /*  IMMEDIATE => ID */
+   59,  /*  EXCLUSIVE => ID */
     0,  /*     COMMIT => nothing */
-   27,  /*        END => ID */
-   27,  /*   ROLLBACK => ID */
-   27,  /*  SAVEPOINT => ID */
-   27,  /*    RELEASE => ID */
+   59,  /*        END => ID */
+   59,  /*   ROLLBACK => ID */
+   59,  /*  SAVEPOINT => ID */
+   59,  /*    RELEASE => ID */
     0,  /*         TO => nothing */
     0,  /*      TABLE => nothing */
     0,  /*     CREATE => nothing */
-   27,  /*         IF => ID */
+   59,  /*         IF => ID */
     0,  /*        NOT => nothing */
     0,  /*     EXISTS => nothing */
-   27,  /*       TEMP => ID */
+   59,  /*       TEMP => ID */
     0,  /*         LP => nothing */
     0,  /*         RP => nothing */
     0,  /*         AS => nothing */
-   27,  /*    WITHOUT => ID */
+   59,  /*    WITHOUT => ID */
     0,  /*      COMMA => nothing */
+   59,  /*      ABORT => ID */
+   59,  /*     ACTION => ID */
+   59,  /*      AFTER => ID */
+   59,  /*    ANALYZE => ID */
+   59,  /*        ASC => ID */
+   59,  /*     ATTACH => ID */
+   59,  /*     BEFORE => ID */
+   59,  /*         BY => ID */
+   59,  /*    CASCADE => ID */
+   59,  /*       CAST => ID */
+   59,  /*   CONFLICT => ID */
+   59,  /*   DATABASE => ID */
+   59,  /*       DESC => ID */
+   59,  /*     DETACH => ID */
+   59,  /*       EACH => ID */
+   59,  /*       FAIL => ID */
+    0,  /*         OR => nothing */
+    0,  /*        AND => nothing */
+    0,  /*         IS => nothing */
+   59,  /*      MATCH => ID */
+   59,  /*    LIKE_KW => ID */
+    0,  /*    BETWEEN => nothing */
+    0,  /*         IN => nothing */
+    0,  /*     ISNULL => nothing */
+    0,  /*    NOTNULL => nothing */
+    0,  /*         NE => nothing */
+    0,  /*         EQ => nothing */
+    0,  /*         GT => nothing */
+    0,  /*         LE => nothing */
+    0,  /*         LT => nothing */
+    0,  /*         GE => nothing */
+    0,  /*     ESCAPE => nothing */
     0,  /*         ID => nothing */
-   27,  /*      ABORT => ID */
-   27,  /*     ACTION => ID */
-   27,  /*      AFTER => ID */
-   27,  /*    ANALYZE => ID */
-   27,  /*        ASC => ID */
-   27,  /*     ATTACH => ID */
-   27,  /*     BEFORE => ID */
-   27,  /*         BY => ID */
-   27,  /*    CASCADE => ID */
-   27,  /*       CAST => ID */
-   27,  /*   COLUMNKW => ID */
-   27,  /*   CONFLICT => ID */
-   27,  /*   DATABASE => ID */
-   27,  /*       DESC => ID */
-   27,  /*     DETACH => ID */
-   27,  /*       EACH => ID */
-   27,  /*       FAIL => ID */
-   27,  /*        FOR => ID */
-   27,  /*     IGNORE => ID */
-   27,  /*  INITIALLY => ID */
-   27,  /*    INSTEAD => ID */
-   27,  /*    LIKE_KW => ID */
-   27,  /*      MATCH => ID */
-   27,  /*         NO => ID */
-   27,  /*        KEY => ID */
-   27,  /*         OF => ID */
-   27,  /*     OFFSET => ID */
-   27,  /*     PRAGMA => ID */
-   27,  /*      RAISE => ID */
-   27,  /*  RECURSIVE => ID */
-   27,  /*    REPLACE => ID */
-   27,  /*   RESTRICT => ID */
-   27,  /*        ROW => ID */
-   27,  /*    TRIGGER => ID */
-   27,  /*     VACUUM => ID */
-   27,  /*       VIEW => ID */
-   27,  /*    VIRTUAL => ID */
-   27,  /*       WITH => ID */
-   27,  /*    REINDEX => ID */
-   27,  /*     RENAME => ID */
-   27,  /*   CTIME_KW => ID */
+   59,  /*   COLUMNKW => ID */
+   59,  /*        FOR => ID */
+   59,  /*     IGNORE => ID */
+   59,  /*  INITIALLY => ID */
+   59,  /*    INSTEAD => ID */
+   59,  /*         NO => ID */
+   59,  /*        KEY => ID */
+   59,  /*         OF => ID */
+   59,  /*     OFFSET => ID */
+   59,  /*     PRAGMA => ID */
+   59,  /*      RAISE => ID */
+   59,  /*  RECURSIVE => ID */
+   59,  /*    REPLACE => ID */
+   59,  /*   RESTRICT => ID */
+   59,  /*        ROW => ID */
+   59,  /*    TRIGGER => ID */
+   59,  /*     VACUUM => ID */
+   59,  /*       VIEW => ID */
+   59,  /*    VIRTUAL => ID */
+   59,  /*       WITH => ID */
+   59,  /*    REINDEX => ID */
+   59,  /*     RENAME => ID */
+   59,  /*   CTIME_KW => ID */
 };
 #endif /* YYFALLBACK */
 
@@ -137788,21 +138209,21 @@ static const char *const yyTokenName[] = {
   "ROLLBACK",      "SAVEPOINT",     "RELEASE",       "TO",          
   "TABLE",         "CREATE",        "IF",            "NOT",         
   "EXISTS",        "TEMP",          "LP",            "RP",          
-  "AS",            "WITHOUT",       "COMMA",         "ID",          
-  "ABORT",         "ACTION",        "AFTER",         "ANALYZE",     
-  "ASC",           "ATTACH",        "BEFORE",        "BY",          
-  "CASCADE",       "CAST",          "COLUMNKW",      "CONFLICT",    
-  "DATABASE",      "DESC",          "DETACH",        "EACH",        
-  "FAIL",          "FOR",           "IGNORE",        "INITIALLY",   
-  "INSTEAD",       "LIKE_KW",       "MATCH",         "NO",          
-  "KEY",           "OF",            "OFFSET",        "PRAGMA",      
-  "RAISE",         "RECURSIVE",     "REPLACE",       "RESTRICT",    
-  "ROW",           "TRIGGER",       "VACUUM",        "VIEW",        
-  "VIRTUAL",       "WITH",          "REINDEX",       "RENAME",      
-  "CTIME_KW",      "ANY",           "OR",            "AND",         
-  "IS",            "BETWEEN",       "IN",            "ISNULL",      
-  "NOTNULL",       "NE",            "EQ",            "GT",          
-  "LE",            "LT",            "GE",            "ESCAPE",      
+  "AS",            "WITHOUT",       "COMMA",         "ABORT",       
+  "ACTION",        "AFTER",         "ANALYZE",       "ASC",         
+  "ATTACH",        "BEFORE",        "BY",            "CASCADE",     
+  "CAST",          "CONFLICT",      "DATABASE",      "DESC",        
+  "DETACH",        "EACH",          "FAIL",          "OR",          
+  "AND",           "IS",            "MATCH",         "LIKE_KW",     
+  "BETWEEN",       "IN",            "ISNULL",        "NOTNULL",     
+  "NE",            "EQ",            "GT",            "LE",          
+  "LT",            "GE",            "ESCAPE",        "ID",          
+  "COLUMNKW",      "FOR",           "IGNORE",        "INITIALLY",   
+  "INSTEAD",       "NO",            "KEY",           "OF",          
+  "OFFSET",        "PRAGMA",        "RAISE",         "RECURSIVE",   
+  "REPLACE",       "RESTRICT",      "ROW",           "TRIGGER",     
+  "VACUUM",        "VIEW",          "VIRTUAL",       "WITH",        
+  "REINDEX",       "RENAME",        "CTIME_KW",      "ANY",         
   "BITAND",        "BITOR",         "LSHIFT",        "RSHIFT",      
   "PLUS",          "MINUS",         "STAR",          "SLASH",       
   "REM",           "CONCAT",        "COLLATE",       "BITNOT",      
@@ -141879,11 +142300,13 @@ const char sqlite3_version[] = SQLITE_VERSION;
 */
 SQLITE_API const char *sqlite3_libversion(void){ return sqlite3_version; }
 
-/* IMPLEMENTATION-OF: R-63124-39300 The sqlite3_sourceid() function returns a
+/* IMPLEMENTATION-OF: R-25063-23286 The sqlite3_sourceid() function returns a
 ** pointer to a string constant whose value is the same as the
-** SQLITE_SOURCE_ID C preprocessor macro. 
+** SQLITE_SOURCE_ID C preprocessor macro. Except if SQLite is built using
+** an edited copy of the amalgamation, then the last four characters of
+** the hash might be different from SQLITE_SOURCE_ID.
 */
-SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
+/* SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } */
 
 /* IMPLEMENTATION-OF: R-35210-63508 The sqlite3_libversion_number() function
 ** returns an integer equal to SQLITE_VERSION_NUMBER.
@@ -142268,14 +142691,8 @@ SQLITE_API int sqlite3_config(int op, ...){
       sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
       break;
     }
-    case SQLITE_CONFIG_SCRATCH: {
-      /* EVIDENCE-OF: R-08404-60887 There are three arguments to
-      ** SQLITE_CONFIG_SCRATCH: A pointer an 8-byte aligned memory buffer from
-      ** which the scratch allocations will be drawn, the size of each scratch
-      ** allocation (sz), and the maximum number of scratch allocations (N). */
-      sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
-      sqlite3GlobalConfig.szScratch = va_arg(ap, int);
-      sqlite3GlobalConfig.nScratch = va_arg(ap, int);
+    case SQLITE_CONFIG_SMALL_MALLOC: {
+      sqlite3GlobalConfig.bSmallMalloc = va_arg(ap, int);
       break;
     }
     case SQLITE_CONFIG_PAGECACHE: {
@@ -142496,7 +142913,8 @@ SQLITE_API int sqlite3_config(int op, ...){
 static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
 #ifndef SQLITE_OMIT_LOOKASIDE
   void *pStart;
-  if( db->lookaside.nOut ){
+  
+  if( sqlite3LookasideUsed(db,0)>0 ){
     return SQLITE_BUSY;
   }
   /* Free any existing lookaside buffer for this handle before
@@ -142524,16 +142942,18 @@ static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
     pStart = pBuf;
   }
   db->lookaside.pStart = pStart;
+  db->lookaside.pInit = 0;
   db->lookaside.pFree = 0;
   db->lookaside.sz = (u16)sz;
   if( pStart ){
     int i;
     LookasideSlot *p;
     assert( sz > (int)sizeof(LookasideSlot*) );
+    db->lookaside.nSlot = cnt;
     p = (LookasideSlot*)pStart;
     for(i=cnt-1; i>=0; i--){
-      p->pNext = db->lookaside.pFree;
-      db->lookaside.pFree = p;
+      p->pNext = db->lookaside.pInit;
+      db->lookaside.pInit = p;
       p = (LookasideSlot*)&((u8*)p)[sz];
     }
     db->lookaside.pEnd = p;
@@ -142544,6 +142964,7 @@ static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
     db->lookaside.pEnd = db;
     db->lookaside.bDisable = 1;
     db->lookaside.bMalloced = 0;
+    db->lookaside.nSlot = 0;
   }
 #endif /* SQLITE_OMIT_LOOKASIDE */
   return SQLITE_OK;
@@ -142656,7 +143077,7 @@ SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
         if( aFlagOp[i].op==op ){
           int onoff = va_arg(ap, int);
           int *pRes = va_arg(ap, int*);
-          int oldFlags = db->flags;
+          u32 oldFlags = db->flags;
           if( onoff>0 ){
             db->flags |= aFlagOp[i].mask;
           }else if( onoff==0 ){
@@ -143065,7 +143486,7 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
   sqlite3_mutex_leave(db->mutex);
   db->magic = SQLITE_MAGIC_CLOSED;
   sqlite3_mutex_free(db->mutex);
-  assert( db->lookaside.nOut==0 );  /* Fails on a lookaside memory leak */
+  assert( sqlite3LookasideUsed(db,0)==0 );
   if( db->lookaside.bMalloced ){
     sqlite3_free(db->lookaside.pStart);
   }
@@ -143093,7 +143514,7 @@ SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db, int tripCode){
   ** the database rollback and schema reset, which can cause false
   ** corruption reports in some cases.  */
   sqlite3BtreeEnterAll(db);
-  schemaChange = (db->flags & SQLITE_InternChanges)!=0 && db->init.busy==0;
+  schemaChange = (db->mDbFlags & DBFLAG_SchemaChange)!=0 && db->init.busy==0;
 
   for(i=0; i<db->nDb; i++){
     Btree *p = db->aDb[i].pBt;
@@ -143107,7 +143528,7 @@ SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db, int tripCode){
   sqlite3VtabRollback(db);
   sqlite3EndBenignMalloc();
 
-  if( (db->flags&SQLITE_InternChanges)!=0 && db->init.busy==0 ){
+  if( (db->mDbFlags&DBFLAG_SchemaChange)!=0 && db->init.busy==0 ){
     sqlite3ExpirePreparedStatements(db);
     sqlite3ResetAllSchemasOfConnection(db);
   }
@@ -144011,7 +144432,8 @@ SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){
 ** checkpointed. If an error is encountered it is returned immediately -
 ** no attempt is made to checkpoint any remaining databases.
 **
-** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
+** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL, RESTART
+** or TRUNCATE.
 */
 SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3 *db, int iDb, int eMode, int *pnLog, int *pnCkpt){
   int rc = SQLITE_OK;             /* Return code */
@@ -144531,7 +144953,7 @@ SQLITE_PRIVATE int sqlite3ParseUri(
       if( nOpt==3 && memcmp("vfs", zOpt, 3)==0 ){
         zVfs = zVal;
       }else{
-        struct OpenMode {
+        const struct OpenMode {
           const char *z;
           int mode;
         } *aMode = 0;
@@ -144540,7 +144962,7 @@ SQLITE_PRIVATE int sqlite3ParseUri(
         int limit = 0;
 
         if( nOpt==5 && memcmp("cache", zOpt, 5)==0 ){
-          static struct OpenMode aCacheMode[] = {
+          static const struct OpenMode aCacheMode[] = {
             { "shared",  SQLITE_OPEN_SHAREDCACHE },
             { "private", SQLITE_OPEN_PRIVATECACHE },
             { 0, 0 }
@@ -144552,7 +144974,7 @@ SQLITE_PRIVATE int sqlite3ParseUri(
           zModeType = "cache";
         }
         if( nOpt==4 && memcmp("mode", zOpt, 4)==0 ){
-          static struct OpenMode aOpenMode[] = {
+          static const struct OpenMode aOpenMode[] = {
             { "ro",  SQLITE_OPEN_READONLY },
             { "rw",  SQLITE_OPEN_READWRITE }, 
             { "rwc", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE },
@@ -144886,6 +145308,12 @@ static int openDatabase(
   }
 #endif
 
+#ifdef SQLITE_ENABLE_DBPAGE_VTAB
+  if( !db->mallocFailed && rc==SQLITE_OK){
+    rc = sqlite3DbpageRegister(db);
+  }
+#endif
+
 #ifdef SQLITE_ENABLE_DBSTAT_VTAB
   if( !db->mallocFailed && rc==SQLITE_OK){
     rc = sqlite3DbstatRegister(db);
@@ -145546,7 +145974,7 @@ SQLITE_API int sqlite3_test_control(int op, ...){
     ** This action provides a run-time test to see how the ALWAYS and
     ** NEVER macros were defined at compile-time.
     **
-    ** The return value is ALWAYS(X).  
+    ** The return value is ALWAYS(X) if X is true, or 0 if X is false.
     **
     ** The recommended test is X==2.  If the return value is 2, that means
     ** ALWAYS() and NEVER() are both no-op pass-through macros, which is the
@@ -145569,7 +145997,7 @@ SQLITE_API int sqlite3_test_control(int op, ...){
     */
     case SQLITE_TESTCTRL_ALWAYS: {
       int x = va_arg(ap,int);
-      rc = ALWAYS(x);
+      rc = x ? ALWAYS(x) : 0;
       break;
     }
 
@@ -145636,22 +146064,6 @@ SQLITE_API int sqlite3_test_control(int op, ...){
     }
 #endif 
 
-    /* sqlite3_test_control(SQLITE_TESTCTRL_SCRATCHMALLOC, sz, &pNew, pFree);
-    **
-    ** Pass pFree into sqlite3ScratchFree(). 
-    ** If sz>0 then allocate a scratch buffer into pNew.  
-    */
-    case SQLITE_TESTCTRL_SCRATCHMALLOC: {
-      void *pFree, **ppNew;
-      int sz;
-      sz = va_arg(ap, int);
-      ppNew = va_arg(ap, void**);
-      pFree = va_arg(ap, void*);
-      if( sz ) *ppNew = sqlite3ScratchMalloc(sz);
-      sqlite3ScratchFree(pFree);
-      break;
-    }
-
 #ifndef SQLITE_UNTESTABLE
     /*   sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, int onoff);
     **
@@ -145795,7 +146207,7 @@ SQLITE_API sqlite3_int64 sqlite3_uri_int64(
 ){
   const char *z = sqlite3_uri_parameter(zFilename, zParam);
   sqlite3_int64 v;
-  if( z && sqlite3DecOrHexToI64(z, &v)==SQLITE_OK ){
+  if( z && sqlite3DecOrHexToI64(z, &v)==0 ){
     bDflt = v;
   }
   return bDflt;
@@ -168393,7 +168805,7 @@ static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){
   int rc;                         /* Return code */
   RtreeNode *pLeaf = 0;           /* Leaf node containing record iDelete */
   int iCell;                      /* Index of iDelete cell in pLeaf */
-  RtreeNode *pRoot;               /* Root node of rtree structure */
+  RtreeNode *pRoot = 0;           /* Root node of rtree structure */
 
 
   /* Obtain a reference to the root node to initialize Rtree.iDepth */
@@ -168954,7 +169366,7 @@ static int getNodeSize(
     if( rc!=SQLITE_OK ){
       *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));
     }else if( pRtree->iNodeSize<(512-64) ){
-      rc = SQLITE_CORRUPT;
+      rc = SQLITE_CORRUPT_VTAB;
       *pzErr = sqlite3_mprintf("undersize RTree blobs in \"%q_node\"",
                                pRtree->zName);
     }
@@ -169421,15 +169833,15 @@ static int icuLikeCompare(
   const uint8_t *zString,    /* The UTF-8 string to compare against */
   const UChar32 uEsc         /* The escape character */
 ){
-  static const int MATCH_ONE = (UChar32)'_';
-  static const int MATCH_ALL = (UChar32)'%';
+  static const uint32_t MATCH_ONE = (uint32_t)'_';
+  static const uint32_t MATCH_ALL = (uint32_t)'%';
 
   int prevEscape = 0;     /* True if the previous character was uEsc */
 
   while( 1 ){
 
     /* Read (and consume) the next character from the input pattern. */
-    UChar32 uPattern;
+    uint32_t uPattern;
     SQLITE_ICU_READ_UTF8(zPattern, uPattern);
     if( uPattern==0 ) break;
 
@@ -169471,16 +169883,16 @@ static int icuLikeCompare(
       if( *zString==0 ) return 0;
       SQLITE_ICU_SKIP_UTF8(zString);
 
-    }else if( !prevEscape && uPattern==uEsc){
+    }else if( !prevEscape && uPattern==(uint32_t)uEsc){
       /* Case 3. */
       prevEscape = 1;
 
     }else{
       /* Case 4. */
-      UChar32 uString;
+      uint32_t uString;
       SQLITE_ICU_READ_UTF8(zString, uString);
-      uString = u_foldCase(uString, U_FOLD_CASE_DEFAULT);
-      uPattern = u_foldCase(uPattern, U_FOLD_CASE_DEFAULT);
+      uString = (uint32_t)u_foldCase((UChar32)uString, U_FOLD_CASE_DEFAULT);
+      uPattern = (uint32_t)u_foldCase((UChar32)uPattern, U_FOLD_CASE_DEFAULT);
       if( uString!=uPattern ){
         return 0;
       }
@@ -170577,6 +170989,28 @@ SQLITE_API sqlite3rbu *sqlite3rbu_vacuum(
 );
 
 /*
+** Configure a limit for the amount of temp space that may be used by
+** the RBU handle passed as the first argument. The new limit is specified
+** in bytes by the second parameter. If it is positive, the limit is updated.
+** If the second parameter to this function is passed zero, then the limit
+** is removed entirely. If the second parameter is negative, the limit is
+** not modified (this is useful for querying the current limit).
+**
+** In all cases the returned value is the current limit in bytes (zero 
+** indicates unlimited).
+**
+** If the temp space limit is exceeded during operation, an SQLITE_FULL
+** error is returned.
+*/
+SQLITE_API sqlite3_int64 sqlite3rbu_temp_size_limit(sqlite3rbu*, sqlite3_int64);
+
+/*
+** Return the current amount of temp file space, in bytes, currently used by 
+** the RBU handle passed as the only argument.
+*/
+SQLITE_API sqlite3_int64 sqlite3rbu_temp_size(sqlite3rbu*);
+
+/*
 ** Internally, each RBU connection uses a separate SQLite database 
 ** connection to access the target and rbu update databases. This
 ** API allows the application direct access to these database handles.
@@ -170702,7 +171136,7 @@ SQLITE_API sqlite3_int64 sqlite3rbu_progress(sqlite3rbu *pRbu);
 ** table exists but is not correctly populated, the value of the *pnOne
 ** output variable during stage 1 is undefined.
 */
-SQLITE_API void sqlite3rbu_bp_progress(sqlite3rbu *pRbu, int *pnOne, int *pnTwo);
+SQLITE_API void sqlite3rbu_bp_progress(sqlite3rbu *pRbu, int *pnOne, int*pnTwo);
 
 /*
 ** Obtain an indication as to the current stage of an RBU update or vacuum.
@@ -170812,6 +171246,13 @@ SQLITE_API void sqlite3rbu_destroy_vfs(const char *zName);
 /* Maximum number of prepared UPDATE statements held by this module */
 #define SQLITE_RBU_UPDATE_CACHESIZE 16
 
+/* Delta checksums disabled by default.  Compile with -DRBU_ENABLE_DELTA_CKSUM
+** to enable checksum verification.
+*/
+#ifndef RBU_ENABLE_DELTA_CKSUM
+# define RBU_ENABLE_DELTA_CKSUM 0
+#endif
+
 /*
 ** Swap two objects of type TYPE.
 */
@@ -171087,6 +171528,8 @@ struct sqlite3rbu {
   int pgsz;
   u8 *aBuf;
   i64 iWalCksum;
+  i64 szTemp;                     /* Current size of all temp files in use */
+  i64 szTempLimit;                /* Total size limit for temp files */
 
   /* Used in RBU vacuum mode only */
   int nRbu;                       /* Number of RBU VFS in the stack */
@@ -171095,23 +171538,33 @@ struct sqlite3rbu {
 
 /*
 ** An rbu VFS is implemented using an instance of this structure.
+**
+** Variable pRbu is only non-NULL for automatically created RBU VFS objects.
+** It is NULL for RBU VFS objects created explicitly using
+** sqlite3rbu_create_vfs(). It is used to track the total amount of temp
+** space used by the RBU handle.
 */
 struct rbu_vfs {
   sqlite3_vfs base;               /* rbu VFS shim methods */
   sqlite3_vfs *pRealVfs;          /* Underlying VFS */
   sqlite3_mutex *mutex;           /* Mutex to protect pMain */
+  sqlite3rbu *pRbu;               /* Owner RBU object */
   rbu_file *pMain;                /* Linked list of main db files */
 };
 
 /*
 ** Each file opened by an rbu VFS is represented by an instance of
 ** the following structure.
+**
+** If this is a temporary file (pRbu!=0 && flags&DELETE_ON_CLOSE), variable
+** "sz" is set to the current size of the database file.
 */
 struct rbu_file {
   sqlite3_file base;              /* sqlite3_file methods */
   sqlite3_file *pReal;            /* Underlying file handle */
   rbu_vfs *pRbuVfs;               /* Pointer to the rbu_vfs object */
   sqlite3rbu *pRbu;               /* Pointer to rbu object (rbu target only) */
+  i64 sz;                         /* Size of file in bytes (temp only) */
 
   int openFlags;                  /* Flags this file was opened with */
   u32 iCookie;                    /* Cookie value for main db files */
@@ -171174,6 +171627,7 @@ static unsigned int rbuDeltaGetInt(const char **pz, int *pLen){
   return v;
 }
 
+#if RBU_ENABLE_DELTA_CKSUM
 /*
 ** Compute a 32-bit checksum on the N-byte buffer.  Return the result.
 */
@@ -171208,6 +171662,7 @@ static unsigned int rbuDeltaChecksum(const char *zIn, size_t N){
   }
   return sum3;
 }
+#endif
 
 /*
 ** Apply a delta.
@@ -171238,7 +171693,7 @@ static int rbuDeltaApply(
 ){
   unsigned int limit;
   unsigned int total = 0;
-#ifndef FOSSIL_OMIT_DELTA_CKSUM_TEST
+#if RBU_ENABLE_DELTA_CKSUM
   char *zOrigOut = zOut;
 #endif
 
@@ -171293,7 +171748,7 @@ static int rbuDeltaApply(
       case ';': {
         zDelta++; lenDelta--;
         zOut[0] = 0;
-#ifndef FOSSIL_OMIT_DELTA_CKSUM_TEST
+#if RBU_ENABLE_DELTA_CKSUM
         if( cnt!=rbuDeltaChecksum(zOrigOut, total) ){
           /* ERROR:  bad checksum */
           return -1;
@@ -174125,6 +174580,7 @@ static void rbuCreateVfs(sqlite3rbu *p){
     sqlite3_vfs *pVfs = sqlite3_vfs_find(zRnd);
     assert( pVfs );
     p->zVfsName = pVfs->zName;
+    ((rbu_vfs*)pVfs)->pRbu = p;
   }
 }
 
@@ -174497,6 +174953,7 @@ SQLITE_API int sqlite3rbu_close(sqlite3rbu *p, char **pzErrmsg){
     /* Close the open database handle and VFS object. */
     sqlite3_close(p->dbRbu);
     sqlite3_close(p->dbMain);
+    assert( p->szTemp==0 );
     rbuDeleteVfs(p);
     sqlite3_free(p->aBuf);
     sqlite3_free(p->aFrame);
@@ -174684,6 +175141,7 @@ SQLITE_API int sqlite3rbu_savestate(sqlite3rbu *p){
 */
 
 static void rbuUnlockShm(rbu_file *p){
+  assert( p->openFlags & SQLITE_OPEN_MAIN_DB );
   if( p->pRbu ){
     int (*xShmLock)(sqlite3_file*,int,int,int) = p->pReal->pMethods->xShmLock;
     int i;
@@ -174697,6 +175155,18 @@ static void rbuUnlockShm(rbu_file *p){
 }
 
 /*
+*/
+static int rbuUpdateTempSize(rbu_file *pFd, sqlite3_int64 nNew){
+  sqlite3rbu *pRbu = pFd->pRbu;
+  i64 nDiff = nNew - pFd->sz;
+  pRbu->szTemp += nDiff;
+  pFd->sz = nNew;
+  assert( pRbu->szTemp>=0 );
+  if( pRbu->szTempLimit && pRbu->szTemp>pRbu->szTempLimit ) return SQLITE_FULL;
+  return SQLITE_OK;
+}
+
+/*
 ** Close an rbu file.
 */
 static int rbuVfsClose(sqlite3_file *pFile){
@@ -174721,6 +175191,9 @@ static int rbuVfsClose(sqlite3_file *pFile){
     rbuUnlockShm(p);
     p->pReal->pMethods->xShmUnmap(p->pReal, 0);
   }
+  else if( (p->openFlags & SQLITE_OPEN_DELETEONCLOSE) && p->pRbu ){
+    rbuUpdateTempSize(p, 0);
+  }
 
   /* Close the underlying file handle */
   rc = p->pReal->pMethods->xClose(p->pReal);
@@ -174838,11 +175311,19 @@ static int rbuVfsWrite(
     assert( p->openFlags & SQLITE_OPEN_MAIN_DB );
     rc = rbuCaptureDbWrite(p->pRbu, iOfst);
   }else{
-    if( pRbu && pRbu->eStage==RBU_STAGE_OAL 
-     && (p->openFlags & SQLITE_OPEN_WAL) 
-     && iOfst>=pRbu->iOalSz
-    ){
-      pRbu->iOalSz = iAmt + iOfst;
+    if( pRbu ){
+      if( pRbu->eStage==RBU_STAGE_OAL 
+       && (p->openFlags & SQLITE_OPEN_WAL) 
+       && iOfst>=pRbu->iOalSz
+      ){
+        pRbu->iOalSz = iAmt + iOfst;
+      }else if( p->openFlags & SQLITE_OPEN_DELETEONCLOSE ){
+        i64 szNew = iAmt+iOfst;
+        if( szNew>p->sz ){
+          rc = rbuUpdateTempSize(p, szNew);
+          if( rc!=SQLITE_OK ) return rc;
+        }
+      }
     }
     rc = p->pReal->pMethods->xWrite(p->pReal, zBuf, iAmt, iOfst);
     if( rc==SQLITE_OK && iOfst==0 && (p->openFlags & SQLITE_OPEN_MAIN_DB) ){
@@ -174861,6 +175342,10 @@ static int rbuVfsWrite(
 */
 static int rbuVfsTruncate(sqlite3_file *pFile, sqlite_int64 size){
   rbu_file *p = (rbu_file*)pFile;
+  if( (p->openFlags & SQLITE_OPEN_DELETEONCLOSE) && p->pRbu ){
+    int rc = rbuUpdateTempSize(p, size);
+    if( rc!=SQLITE_OK ) return rc;
+  }
   return p->pReal->pMethods->xTruncate(p->pReal, size);
 }
 
@@ -175250,6 +175735,8 @@ static int rbuVfsOpen(
         pDb->pWalFd = pFd;
       }
     }
+  }else{
+    pFd->pRbu = pRbuVfs->pRbu;
   }
 
   if( oflags & SQLITE_OPEN_MAIN_DB 
@@ -175326,7 +175813,9 @@ static int rbuVfsAccess(
       if( *pResOut ){
         rc = SQLITE_CANTOPEN;
       }else{
-        *pResOut = 1;
+        sqlite3_int64 sz = 0;
+        rc = rbuVfsFileSize(&pDb->base, &sz);
+        *pResOut = (sz>0);
       }
     }
   }
@@ -175515,6 +176004,20 @@ SQLITE_API int sqlite3rbu_create_vfs(const char *zName, const char *zParent){
   return rc;
 }
 
+/*
+** Configure the aggregate temp file size limit for this RBU handle.
+*/
+SQLITE_API sqlite3_int64 sqlite3rbu_temp_size_limit(sqlite3rbu *pRbu, sqlite3_int64 n){
+  if( n>=0 ){
+    pRbu->szTempLimit = n;
+  }
+  return pRbu->szTempLimit;
+}
+
+SQLITE_API sqlite3_int64 sqlite3rbu_temp_size(sqlite3rbu *pRbu){
+  return pRbu->szTemp;
+}
+
 
 /**************************************************************************/
 
@@ -176229,6 +176732,338 @@ SQLITE_PRIVATE int sqlite3DbstatRegister(sqlite3 *db){ return SQLITE_OK; }
 #endif /* SQLITE_ENABLE_DBSTAT_VTAB */
 
 /************** End of dbstat.c **********************************************/
+/************** Begin file dbpage.c ******************************************/
+/*
+** 2017-10-11
+**
+** The author disclaims copyright to this source code.  In place of
+** a legal notice, here is a blessing:
+**
+**    May you do good and not evil.
+**    May you find forgiveness for yourself and forgive others.
+**    May you share freely, never taking more than you give.
+**
+******************************************************************************
+**
+** This file contains an implementation of the "sqlite_dbpage" virtual table.
+**
+** The sqlite_dbpage virtual table is used to read or write whole raw
+** pages of the database file.  The pager interface is used so that 
+** uncommitted changes and changes recorded in the WAL file are correctly
+** retrieved.
+**
+** Usage example:
+**
+**    SELECT data FROM sqlite_dbpage('aux1') WHERE pgno=123;
+**
+** This is an eponymous virtual table so it does not need to be created before
+** use.  The optional argument to the sqlite_dbpage() table name is the
+** schema for the database file that is to be read.  The default schema is
+** "main".
+**
+** The data field of sqlite_dbpage table can be updated.  The new
+** value must be a BLOB which is the correct page size, otherwise the
+** update fails.  Rows may not be deleted or inserted.
+*/
+
+/* #include "sqliteInt.h"   ** Requires access to internal data structures ** */
+#if (defined(SQLITE_ENABLE_DBPAGE_VTAB) || defined(SQLITE_TEST)) \
+    && !defined(SQLITE_OMIT_VIRTUALTABLE)
+
+typedef struct DbpageTable DbpageTable;
+typedef struct DbpageCursor DbpageCursor;
+
+struct DbpageCursor {
+  sqlite3_vtab_cursor base;       /* Base class.  Must be first */
+  int pgno;                       /* Current page number */
+  int mxPgno;                     /* Last page to visit on this scan */
+};
+
+struct DbpageTable {
+  sqlite3_vtab base;              /* Base class.  Must be first */
+  sqlite3 *db;                    /* The database */
+  Pager *pPager;                  /* Pager being read/written */
+  int iDb;                        /* Index of database to analyze */
+  int szPage;                     /* Size of each page in bytes */
+  int nPage;                      /* Number of pages in the file */
+};
+
+/*
+** Connect to or create a dbpagevfs virtual table.
+*/
+static int dbpageConnect(
+  sqlite3 *db,
+  void *pAux,
+  int argc, const char *const*argv,
+  sqlite3_vtab **ppVtab,
+  char **pzErr
+){
+  DbpageTable *pTab = 0;
+  int rc = SQLITE_OK;
+  int iDb;
+
+  if( argc>=4 ){
+    Token nm;
+    sqlite3TokenInit(&nm, (char*)argv[3]);
+    iDb = sqlite3FindDb(db, &nm);
+    if( iDb<0 ){
+      *pzErr = sqlite3_mprintf("no such schema: %s", argv[3]);
+      return SQLITE_ERROR;
+    }
+  }else{
+    iDb = 0;
+  }
+  rc = sqlite3_declare_vtab(db, 
+          "CREATE TABLE x(pgno INTEGER PRIMARY KEY, data BLOB, schema HIDDEN)");
+  if( rc==SQLITE_OK ){
+    pTab = (DbpageTable *)sqlite3_malloc64(sizeof(DbpageTable));
+    if( pTab==0 ) rc = SQLITE_NOMEM_BKPT;
+  }
+
+  assert( rc==SQLITE_OK || pTab==0 );
+  if( rc==SQLITE_OK ){
+    Btree *pBt = db->aDb[iDb].pBt;
+    memset(pTab, 0, sizeof(DbpageTable));
+    pTab->db = db;
+    pTab->iDb = iDb;
+    pTab->pPager = pBt ? sqlite3BtreePager(pBt) : 0;
+  }
+
+  *ppVtab = (sqlite3_vtab*)pTab;
+  return rc;
+}
+
+/*
+** Disconnect from or destroy a dbpagevfs virtual table.
+*/
+static int dbpageDisconnect(sqlite3_vtab *pVtab){
+  sqlite3_free(pVtab);
+  return SQLITE_OK;
+}
+
+/*
+** idxNum:
+**
+**     0     full table scan
+**     1     pgno=?1
+*/
+static int dbpageBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
+  int i;
+  pIdxInfo->estimatedCost = 1.0e6;  /* Initial cost estimate */
+  for(i=0; i<pIdxInfo->nConstraint; i++){
+    struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[i];
+    if( p->usable && p->iColumn<=0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ ){
+      pIdxInfo->estimatedRows = 1;
+      pIdxInfo->idxFlags = SQLITE_INDEX_SCAN_UNIQUE;
+      pIdxInfo->estimatedCost = 1.0;
+      pIdxInfo->idxNum = 1;
+      pIdxInfo->aConstraintUsage[i].argvIndex = 1;
+      pIdxInfo->aConstraintUsage[i].omit = 1;
+      break;
+    }
+  }
+  if( pIdxInfo->nOrderBy>=1
+   && pIdxInfo->aOrderBy[0].iColumn<=0
+   && pIdxInfo->aOrderBy[0].desc==0
+  ){
+    pIdxInfo->orderByConsumed = 1;
+  }
+  return SQLITE_OK;
+}
+
+/*
+** Open a new dbpagevfs cursor.
+*/
+static int dbpageOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){
+  DbpageCursor *pCsr;
+
+  pCsr = (DbpageCursor *)sqlite3_malloc64(sizeof(DbpageCursor));
+  if( pCsr==0 ){
+    return SQLITE_NOMEM_BKPT;
+  }else{
+    memset(pCsr, 0, sizeof(DbpageCursor));
+    pCsr->base.pVtab = pVTab;
+    pCsr->pgno = -1;
+  }
+
+  *ppCursor = (sqlite3_vtab_cursor *)pCsr;
+  return SQLITE_OK;
+}
+
+/*
+** Close a dbpagevfs cursor.
+*/
+static int dbpageClose(sqlite3_vtab_cursor *pCursor){
+  DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+  sqlite3_free(pCsr);
+  return SQLITE_OK;
+}
+
+/*
+** Move a dbpagevfs cursor to the next entry in the file.
+*/
+static int dbpageNext(sqlite3_vtab_cursor *pCursor){
+  int rc = SQLITE_OK;
+  DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+  pCsr->pgno++;
+  return rc;
+}
+
+static int dbpageEof(sqlite3_vtab_cursor *pCursor){
+  DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+  return pCsr->pgno > pCsr->mxPgno;
+}
+
+static int dbpageFilter(
+  sqlite3_vtab_cursor *pCursor, 
+  int idxNum, const char *idxStr,
+  int argc, sqlite3_value **argv
+){
+  DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+  DbpageTable *pTab = (DbpageTable *)pCursor->pVtab;
+  int rc = SQLITE_OK;
+  Btree *pBt = pTab->db->aDb[pTab->iDb].pBt;
+
+  pTab->szPage = sqlite3BtreeGetPageSize(pBt);
+  pTab->nPage = sqlite3BtreeLastPage(pBt);
+  if( idxNum==1 ){
+    pCsr->pgno = sqlite3_value_int(argv[0]);
+    if( pCsr->pgno<1 || pCsr->pgno>pTab->nPage ){
+      pCsr->pgno = 1;
+      pCsr->mxPgno = 0;
+    }else{
+      pCsr->mxPgno = pCsr->pgno;
+    }
+  }else{
+    pCsr->pgno = 1;
+    pCsr->mxPgno = pTab->nPage;
+  }
+  return rc;
+}
+
+static int dbpageColumn(
+  sqlite3_vtab_cursor *pCursor, 
+  sqlite3_context *ctx, 
+  int i
+){
+  DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+  DbpageTable *pTab = (DbpageTable *)pCursor->pVtab;
+  int rc = SQLITE_OK;
+  switch( i ){
+    case 0: {           /* pgno */
+      sqlite3_result_int(ctx, pCsr->pgno);
+      break;
+    }
+    case 1: {           /* data */
+      DbPage *pDbPage = 0;
+      rc = sqlite3PagerGet(pTab->pPager, pCsr->pgno, (DbPage**)&pDbPage, 0);
+      if( rc==SQLITE_OK ){
+        sqlite3_result_blob(ctx, sqlite3PagerGetData(pDbPage), pTab->szPage,
+                            SQLITE_TRANSIENT);
+      }
+      sqlite3PagerUnref(pDbPage);
+      break;
+    }
+    default: {          /* schema */
+      sqlite3 *db = sqlite3_context_db_handle(ctx);
+      sqlite3_result_text(ctx, db->aDb[pTab->iDb].zDbSName, -1, SQLITE_STATIC);
+      break;
+    }
+  }
+  return SQLITE_OK;
+}
+
+static int dbpageRowid(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){
+  DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+  *pRowid = pCsr->pgno;
+  return SQLITE_OK;
+}
+
+static int dbpageUpdate(
+  sqlite3_vtab *pVtab,
+  int argc,
+  sqlite3_value **argv,
+  sqlite_int64 *pRowid
+){
+  DbpageTable *pTab = (DbpageTable *)pVtab;
+  int pgno;
+  DbPage *pDbPage = 0;
+  int rc = SQLITE_OK;
+  char *zErr = 0;
+
+  if( argc==1 ){
+    zErr = "cannot delete";
+    goto update_fail;
+  }
+  pgno = sqlite3_value_int(argv[0]);
+  if( pgno<1 || pgno>pTab->nPage ){
+    zErr = "bad page number";
+    goto update_fail;
+  }
+  if( sqlite3_value_int(argv[1])!=pgno ){
+    zErr = "cannot insert";
+    goto update_fail;
+  }
+  if( sqlite3_value_type(argv[3])!=SQLITE_BLOB 
+   || sqlite3_value_bytes(argv[3])!=pTab->szPage 
+  ){
+    zErr = "bad page value";
+    goto update_fail;
+  }
+  rc = sqlite3PagerGet(pTab->pPager, pgno, (DbPage**)&pDbPage, 0);
+  if( rc==SQLITE_OK ){
+    rc = sqlite3PagerWrite(pDbPage);
+    if( rc==SQLITE_OK ){
+      memcpy(sqlite3PagerGetData(pDbPage),
+             sqlite3_value_blob(argv[3]),
+             pTab->szPage);
+    }
+  }
+  sqlite3PagerUnref(pDbPage);
+  return rc;
+
+update_fail:
+  sqlite3_free(pVtab->zErrMsg);
+  pVtab->zErrMsg = sqlite3_mprintf("%s", zErr);
+  return SQLITE_ERROR;
+}
+
+/*
+** Invoke this routine to register the "dbpage" virtual table module
+*/
+SQLITE_PRIVATE int sqlite3DbpageRegister(sqlite3 *db){
+  static sqlite3_module dbpage_module = {
+    0,                            /* iVersion */
+    dbpageConnect,                /* xCreate */
+    dbpageConnect,                /* xConnect */
+    dbpageBestIndex,              /* xBestIndex */
+    dbpageDisconnect,             /* xDisconnect */
+    dbpageDisconnect,             /* xDestroy */
+    dbpageOpen,                   /* xOpen - open a cursor */
+    dbpageClose,                  /* xClose - close a cursor */
+    dbpageFilter,                 /* xFilter - configure scan constraints */
+    dbpageNext,                   /* xNext - advance a cursor */
+    dbpageEof,                    /* xEof - check for end of scan */
+    dbpageColumn,                 /* xColumn - read data */
+    dbpageRowid,                  /* xRowid - read data */
+    dbpageUpdate,                 /* xUpdate */
+    0,                            /* xBegin */
+    0,                            /* xSync */
+    0,                            /* xCommit */
+    0,                            /* xRollback */
+    0,                            /* xFindMethod */
+    0,                            /* xRename */
+    0,                            /* xSavepoint */
+    0,                            /* xRelease */
+    0,                            /* xRollbackTo */
+  };
+  return sqlite3_create_module(db, "sqlite_dbpage", &dbpage_module, 0);
+}
+#elif defined(SQLITE_ENABLE_DBPAGE_VTAB)
+SQLITE_PRIVATE int sqlite3DbpageRegister(sqlite3 *db){ return SQLITE_OK; }
+#endif /* SQLITE_ENABLE_DBSTAT_VTAB */
+
+/************** End of dbpage.c **********************************************/
 /************** Begin file sqlite3session.c **********************************/
 
 #if defined(SQLITE_ENABLE_SESSION) && defined(SQLITE_ENABLE_PREUPDATE_HOOK)
@@ -184820,7 +185655,8 @@ static int sqlite3Fts5UnicodeFold(int c, int bRemoveDiacritic);
 **    fts5YY_MAX_SHIFT       Maximum value for shift actions
 **    fts5YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions
 **    fts5YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions
-**    fts5YY_MIN_REDUCE      Maximum value for reduce actions
+**    fts5YY_MIN_REDUCE      Minimum value for reduce actions
+**    fts5YY_MAX_REDUCE      Maximum value for reduce actions
 **    fts5YY_ERROR_ACTION    The fts5yy_action[] code for syntax error
 **    fts5YY_ACCEPT_ACTION   The fts5yy_action[] code for accept
 **    fts5YY_NO_ACTION       The fts5yy_action[] code for no-op
@@ -200562,7 +201398,7 @@ static void fts5SourceIdFunc(
 ){
   assert( nArg==0 );
   UNUSED_PARAM2(nArg, apUnused);
-  sqlite3_result_text(pCtx, "fts5: 2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8", -1, SQLITE_TRANSIENT);
+  sqlite3_result_text(pCtx, "fts5: 2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827", -1, SQLITE_TRANSIENT);
 }
 
 static int fts5Init(sqlite3 *db){
@@ -203826,6 +204662,11 @@ static int sqlite3Fts5GetVarintLen(u32 iVal){
 **   the number of fts5 rows that contain at least one instance of term
 **   $term. Field $cnt is set to the total number of instances of term 
 **   $term in the database.
+**
+** instance:
+**     CREATE TABLE vocab(term, doc, col, offset, PRIMARY KEY(<all-fields>));
+**
+**   One row for each term instance in the database. 
 */
 
 
@@ -203841,7 +204682,7 @@ struct Fts5VocabTable {
   char *zFts5Db;                  /* Db containing fts5 table */
   sqlite3 *db;                    /* Database handle */
   Fts5Global *pGlobal;            /* FTS5 global object for this database */
-  int eType;                      /* FTS5_VOCAB_COL or ROW */
+  int eType;                      /* FTS5_VOCAB_COL, ROW or INSTANCE */
 };
 
 struct Fts5VocabCursor {
@@ -203861,16 +204702,22 @@ struct Fts5VocabCursor {
   i64 *aCnt;
   i64 *aDoc;
 
-  /* Output values used by 'row' and 'col' tables */
+  /* Output values used by all tables. */
   i64 rowid;                      /* This table's current rowid value */
   Fts5Buffer term;                /* Current value of 'term' column */
+
+  /* Output values Used by 'instance' tables only */
+  i64 iInstPos;
+  int iInstOff;
 };
 
-#define FTS5_VOCAB_COL    0
-#define FTS5_VOCAB_ROW    1
+#define FTS5_VOCAB_COL      0
+#define FTS5_VOCAB_ROW      1
+#define FTS5_VOCAB_INSTANCE 2
 
 #define FTS5_VOCAB_COL_SCHEMA  "term, col, doc, cnt"
 #define FTS5_VOCAB_ROW_SCHEMA  "term, doc, cnt"
+#define FTS5_VOCAB_INST_SCHEMA "term, doc, col, offset"
 
 /*
 ** Bits for the mask used as the idxNum value by xBestIndex/xFilter.
@@ -203898,6 +204745,9 @@ static int fts5VocabTableType(const char *zType, char **pzErr, int *peType){
     if( sqlite3_stricmp(zCopy, "row")==0 ){
       *peType = FTS5_VOCAB_ROW;
     }else
+    if( sqlite3_stricmp(zCopy, "instance")==0 ){
+      *peType = FTS5_VOCAB_INSTANCE;
+    }else
     {
       *pzErr = sqlite3_mprintf("fts5vocab: unknown table type: %Q", zCopy);
       rc = SQLITE_ERROR;
@@ -203958,7 +204808,8 @@ static int fts5VocabInitVtab(
 ){
   const char *const azSchema[] = {
     "CREATE TABlE vocab(" FTS5_VOCAB_COL_SCHEMA  ")", 
-    "CREATE TABlE vocab(" FTS5_VOCAB_ROW_SCHEMA  ")"
+    "CREATE TABlE vocab(" FTS5_VOCAB_ROW_SCHEMA  ")",
+    "CREATE TABlE vocab(" FTS5_VOCAB_INST_SCHEMA ")"
   };
 
   Fts5VocabTable *pRet = 0;
@@ -204032,6 +204883,15 @@ static int fts5VocabCreateMethod(
 
 /* 
 ** Implementation of the xBestIndex method.
+**
+** Only constraints of the form:
+**
+**     term <= ?
+**     term == ?
+**     term >= ?
+**
+** are interpreted. Less-than and less-than-or-equal are treated 
+** identically, as are greater-than and greater-than-or-equal.
 */
 static int fts5VocabBestIndexMethod(
   sqlite3_vtab *pUnused,
@@ -204175,6 +205035,54 @@ static int fts5VocabCloseMethod(sqlite3_vtab_cursor *pCursor){
   return SQLITE_OK;
 }
 
+static int fts5VocabInstanceNewTerm(Fts5VocabCursor *pCsr){
+  int rc = SQLITE_OK;
+  
+  if( sqlite3Fts5IterEof(pCsr->pIter) ){
+    pCsr->bEof = 1;
+  }else{
+    const char *zTerm;
+    int nTerm;
+    zTerm = sqlite3Fts5IterTerm(pCsr->pIter, &nTerm);
+    if( pCsr->nLeTerm>=0 ){
+      int nCmp = MIN(nTerm, pCsr->nLeTerm);
+      int bCmp = memcmp(pCsr->zLeTerm, zTerm, nCmp);
+      if( bCmp<0 || (bCmp==0 && pCsr->nLeTerm<nTerm) ){
+        pCsr->bEof = 1;
+      }
+    }
+
+    sqlite3Fts5BufferSet(&rc, &pCsr->term, nTerm, (const u8*)zTerm);
+  }
+  return rc;
+}
+
+static int fts5VocabInstanceNext(Fts5VocabCursor *pCsr){
+  int eDetail = pCsr->pConfig->eDetail;
+  int rc = SQLITE_OK;
+  Fts5IndexIter *pIter = pCsr->pIter;
+  i64 *pp = &pCsr->iInstPos;
+  int *po = &pCsr->iInstOff;
+  
+  while( eDetail==FTS5_DETAIL_NONE
+      || sqlite3Fts5PoslistNext64(pIter->pData, pIter->nData, po, pp) 
+  ){
+    pCsr->iInstPos = 0;
+    pCsr->iInstOff = 0;
+
+    rc = sqlite3Fts5IterNextScan(pCsr->pIter);
+    if( rc==SQLITE_OK ){
+      rc = fts5VocabInstanceNewTerm(pCsr);
+      if( eDetail==FTS5_DETAIL_NONE ) break;
+    }
+    if( rc ){
+      pCsr->bEof = 1;
+      break;
+    }
+  }
+
+  return rc;
+}
 
 /*
 ** Advance the cursor to the next row in the table.
@@ -204187,13 +205095,17 @@ static int fts5VocabNextMethod(sqlite3_vtab_cursor *pCursor){
 
   pCsr->rowid++;
 
+  if( pTab->eType==FTS5_VOCAB_INSTANCE ){
+    return fts5VocabInstanceNext(pCsr);
+  }
+
   if( pTab->eType==FTS5_VOCAB_COL ){
     for(pCsr->iCol++; pCsr->iCol<nCol; pCsr->iCol++){
       if( pCsr->aDoc[pCsr->iCol] ) break;
     }
   }
 
-  if( pTab->eType==FTS5_VOCAB_ROW || pCsr->iCol>=nCol ){
+  if( pTab->eType!=FTS5_VOCAB_COL || pCsr->iCol>=nCol ){
     if( sqlite3Fts5IterEof(pCsr->pIter) ){
       pCsr->bEof = 1;
     }else{
@@ -204217,22 +205129,26 @@ static int fts5VocabNextMethod(sqlite3_vtab_cursor *pCursor){
 
       assert( pTab->eType==FTS5_VOCAB_COL || pTab->eType==FTS5_VOCAB_ROW );
       while( rc==SQLITE_OK ){
+        int eDetail = pCsr->pConfig->eDetail;
         const u8 *pPos; int nPos;   /* Position list */
         i64 iPos = 0;               /* 64-bit position read from poslist */
         int iOff = 0;               /* Current offset within position list */
 
         pPos = pCsr->pIter->pData;
         nPos = pCsr->pIter->nData;
-        switch( pCsr->pConfig->eDetail ){
-          case FTS5_DETAIL_FULL:
-            pPos = pCsr->pIter->pData;
-            nPos = pCsr->pIter->nData;
-            if( pTab->eType==FTS5_VOCAB_ROW ){
+
+        switch( pTab->eType ){
+          case FTS5_VOCAB_ROW:
+            if( eDetail==FTS5_DETAIL_FULL ){
               while( 0==sqlite3Fts5PoslistNext64(pPos, nPos, &iOff, &iPos) ){
                 pCsr->aCnt[0]++;
               }
-              pCsr->aDoc[0]++;
-            }else{
+            }
+            pCsr->aDoc[0]++;
+            break;
+
+          case FTS5_VOCAB_COL:
+            if( eDetail==FTS5_DETAIL_FULL ){
               int iCol = -1;
               while( 0==sqlite3Fts5PoslistNext64(pPos, nPos, &iOff, &iPos) ){
                 int ii = FTS5_POS2COLUMN(iPos);
@@ -204246,13 +205162,7 @@ static int fts5VocabNextMethod(sqlite3_vtab_cursor *pCursor){
                   iCol = ii;
                 }
               }
-            }
-            break;
-
-          case FTS5_DETAIL_COLUMNS:
-            if( pTab->eType==FTS5_VOCAB_ROW ){
-              pCsr->aDoc[0]++;
-            }else{
+            }else if( eDetail==FTS5_DETAIL_COLUMNS ){
               while( 0==sqlite3Fts5PoslistNext64(pPos, nPos, &iOff,&iPos) ){
                 assert_nc( iPos>=0 && iPos<nCol );
                 if( iPos>=nCol ){
@@ -204261,18 +205171,21 @@ static int fts5VocabNextMethod(sqlite3_vtab_cursor *pCursor){
                 }
                 pCsr->aDoc[iPos]++;
               }
+            }else{
+              assert( eDetail==FTS5_DETAIL_NONE );
+              pCsr->aDoc[0]++;
             }
             break;
 
-          default: 
-            assert( pCsr->pConfig->eDetail==FTS5_DETAIL_NONE );
-            pCsr->aDoc[0]++;
+          default:
+            assert( pTab->eType==FTS5_VOCAB_INSTANCE );
             break;
         }
 
         if( rc==SQLITE_OK ){
           rc = sqlite3Fts5IterNextScan(pCsr->pIter);
         }
+        if( pTab->eType==FTS5_VOCAB_INSTANCE ) break;
 
         if( rc==SQLITE_OK ){
           zTerm = sqlite3Fts5IterTerm(pCsr->pIter, &nTerm);
@@ -204302,7 +205215,9 @@ static int fts5VocabFilterMethod(
   int nUnused,                    /* Number of elements in apVal */
   sqlite3_value **apVal           /* Arguments for the indexing scheme */
 ){
+  Fts5VocabTable *pTab = (Fts5VocabTable*)pCursor->pVtab;
   Fts5VocabCursor *pCsr = (Fts5VocabCursor*)pCursor;
+  int eType = pTab->eType;
   int rc = SQLITE_OK;
 
   int iVal = 0;
@@ -204342,11 +205257,16 @@ static int fts5VocabFilterMethod(
     }
   }
 
-
   if( rc==SQLITE_OK ){
     rc = sqlite3Fts5IndexQuery(pCsr->pIndex, zTerm, nTerm, f, 0, &pCsr->pIter);
   }
-  if( rc==SQLITE_OK ){
+  if( rc==SQLITE_OK && eType==FTS5_VOCAB_INSTANCE ){
+    rc = fts5VocabInstanceNewTerm(pCsr);
+  }
+  if( rc==SQLITE_OK 
+   && !pCsr->bEof 
+   && (eType!=FTS5_VOCAB_INSTANCE || pCsr->pConfig->eDetail!=FTS5_DETAIL_NONE)
+  ){
     rc = fts5VocabNextMethod(pCursor);
   }
 
@@ -204388,13 +205308,41 @@ static int fts5VocabColumnMethod(
     }else{
       iVal = pCsr->aCnt[pCsr->iCol];
     }
-  }else{
+  }else if( eType==FTS5_VOCAB_ROW ){
     assert( iCol==1 || iCol==2 );
     if( iCol==1 ){
       iVal = pCsr->aDoc[0];
     }else{
       iVal = pCsr->aCnt[0];
     }
+  }else{
+    assert( eType==FTS5_VOCAB_INSTANCE );
+    switch( iCol ){
+      case 1:
+        sqlite3_result_int64(pCtx, pCsr->pIter->iRowid);
+        break;
+      case 2: {
+        int ii = -1;
+        if( eDetail==FTS5_DETAIL_FULL ){
+          ii = FTS5_POS2COLUMN(pCsr->iInstPos);
+        }else if( eDetail==FTS5_DETAIL_COLUMNS ){
+          ii = (int)pCsr->iInstPos;
+        }
+        if( ii>=0 && ii<pCsr->pConfig->nCol ){
+          const char *z = pCsr->pConfig->azCol[ii];
+          sqlite3_result_text(pCtx, z, -1, SQLITE_STATIC);
+        }
+        break;
+      }
+      default: {
+        assert( iCol==3 );
+        if( eDetail==FTS5_DETAIL_FULL ){
+          int ii = FTS5_POS2OFFSET(pCsr->iInstPos);
+          sqlite3_result_int(pCtx, ii);
+        }
+        break;
+      }
+    }
   }
 
   if( iVal>0 ) sqlite3_result_int64(pCtx, iVal);
@@ -204698,7 +205646,7 @@ static int stmtBestIndex(
 ** This following structure defines all the methods for the 
 ** stmt virtual table.
 */
-static sqlite3_module stmtModule = {
+static const sqlite3_module stmtModule = {
   0,                         /* iVersion */
   0,                         /* xCreate */
   stmtConnect,               /* xConnect */
@@ -204750,7 +205698,28 @@ SQLITE_API int sqlite3_stmt_init(
 #endif
   return rc;
 }
+#if !defined(_WIN32) && !defined(SQLITE_TEST)
+SQLITE_API int sqlite3_extension_init(
+  sqlite3 *db, 
+  char **pzErrMsg,
+  const sqlite3_api_routines *pApi
+){
+  int rc = SQLITE_OK;
+  SQLITE_EXTENSION_INIT2(pApi);
+#ifndef SQLITE_OMIT_VIRTUALTABLE
+  rc = sqlite3StmtVtabInit(db);
+#endif
+  return rc;
+}
+#endif
 #endif /* SQLITE_CORE */
 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */
 
 /************** End of stmt.c ************************************************/
+#if __LINE__!=205719
+#undef SQLITE_SOURCE_ID
+#define SQLITE_SOURCE_ID      "2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de4alt2"
+#endif
+/* Return the source-id for this library */
+SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
+/************************** End of sqlite3.c ******************************/
similarity index 98%
rename from pkgs/sqlite3.20.0/compat/sqlite3/sqlite3.h
rename to pkgs/sqlite3.21.0/compat/sqlite3/sqlite3.h
index 7c5ecd5..48d05ab 100644 (file)
@@ -115,15 +115,17 @@ extern "C" {
 ** a string which identifies a particular check-in of SQLite
 ** within its configuration management system.  ^The SQLITE_SOURCE_ID
 ** string contains the date and time of the check-in (UTC) and a SHA1
-** or SHA3-256 hash of the entire source tree.
+** or SHA3-256 hash of the entire source tree.  If the source code has
+** been edited in any way since it was last checked in, then the last
+** four hexadecimal digits of the hash may be modified.
 **
 ** See also: [sqlite3_libversion()],
 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
 ** [sqlite_version()] and [sqlite_source_id()].
 */
-#define SQLITE_VERSION        "3.20.0"
-#define SQLITE_VERSION_NUMBER 3020000
-#define SQLITE_SOURCE_ID      "2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8"
+#define SQLITE_VERSION        "3.21.0"
+#define SQLITE_VERSION_NUMBER 3021000
+#define SQLITE_SOURCE_ID      "2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827"
 
 /*
 ** CAPI3REF: Run-Time Library Version Numbers
@@ -139,7 +141,7 @@ extern "C" {
 **
 ** <blockquote><pre>
 ** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
-** assert( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)==0 );
+** assert( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,80)==0 );
 ** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
 ** </pre></blockquote>)^
 **
@@ -149,9 +151,11 @@ extern "C" {
 ** function is provided for use in DLLs since DLL users usually do not have
 ** direct access to string constants within the DLL.  ^The
 ** sqlite3_libversion_number() function returns an integer equal to
-** [SQLITE_VERSION_NUMBER].  ^The sqlite3_sourceid() function returns 
+** [SQLITE_VERSION_NUMBER].  ^(The sqlite3_sourceid() function returns 
 ** a pointer to a string constant whose value is the same as the 
-** [SQLITE_SOURCE_ID] C preprocessor macro.
+** [SQLITE_SOURCE_ID] C preprocessor macro.  Except if SQLite is built
+** using an edited copy of [the amalgamation], then the last four characters
+** of the hash might be different from [SQLITE_SOURCE_ID].)^
 **
 ** See also: [sqlite_version()] and [sqlite_source_id()].
 */
@@ -432,7 +436,7 @@ SQLITE_API int sqlite3_exec(
 #define SQLITE_FULL        13   /* Insertion failed because database is full */
 #define SQLITE_CANTOPEN    14   /* Unable to open the database file */
 #define SQLITE_PROTOCOL    15   /* Database lock protocol error */
-#define SQLITE_EMPTY       16   /* Not used */
+#define SQLITE_EMPTY       16   /* Internal use only */
 #define SQLITE_SCHEMA      17   /* The database schema changed */
 #define SQLITE_TOOBIG      18   /* String or BLOB exceeds size limit */
 #define SQLITE_CONSTRAINT  19   /* Abort due to constraint violation */
@@ -494,6 +498,9 @@ SQLITE_API int sqlite3_exec(
 #define SQLITE_IOERR_CONVPATH          (SQLITE_IOERR | (26<<8))
 #define SQLITE_IOERR_VNODE             (SQLITE_IOERR | (27<<8))
 #define SQLITE_IOERR_AUTH              (SQLITE_IOERR | (28<<8))
+#define SQLITE_IOERR_BEGIN_ATOMIC      (SQLITE_IOERR | (29<<8))
+#define SQLITE_IOERR_COMMIT_ATOMIC     (SQLITE_IOERR | (30<<8))
+#define SQLITE_IOERR_ROLLBACK_ATOMIC   (SQLITE_IOERR | (31<<8))
 #define SQLITE_LOCKED_SHAREDCACHE      (SQLITE_LOCKED |  (1<<8))
 #define SQLITE_BUSY_RECOVERY           (SQLITE_BUSY   |  (1<<8))
 #define SQLITE_BUSY_SNAPSHOT           (SQLITE_BUSY   |  (2<<8))
@@ -580,6 +587,11 @@ SQLITE_API int sqlite3_exec(
 ** SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on
 ** read-only media and cannot be changed even by processes with
 ** elevated privileges.
+**
+** The SQLITE_IOCAP_BATCH_ATOMIC property means that the underlying
+** filesystem supports doing multiple write operations atomically when those
+** write operations are bracketed by [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] and
+** [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE].
 */
 #define SQLITE_IOCAP_ATOMIC                 0x00000001
 #define SQLITE_IOCAP_ATOMIC512              0x00000002
@@ -595,6 +607,7 @@ SQLITE_API int sqlite3_exec(
 #define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN  0x00000800
 #define SQLITE_IOCAP_POWERSAFE_OVERWRITE    0x00001000
 #define SQLITE_IOCAP_IMMUTABLE              0x00002000
+#define SQLITE_IOCAP_BATCH_ATOMIC           0x00004000
 
 /*
 ** CAPI3REF: File Locking Levels
@@ -729,6 +742,7 @@ struct sqlite3_file {
 ** <li> [SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN]
 ** <li> [SQLITE_IOCAP_POWERSAFE_OVERWRITE]
 ** <li> [SQLITE_IOCAP_IMMUTABLE]
+** <li> [SQLITE_IOCAP_BATCH_ATOMIC]
 ** </ul>
 **
 ** The SQLITE_IOCAP_ATOMIC property means that all writes of
@@ -1012,6 +1026,40 @@ struct sqlite3_io_methods {
 ** The [SQLITE_FCNTL_RBU] opcode is implemented by the special VFS used by
 ** the RBU extension only.  All other VFS should return SQLITE_NOTFOUND for
 ** this opcode.  
+**
+** <li>[[SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]]
+** If the [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] opcode returns SQLITE_OK, then
+** the file descriptor is placed in "batch write mode", which
+** means all subsequent write operations will be deferred and done
+** atomically at the next [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE].  Systems
+** that do not support batch atomic writes will return SQLITE_NOTFOUND.
+** ^Following a successful SQLITE_FCNTL_BEGIN_ATOMIC_WRITE and prior to
+** the closing [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] or
+** [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE], SQLite will make
+** no VFS interface calls on the same [sqlite3_file] file descriptor
+** except for calls to the xWrite method and the xFileControl method
+** with [SQLITE_FCNTL_SIZE_HINT].
+**
+** <li>[[SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]]
+** The [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] opcode causes all write
+** operations since the previous successful call to 
+** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be performed atomically.
+** This file control returns [SQLITE_OK] if and only if the writes were
+** all performed successfully and have been committed to persistent storage.
+** ^Regardless of whether or not it is successful, this file control takes
+** the file descriptor out of batch write mode so that all subsequent
+** write operations are independent.
+** ^SQLite will never invoke SQLITE_FCNTL_COMMIT_ATOMIC_WRITE without
+** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE].
+**
+** <li>[[SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE]]
+** The [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE] opcode causes all write
+** operations since the previous successful call to 
+** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be rolled back.
+** ^This file control takes the file descriptor out of batch write mode
+** so that all subsequent write operations are independent.
+** ^SQLite will never invoke SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE without
+** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE].
 ** </ul>
 */
 #define SQLITE_FCNTL_LOCKSTATE               1
@@ -1043,6 +1091,9 @@ struct sqlite3_io_methods {
 #define SQLITE_FCNTL_JOURNAL_POINTER        28
 #define SQLITE_FCNTL_WIN32_GET_HANDLE       29
 #define SQLITE_FCNTL_PDB                    30
+#define SQLITE_FCNTL_BEGIN_ATOMIC_WRITE     31
+#define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE    32
+#define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE  33
 
 /* deprecated names */
 #define SQLITE_GET_LOCKPROXYFILE      SQLITE_FCNTL_GET_LOCKPROXYFILE
@@ -1537,25 +1588,7 @@ SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);
 ** </dd>
 **
 ** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
-** <dd> ^The SQLITE_CONFIG_SCRATCH option specifies a static memory buffer
-** that SQLite can use for scratch memory.  ^(There are three arguments
-** to SQLITE_CONFIG_SCRATCH:  A pointer an 8-byte
-** aligned memory buffer from which the scratch allocations will be
-** drawn, the size of each scratch allocation (sz),
-** and the maximum number of scratch allocations (N).)^
-** The first argument must be a pointer to an 8-byte aligned buffer
-** of at least sz*N bytes of memory.
-** ^SQLite will not use more than one scratch buffers per thread.
-** ^SQLite will never request a scratch buffer that is more than 6
-** times the database page size.
-** ^If SQLite needs needs additional
-** scratch memory beyond what is provided by this configuration option, then 
-** [sqlite3_malloc()] will be used to obtain the memory needed.<p>
-** ^When the application provides any amount of scratch memory using
-** SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary large
-** [sqlite3_malloc|heap allocations].
-** This can help [Robson proof|prevent memory allocation failures] due to heap
-** fragmentation in low-memory embedded systems.
+** <dd> The SQLITE_CONFIG_SCRATCH option is no longer used.
 ** </dd>
 **
 ** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
@@ -1591,8 +1624,7 @@ SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);
 ** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
 ** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer 
 ** that SQLite will use for all of its dynamic memory allocation needs
-** beyond those provided for by [SQLITE_CONFIG_SCRATCH] and
-** [SQLITE_CONFIG_PAGECACHE].
+** beyond those provided for by [SQLITE_CONFIG_PAGECACHE].
 ** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
 ** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns
 ** [SQLITE_ERROR] if invoked otherwise.
@@ -1783,7 +1815,7 @@ SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);
 #define SQLITE_CONFIG_SINGLETHREAD  1  /* nil */
 #define SQLITE_CONFIG_MULTITHREAD   2  /* nil */
 #define SQLITE_CONFIG_SERIALIZED    3  /* nil */
-#define SQLITE_CONFIG_SCRATCH       6  /* void*, int sz, int N */
+#define SQLITE_CONFIG_SCRATCH       6  /* No longer used */
 #define SQLITE_CONFIG_PAGECACHE     7  /* void*, int sz, int N */
 #define SQLITE_CONFIG_HEAP          8  /* void*, int nByte, int min */
 #define SQLITE_CONFIG_MEMSTATUS     9  /* boolean */
@@ -1804,6 +1836,7 @@ SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);
 #define SQLITE_CONFIG_PCACHE_HDRSZ        24  /* int *psz */
 #define SQLITE_CONFIG_PMASZ               25  /* unsigned int szPma */
 #define SQLITE_CONFIG_STMTJRNL_SPILL      26  /* int nByte */
+#define SQLITE_CONFIG_SMALL_MALLOC        27  /* boolean */
 
 /*
 ** CAPI3REF: Database Connection Configuration Options
@@ -3008,10 +3041,10 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
 ** ^If [URI filename] interpretation is enabled, and the filename argument
 ** begins with "file:", then the filename is interpreted as a URI. ^URI
 ** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is
-** set in the fourth argument to sqlite3_open_v2(), or if it has
+** set in the third argument to sqlite3_open_v2(), or if it has
 ** been enabled globally using the [SQLITE_CONFIG_URI] option with the
 ** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option.
-** As of SQLite version 3.7.7, URI filename interpretation is turned off
+** URI filename interpretation is turned off
 ** by default, but future releases of SQLite might enable URI filename
 ** interpretation by default.  See "[URI filenames]" for additional
 ** information.
@@ -3685,8 +3718,9 @@ SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*);
 ** implementation of [application-defined SQL functions] are protected.
 ** ^The sqlite3_value object returned by
 ** [sqlite3_column_value()] is unprotected.
-** Unprotected sqlite3_value objects may only be used with
-** [sqlite3_result_value()] and [sqlite3_bind_value()].
+** Unprotected sqlite3_value objects may only be used as arguments
+** to [sqlite3_result_value()], [sqlite3_bind_value()], and
+** [sqlite3_value_dup()].
 ** The [sqlite3_value_blob | sqlite3_value_type()] family of
 ** interfaces require protected sqlite3_value objects.
 */
@@ -4108,7 +4142,7 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
 ** other than [SQLITE_ROW] before any subsequent invocation of
 ** sqlite3_step().  Failure to reset the prepared statement using 
 ** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from
-** sqlite3_step().  But after [version 3.6.23.1] ([dateof:3.6.23.1]),
+** sqlite3_step().  But after [version 3.6.23.1] ([dateof:3.6.23.1],
 ** sqlite3_step() began
 ** calling [sqlite3_reset()] automatically in this circumstance rather
 ** than returning [SQLITE_MISUSE].  This is not considered a compatibility
@@ -6128,15 +6162,20 @@ struct sqlite3_index_info {
 ** an operator that is part of a constraint term in the wHERE clause of
 ** a query that uses a [virtual table].
 */
-#define SQLITE_INDEX_CONSTRAINT_EQ      2
-#define SQLITE_INDEX_CONSTRAINT_GT      4
-#define SQLITE_INDEX_CONSTRAINT_LE      8
-#define SQLITE_INDEX_CONSTRAINT_LT     16
-#define SQLITE_INDEX_CONSTRAINT_GE     32
-#define SQLITE_INDEX_CONSTRAINT_MATCH  64
-#define SQLITE_INDEX_CONSTRAINT_LIKE   65
-#define SQLITE_INDEX_CONSTRAINT_GLOB   66
-#define SQLITE_INDEX_CONSTRAINT_REGEXP 67
+#define SQLITE_INDEX_CONSTRAINT_EQ         2
+#define SQLITE_INDEX_CONSTRAINT_GT         4
+#define SQLITE_INDEX_CONSTRAINT_LE         8
+#define SQLITE_INDEX_CONSTRAINT_LT        16
+#define SQLITE_INDEX_CONSTRAINT_GE        32
+#define SQLITE_INDEX_CONSTRAINT_MATCH     64
+#define SQLITE_INDEX_CONSTRAINT_LIKE      65
+#define SQLITE_INDEX_CONSTRAINT_GLOB      66
+#define SQLITE_INDEX_CONSTRAINT_REGEXP    67
+#define SQLITE_INDEX_CONSTRAINT_NE        68
+#define SQLITE_INDEX_CONSTRAINT_ISNOT     69
+#define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70
+#define SQLITE_INDEX_CONSTRAINT_ISNULL    71
+#define SQLITE_INDEX_CONSTRAINT_IS        72
 
 /*
 ** CAPI3REF: Register A Virtual Table Implementation
@@ -6890,7 +6929,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
 #define SQLITE_TESTCTRL_RESERVE                 14
 #define SQLITE_TESTCTRL_OPTIMIZATIONS           15
 #define SQLITE_TESTCTRL_ISKEYWORD               16
-#define SQLITE_TESTCTRL_SCRATCHMALLOC           17
+#define SQLITE_TESTCTRL_SCRATCHMALLOC           17  /* NOT USED */
 #define SQLITE_TESTCTRL_LOCALTIME_FAULT         18
 #define SQLITE_TESTCTRL_EXPLAIN_STMT            19  /* NOT USED */
 #define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD    19
@@ -6949,8 +6988,7 @@ SQLITE_API int sqlite3_status64(
 ** <dd>This parameter is the current amount of memory checked out
 ** using [sqlite3_malloc()], either directly or indirectly.  The
 ** figure includes calls made to [sqlite3_malloc()] by the application
-** and internal memory usage by the SQLite library.  Scratch memory
-** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache
+** and internal memory usage by the SQLite library.  Auxiliary page-cache
 ** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in
 ** this parameter.  The amount returned is the sum of the allocation
 ** sizes as reported by the xSize method in [sqlite3_mem_methods].</dd>)^
@@ -6988,29 +7026,14 @@ SQLITE_API int sqlite3_status64(
 ** *pHighwater parameter to [sqlite3_status()] is of interest.  
 ** The value written into the *pCurrent parameter is undefined.</dd>)^
 **
-** [[SQLITE_STATUS_SCRATCH_USED]] ^(<dt>SQLITE_STATUS_SCRATCH_USED</dt>
-** <dd>This parameter returns the number of allocations used out of the
-** [scratch memory allocator] configured using
-** [SQLITE_CONFIG_SCRATCH].  The value returned is in allocations, not
-** in bytes.  Since a single thread may only have one scratch allocation
-** outstanding at time, this parameter also reports the number of threads
-** using scratch memory at the same time.</dd>)^
+** [[SQLITE_STATUS_SCRATCH_USED]] <dt>SQLITE_STATUS_SCRATCH_USED</dt>
+** <dd>No longer used.</dd>
 **
 ** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(<dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
-** <dd>This parameter returns the number of bytes of scratch memory
-** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH]
-** buffer and where forced to overflow to [sqlite3_malloc()].  The values
-** returned include overflows because the requested allocation was too
-** larger (that is, because the requested allocation was larger than the
-** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer
-** slots were available.
-** </dd>)^
-**
-** [[SQLITE_STATUS_SCRATCH_SIZE]] ^(<dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
-** <dd>This parameter records the largest memory allocation request
-** handed to [scratch memory allocator].  Only the value returned in the
-** *pHighwater parameter to [sqlite3_status()] is of interest.  
-** The value written into the *pCurrent parameter is undefined.</dd>)^
+** <dd>No longer used.</dd>
+**
+** [[SQLITE_STATUS_SCRATCH_SIZE]] <dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
+** <dd>No longer used.</dd>
 **
 ** [[SQLITE_STATUS_PARSER_STACK]] ^(<dt>SQLITE_STATUS_PARSER_STACK</dt>
 ** <dd>The *pHighwater parameter records the deepest parser stack. 
@@ -7023,12 +7046,12 @@ SQLITE_API int sqlite3_status64(
 #define SQLITE_STATUS_MEMORY_USED          0
 #define SQLITE_STATUS_PAGECACHE_USED       1
 #define SQLITE_STATUS_PAGECACHE_OVERFLOW   2
-#define SQLITE_STATUS_SCRATCH_USED         3
-#define SQLITE_STATUS_SCRATCH_OVERFLOW     4
+#define SQLITE_STATUS_SCRATCH_USED         3  /* NOT USED */
+#define SQLITE_STATUS_SCRATCH_OVERFLOW     4  /* NOT USED */
 #define SQLITE_STATUS_MALLOC_SIZE          5
 #define SQLITE_STATUS_PARSER_STACK         6
 #define SQLITE_STATUS_PAGECACHE_SIZE       7
-#define SQLITE_STATUS_SCRATCH_SIZE         8
+#define SQLITE_STATUS_SCRATCH_SIZE         8  /* NOT USED */
 #define SQLITE_STATUS_MALLOC_COUNT         9
 
 /*
@@ -9127,8 +9150,8 @@ SQLITE_API int sqlite3session_diff(
 */
 SQLITE_API int sqlite3session_patchset(
   sqlite3_session *pSession,      /* Session object */
-  int *pnPatchset,                /* OUT: Size of buffer at *ppChangeset */
-  void **ppPatchset               /* OUT: Buffer containing changeset */
+  int *pnPatchset,                /* OUT: Size of buffer at *ppPatchset */
+  void **ppPatchset               /* OUT: Buffer containing patchset */
 );
 
 /*
@@ -9895,12 +9918,12 @@ SQLITE_API int sqlite3changeset_apply(
 **
 ** <table border=1 style="margin-left:8ex;margin-right:8ex">
 **   <tr><th>Streaming function<th>Non-streaming equivalent</th>
-**   <tr><td>sqlite3changeset_apply_str<td>[sqlite3changeset_apply] 
-**   <tr><td>sqlite3changeset_concat_str<td>[sqlite3changeset_concat] 
-**   <tr><td>sqlite3changeset_invert_str<td>[sqlite3changeset_invert] 
-**   <tr><td>sqlite3changeset_start_str<td>[sqlite3changeset_start] 
-**   <tr><td>sqlite3session_changeset_str<td>[sqlite3session_changeset] 
-**   <tr><td>sqlite3session_patchset_str<td>[sqlite3session_patchset] 
+**   <tr><td>sqlite3changeset_apply_strm<td>[sqlite3changeset_apply] 
+**   <tr><td>sqlite3changeset_concat_strm<td>[sqlite3changeset_concat] 
+**   <tr><td>sqlite3changeset_invert_strm<td>[sqlite3changeset_invert] 
+**   <tr><td>sqlite3changeset_start_strm<td>[sqlite3changeset_start] 
+**   <tr><td>sqlite3session_changeset_strm<td>[sqlite3session_changeset] 
+**   <tr><td>sqlite3session_patchset_strm<td>[sqlite3session_patchset] 
 ** </table>
 **
 ** Non-streaming functions that accept changesets (or patchsets) as input
@@ -134,7 +134,7 @@ struct sqlite3_api_routines {
   int  (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,
                          const char*,const char*),void*);
   void  (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*));
-  char * (*snprintf)(int,char*,const char*,...);
+  char * (*xsnprintf)(int,char*,const char*,...);
   int  (*step)(sqlite3_stmt*);
   int  (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,
                                 char const**,char const**,int*,int*,int*);
@@ -246,7 +246,7 @@ struct sqlite3_api_routines {
   int (*uri_boolean)(const char*,const char*,int);
   sqlite3_int64 (*uri_int64)(const char*,const char*,sqlite3_int64);
   const char *(*uri_parameter)(const char*,const char*);
-  char *(*vsnprintf)(int,char*,const char*,va_list);
+  char *(*xvsnprintf)(int,char*,const char*,va_list);
   int (*wal_checkpoint_v2)(sqlite3*,const char*,int,int*,int*);
   /* Version 3.8.7 and later */
   int (*auto_extension)(void(*)(void));
@@ -433,7 +433,7 @@ typedef int (*sqlite3_loadext_entry)(
 #define sqlite3_rollback_hook          sqlite3_api->rollback_hook
 #define sqlite3_set_authorizer         sqlite3_api->set_authorizer
 #define sqlite3_set_auxdata            sqlite3_api->set_auxdata
-#define sqlite3_snprintf               sqlite3_api->snprintf
+#define sqlite3_snprintf               sqlite3_api->xsnprintf
 #define sqlite3_step                   sqlite3_api->step
 #define sqlite3_table_column_metadata  sqlite3_api->table_column_metadata
 #undef sqlite3_total_changes
@@ -464,7 +464,7 @@ typedef int (*sqlite3_loadext_entry)(
 #endif
 #define sqlite3_value_type             sqlite3_api->value_type
 #define sqlite3_vmprintf               sqlite3_api->vmprintf
-#define sqlite3_vsnprintf              sqlite3_api->vsnprintf
+#define sqlite3_vsnprintf              sqlite3_api->xvsnprintf
 #define sqlite3_overload_function      sqlite3_api->overload_function
 #define sqlite3_prepare_v2             sqlite3_api->prepare_v2
 #define sqlite3_prepare16_v2           sqlite3_api->prepare16_v2
@@ -542,7 +542,7 @@ typedef int (*sqlite3_loadext_entry)(
 #define sqlite3_uri_boolean            sqlite3_api->uri_boolean
 #define sqlite3_uri_int64              sqlite3_api->uri_int64
 #define sqlite3_uri_parameter          sqlite3_api->uri_parameter
-#define sqlite3_uri_vsnprintf          sqlite3_api->vsnprintf
+#define sqlite3_uri_vsnprintf          sqlite3_api->xvsnprintf
 #define sqlite3_wal_checkpoint_v2      sqlite3_api->wal_checkpoint_v2
 /* Version 3.8.7 and later */
 #define sqlite3_auto_extension         sqlite3_api->auto_extension
similarity index 99%
rename from pkgs/sqlite3.20.0/configure
rename to pkgs/sqlite3.21.0/configure
index 6e6ae3c..5814167 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for sqlite 3.20.0.
+# Generated by GNU Autoconf 2.69 for sqlite 3.21.0.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='sqlite'
 PACKAGE_TARNAME='sqlite'
-PACKAGE_VERSION='3.20.0'
-PACKAGE_STRING='sqlite 3.20.0'
+PACKAGE_VERSION='3.21.0'
+PACKAGE_STRING='sqlite 3.21.0'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1296,7 +1296,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures sqlite 3.20.0 to adapt to many kinds of systems.
+\`configure' configures sqlite 3.21.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1357,7 +1357,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of sqlite 3.20.0:";;
+     short | recursive ) echo "Configuration of sqlite 3.21.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1365,7 +1365,7 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-threads        build with threads
+  --enable-threads        build with threads (default: on)
   --enable-shared         build and link with shared libraries (default: on)
   --enable-stubs          build and link with stub libraries. Always true for
                           shared builds (default: on)
@@ -1461,7 +1461,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-sqlite configure 3.20.0
+sqlite configure 3.21.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1872,7 +1872,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by sqlite $as_me 3.20.0, which was
+It was created by sqlite $as_me 3.21.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -5201,16 +5201,6 @@ $as_echo "#define NO_ERRNO_H 1" >>confdefs.h
 fi
 
 
-    ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
-if test "x$ac_cv_header_float_h" = xyes; then :
-
-else
-
-$as_echo "#define NO_FLOAT_H 1" >>confdefs.h
-
-fi
-
-
     ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default"
 if test "x$ac_cv_header_values_h" = xyes; then :
 
@@ -7091,7 +7081,7 @@ fi
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5
 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; }
 if ${ac_cv_lib_network_inet_ntoa+:} false; then :
@@ -7318,7 +7308,7 @@ fi
            CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
 
            # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            if test $doRpath = yes; then :
 
@@ -7401,7 +7391,7 @@ fi
                SHLIB_CFLAGS="-fpic"
                ;;
            esac
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            if test $doRpath = yes; then :
 
@@ -7426,7 +7416,7 @@ fi
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            LDFLAGS="$LDFLAGS -export-dynamic"
            if test $doRpath = yes; then :
@@ -9542,7 +9532,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by sqlite $as_me 3.20.0, which was
+This file was extended by sqlite $as_me 3.21.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -9595,7 +9585,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-sqlite config.status 3.20.0
+sqlite config.status 3.21.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
similarity index 99%
rename from pkgs/sqlite3.20.0/configure.ac
rename to pkgs/sqlite3.21.0/configure.ac
index 94dba32..e7c0d47 100755 (executable)
@@ -19,7 +19,7 @@ dnl   to configure the system for the local environment.
 # so you can encode the package version directly into the source files.
 #-----------------------------------------------------------------------
 
-AC_INIT([sqlite], [3.20.0])
+AC_INIT([sqlite], [3.21.0])
 
 #--------------------------------------------------------------------
 # Call TEA_INIT as the first TEA_ macro to set up initial vars.
similarity index 81%
rename from pkgs/sqlite3.20.0/generic/tclsqlite3.c
rename to pkgs/sqlite3.21.0/generic/tclsqlite3.c
index 2a98fc2..a5b19d9 100644 (file)
 **
 ** Compile-time options:
 **
-**  -DTCLSH=1             Add a "main()" routine that works as a tclsh.
+**  -DTCLSH         Add a "main()" routine that works as a tclsh.
 **
-**  -DSQLITE_TCLMD5       When used in conjuction with -DTCLSH=1, add
-**                        four new commands to the TCL interpreter for
-**                        generating MD5 checksums:  md5, md5file,
-**                        md5-10x8, and md5file-10x8.
+**  -DTCLSH_INIT_PROC=name
 **
-**  -DSQLITE_TEST         When used in conjuction with -DTCLSH=1, add
-**                        hundreds of new commands used for testing
-**                        SQLite.  This option implies -DSQLITE_TCLMD5.
-*/
+**                  Invoke name(interp) to initialize the Tcl interpreter.
+**                  If name(interp) returns a non-NULL string, then run
+**                  that string as a Tcl script to launch the application.
+**                  If name(interp) returns NULL, then run the regular
+**                  tclsh-emulator code.
+*/
+#ifdef TCLSH_INIT_PROC
+# define TCLSH 1
+#endif
 
 /*
 ** If requested, include the SQLite compiler options file for MSVC.
@@ -264,7 +266,7 @@ static int SQLITE_TCLAPI incrblobClose(
   Tcl_Free((char *)p);
 
   if( rc!=SQLITE_OK ){
-    Tcl_SetResult(interp, (char *)sqlite3_errmsg(db), TCL_VOLATILE);
+    Tcl_AppendResult(interp, sqlite3_errmsg(db), (char*)0);
     return TCL_ERROR;
   }
   return TCL_OK;
@@ -420,7 +422,7 @@ static int createIncrblobChannel(
 
   rc = sqlite3_blob_open(db, zDb, zTable, zColumn, iRow, !isReadonly, &pBlob);
   if( rc!=SQLITE_OK ){
-    Tcl_SetResult(interp, (char *)sqlite3_errmsg(pDb->db), TCL_VOLATILE);
+    Tcl_AppendResult(interp, sqlite3_errmsg(pDb->db), (char*)0);
     return TCL_ERROR;
   }
 
@@ -441,7 +443,7 @@ static int createIncrblobChannel(
   pDb->pIncrblob = p;
   p->pDb = pDb;
 
-  Tcl_SetResult(interp, (char *)Tcl_GetChannelName(p->channel), TCL_VOLATILE);
+  Tcl_AppendResult(interp, Tcl_GetChannelName(p->channel), (char*)0);
   return TCL_OK;
 }
 #else  /* else clause for "#ifndef SQLITE_OMIT_INCRBLOB" */
@@ -740,7 +742,7 @@ static int DbProfileHandler(
   SqliteDb *pDb = (SqliteDb*)cd;
   Tcl_DString str;
   char zTm[100];
-  sqlite3_stmt *pStmt = (sqlite3_stmt *)pd;  
+  sqlite3_stmt *pStmt = (sqlite3_stmt *)pd;
 
   sqlite3_snprintf(sizeof(zTm)-1, zTm, "%lld", (Tcl_WideInt)(size_t)xd);
   Tcl_DStringInit(&str);
@@ -851,7 +853,7 @@ static void DbPreUpdateHandler(
 ){
   SqliteDb *pDb = (SqliteDb *)p;
   Tcl_Obj *pCmd;
-  static const char *azStr[] = {"DELETE", "INSERT", "UPDATE"};
+  static const char azStr[][8] = {"DELETE", "INSERT", "UPDATE"};
 
   assert( (SQLITE_DELETE-1)/9 == 0 );
   assert( (SQLITE_INSERT-1)/9 == 1 );
@@ -881,7 +883,7 @@ static void DbUpdateHandler(
 ){
   SqliteDb *pDb = (SqliteDb *)p;
   Tcl_Obj *pCmd;
-  static const char *azStr[] = {"DELETE", "INSERT", "UPDATE"};
+  static const char azStr[][8] = {"DELETE", "INSERT", "UPDATE"};
 
   assert( (SQLITE_DELETE-1)/9 == 0 );
   assert( (SQLITE_INSERT-1)/9 == 1 );
@@ -1891,7 +1893,7 @@ static int SQLITE_TCLAPI DbObjCmd(
   SqliteDb *pDb = (SqliteDb*)cd;
   int choice;
   int rc = TCL_OK;
-  static const char *DB_strs[] = {
+  static const char *const DB_strs[] = {
     "authorizer",         "backup",            "busy",
     "cache",              "changes",           "close",
     "collate",            "collation_needed",  "commit_hook",
@@ -2092,7 +2094,7 @@ static int SQLITE_TCLAPI DbObjCmd(
       Tcl_WrongNumArgs(interp, 1, objv, "cache option ?arg?");
       return TCL_ERROR;
     }
-    subCmd = Tcl_GetStringFromObj( objv[2], 0 );
+    subCmd = Tcl_GetStringFromObj(objv[2], NULL);
     if( *subCmd=='f' && strcmp(subCmd,"flush")==0 ){
       if( objc!=3 ){
         Tcl_WrongNumArgs(interp, 2, objv, "flush");
@@ -2107,7 +2109,7 @@ static int SQLITE_TCLAPI DbObjCmd(
       }else{
         if( TCL_ERROR==Tcl_GetIntFromObj(interp, objv[3], &n) ){
           Tcl_AppendResult( interp, "cannot convert \"",
-               Tcl_GetStringFromObj(objv[3],0), "\" to integer", (char*)0);
+               Tcl_GetStringFromObj(objv[3], NULL), "\" to integer", (char*)0);
           return TCL_ERROR;
         }else{
           if( n<0 ){
@@ -2121,7 +2123,7 @@ static int SQLITE_TCLAPI DbObjCmd(
       }
     }else{
       Tcl_AppendResult( interp, "bad option \"",
-          Tcl_GetStringFromObj(objv[2],0), "\": must be flush or size",
+          Tcl_GetStringFromObj(objv[2], NULL), "\": must be flush or size",
           (char*)0);
       return TCL_ERROR;
     }
@@ -2150,7 +2152,7 @@ static int SQLITE_TCLAPI DbObjCmd(
   ** Shutdown the database
   */
   case DB_CLOSE: {
-    Tcl_DeleteCommand(interp, Tcl_GetStringFromObj(objv[0], 0));
+    Tcl_DeleteCommand(interp, Tcl_GetStringFromObj(objv[0], NULL));
     break;
   }
 
@@ -2169,7 +2171,7 @@ static int SQLITE_TCLAPI DbObjCmd(
       Tcl_WrongNumArgs(interp, 2, objv, "NAME SCRIPT");
       return TCL_ERROR;
     }
-    zName = Tcl_GetStringFromObj(objv[2], 0);
+    zName = Tcl_GetStringFromObj(objv[2], NULL);
     zScript = Tcl_GetStringFromObj(objv[3], &nScript);
     pCollate = (SqlCollate*)Tcl_Alloc( sizeof(*pCollate) + nScript + 1 );
     if( pCollate==0 ) return TCL_ERROR;
@@ -2180,7 +2182,7 @@ static int SQLITE_TCLAPI DbObjCmd(
     memcpy(pCollate->zScript, zScript, nScript+1);
     if( sqlite3_create_collation_v2(pDb->db, zName, SQLITE_UTF8,
         pCollate, tclSqlCollate, 0) ){
-      Tcl_SetResult(interp, (char *)sqlite3_errmsg(pDb->db), TCL_VOLATILE);
+      Tcl_AppendResult(interp, sqlite3_errmsg(pDb->db), (char*)0);
       return TCL_ERROR;
     }
     break;
@@ -2258,7 +2260,7 @@ static int SQLITE_TCLAPI DbObjCmd(
       Tcl_WrongNumArgs(interp, 2, objv, "SQL");
       return TCL_ERROR;
     }
-    isComplete = sqlite3_complete( Tcl_GetStringFromObj(objv[2], 0) );
+    isComplete = sqlite3_complete( Tcl_GetStringFromObj(objv[2], NULL) );
     pResult = Tcl_GetObjResult(interp);
     Tcl_SetBooleanObj(pResult, isComplete);
 #endif
@@ -2310,18 +2312,18 @@ static int SQLITE_TCLAPI DbObjCmd(
       return TCL_ERROR;
     }
     if( objc>=6 ){
-      zSep = Tcl_GetStringFromObj(objv[5], 0);
+      zSep = Tcl_GetStringFromObj(objv[5], NULL);
     }else{
       zSep = "\t";
     }
     if( objc>=7 ){
-      zNull = Tcl_GetStringFromObj(objv[6], 0);
+      zNull = Tcl_GetStringFromObj(objv[6], NULL);
     }else{
       zNull = "";
     }
-    zConflict = Tcl_GetStringFromObj(objv[2], 0);
-    zTable = Tcl_GetStringFromObj(objv[3], 0);
-    zFile = Tcl_GetStringFromObj(objv[4], 0);
+    zConflict = Tcl_GetStringFromObj(objv[2], NULL);
+    zTable = Tcl_GetStringFromObj(objv[3], NULL);
+    zFile = Tcl_GetStringFromObj(objv[4], NULL);
     nSep = strlen30(zSep);
     nNull = strlen30(zNull);
     if( nSep==0 ){
@@ -2427,7 +2429,7 @@ static int SQLITE_TCLAPI DbObjCmd(
         ){
           sqlite3_bind_null(pStmt, i+1);
         }else{
-          sqlite3_bind_text(pStmt, i+1, azCol[i], strlen(azCol[i]), SQLITE_STATIC);
+          sqlite3_bind_text(pStmt, i+1, azCol[i], strlen30(azCol[i]), SQLITE_STATIC);
         }
       }
       sqlite3_step(pStmt);
@@ -2646,7 +2648,7 @@ static int SQLITE_TCLAPI DbObjCmd(
     }
 
     pScript = objv[objc-1];
-    zName = Tcl_GetStringFromObj(objv[2], 0);
+    zName = Tcl_GetStringFromObj(objv[2], NULL);
     pFunc = findSqlFunc(pDb, zName);
     if( pFunc==0 ) return TCL_ERROR;
     if( pFunc->pScript ){
@@ -2659,7 +2661,7 @@ static int SQLITE_TCLAPI DbObjCmd(
         pFunc, tclSqlFunc, 0, 0, 0);
     if( rc!=SQLITE_OK ){
       rc = TCL_ERROR;
-      Tcl_SetResult(interp, (char *)sqlite3_errmsg(pDb->db), TCL_VOLATILE);
+      Tcl_AppendResult(interp, (char *)sqlite3_errmsg(pDb->db), (char*)0);
     }
     break;
   }
@@ -3057,7 +3059,7 @@ static int SQLITE_TCLAPI DbObjCmd(
       int len;
       Tcl_WideInt wMask = 0;
       if( objc==4 ){
-        static const char *TTYPE_strs[] = {
+        static const char *const TTYPE_strs[] = {
           "statement", "profile", "row", "close", 0
         };
         enum TTYPE_enum {
@@ -3140,7 +3142,7 @@ static int SQLITE_TCLAPI DbObjCmd(
     }
 
     if( pDb->nTransaction==0 && objc==4 ){
-      static const char *TTYPE_strs[] = {
+      static const char *const TTYPE_strs[] = {
         "deferred",   "exclusive",  "immediate", 0
       };
       enum TTYPE_enum {
@@ -3232,7 +3234,7 @@ static int SQLITE_TCLAPI DbObjCmd(
                      (char*)0);
     rc = TCL_ERROR;
 #else
-    static const char *azSub[] = {"count", "depth", "hook", "new", "old", 0};
+    static const char *const azSub[] = {"count", "depth", "hook", "new", "old", 0};
     enum DbPreupdateSubCmd {
       PRE_COUNT, PRE_DEPTH, PRE_HOOK, PRE_NEW, PRE_OLD
     };
@@ -3334,7 +3336,42 @@ static int SQLITE_TCLAPI DbObjCmd(
   ** Return the version string for this database.
   */
   case DB_VERSION: {
-    Tcl_SetResult(interp, (char *)sqlite3_libversion(), TCL_STATIC);
+    int i;
+    for(i=2; i<objc; i++){
+      const char *zArg = Tcl_GetString(objv[i]);
+      /* Optional arguments to $db version are used for testing purpose */
+#ifdef SQLITE_TEST
+      /* $db version -use-legacy-prepare BOOLEAN
+      **
+      ** Turn the use of legacy sqlite3_prepare() on or off.
+      */
+      if( strcmp(zArg, "-use-legacy-prepare")==0 && i+1<objc ){
+        i++;
+        if( Tcl_GetBooleanFromObj(interp, objv[i], &pDb->bLegacyPrepare) ){
+          return TCL_ERROR;
+        }
+      }else
+
+      /* $db version -last-stmt-ptr
+      **
+      ** Return a string which is a hex encoding of the pointer to the
+      ** most recent sqlite3_stmt in the statement cache.
+      */
+      if( strcmp(zArg, "-last-stmt-ptr")==0 ){
+        char zBuf[100];
+        sqlite3_snprintf(sizeof(zBuf), zBuf, "%p",
+                         pDb->stmtList ? pDb->stmtList->pStmt: 0);
+        Tcl_AppendResult(interp, zBuf, (char*)0);
+      }else
+#endif /* SQLITE_TEST */
+      {
+        Tcl_AppendResult(interp, "unknown argument: ", zArg, (char*)0);
+        return TCL_ERROR;
+      }
+    }
+    if( i==2 ){   
+      Tcl_AppendResult(interp, sqlite3_libversion(), (char*)0);
+    }
     break;
   }
 
@@ -3406,7 +3443,7 @@ static int SQLITE_TCLAPI DbMain(
 #endif
 
   if( objc==2 ){
-    zArg = Tcl_GetStringFromObj(objv[1], 0);
+    zArg = Tcl_GetStringFromObj(objv[1], NULL);
     if( strcmp(zArg,"-version")==0 ){
       Tcl_AppendResult(interp,sqlite3_libversion(), (char*)0);
       return TCL_OK;
@@ -3494,7 +3531,7 @@ static int SQLITE_TCLAPI DbMain(
   zErrMsg = 0;
   p = (SqliteDb*)Tcl_Alloc( sizeof(*p) );
   memset(p, 0, sizeof(*p));
-  zFile = Tcl_GetStringFromObj(objv[2], 0);
+  zFile = Tcl_GetStringFromObj(objv[2], NULL);
   zFile = Tcl_TranslateFileName(interp, zFile, &translatedFilename);
   rc = sqlite3_open_v2(zFile, &p->db, flags, zVfs);
   Tcl_DStringFree(&translatedFilename);
@@ -3513,7 +3550,7 @@ static int SQLITE_TCLAPI DbMain(
   }
 #endif
   if( p->db==0 ){
-    Tcl_SetResult(interp, zErrMsg, TCL_VOLATILE);
+    Tcl_AppendResult(interp, zErrMsg, (char*)0);
     Tcl_Free((char*)p);
     sqlite3_free(zErrMsg);
     return TCL_ERROR;
@@ -3521,7 +3558,7 @@ static int SQLITE_TCLAPI DbMain(
   p->maxStmt = NUM_PREPARED_STMTS;
   p->openFlags = flags & SQLITE_OPEN_URI;
   p->interp = interp;
-  zArg = Tcl_GetStringFromObj(objv[1], 0);
+  zArg = Tcl_GetStringFromObj(objv[1], NULL);
   if( DbUseNre() ){
     Tcl_NRCreateCommand(interp, zArg, DbObjCmdAdaptor, DbObjCmd,
                         (char*)p, DbDeleteCmd);
@@ -3609,708 +3646,56 @@ int Sqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; }
 int Tclsqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; }
 #endif
 
-#ifdef TCLSH
-/*****************************************************************************
-** All of the code that follows is used to build standalone TCL interpreters
-** that are statically linked with SQLite.  Enable these by compiling
-** with -DTCLSH=n where n can be 1 or 2.  An n of 1 generates a standard
-** tclsh but with SQLite built in.  An n of 2 generates the SQLite space
-** analysis program.
-*/
-
-#if defined(SQLITE_TEST) || defined(SQLITE_TCLMD5)
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest.  This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to MD5Init, call MD5Update as
- * needed on buffers full of bytes, and then call MD5Final, which
- * will fill a supplied 16-byte array with the digest.
- */
-
-/*
- * If compiled on a machine that doesn't have a 32-bit integer,
- * you just set "uint32" to the appropriate datatype for an
- * unsigned 32-bit integer.  For example:
- *
- *       cc -Duint32='unsigned long' md5.c
- *
- */
-#ifndef uint32
-#  define uint32 unsigned int
-#endif
-
-struct MD5Context {
-  int isInit;
-  uint32 buf[4];
-  uint32 bits[2];
-  unsigned char in[64];
-};
-typedef struct MD5Context MD5Context;
-
-/*
- * Note: this code is harmless on little-endian machines.
- */
-static void byteReverse (unsigned char *buf, unsigned longs){
-        uint32 t;
-        do {
-                t = (uint32)((unsigned)buf[3]<<8 | buf[2]) << 16 |
-                            ((unsigned)buf[1]<<8 | buf[0]);
-                *(uint32 *)buf = t;
-                buf += 4;
-        } while (--longs);
-}
-/* The four core functions - F1 is optimized somewhat */
-
-/* #define F1(x, y, z) (x & y | ~x & z) */
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f, w, x, y, z, data, s) \
-        ( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
-
-/*
- * The core of the MD5 algorithm, this alters an existing MD5 hash to
- * reflect the addition of 16 longwords of new data.  MD5Update blocks
- * the data and converts bytes into longwords for this routine.
- */
-static void MD5Transform(uint32 buf[4], const uint32 in[16]){
-        register uint32 a, b, c, d;
-
-        a = buf[0];
-        b = buf[1];
-        c = buf[2];
-        d = buf[3];
-
-        MD5STEP(F1, a, b, c, d, in[ 0]+0xd76aa478,  7);
-        MD5STEP(F1, d, a, b, c, in[ 1]+0xe8c7b756, 12);
-        MD5STEP(F1, c, d, a, b, in[ 2]+0x242070db, 17);
-        MD5STEP(F1, b, c, d, a, in[ 3]+0xc1bdceee, 22);
-        MD5STEP(F1, a, b, c, d, in[ 4]+0xf57c0faf,  7);
-        MD5STEP(F1, d, a, b, c, in[ 5]+0x4787c62a, 12);
-        MD5STEP(F1, c, d, a, b, in[ 6]+0xa8304613, 17);
-        MD5STEP(F1, b, c, d, a, in[ 7]+0xfd469501, 22);
-        MD5STEP(F1, a, b, c, d, in[ 8]+0x698098d8,  7);
-        MD5STEP(F1, d, a, b, c, in[ 9]+0x8b44f7af, 12);
-        MD5STEP(F1, c, d, a, b, in[10]+0xffff5bb1, 17);
-        MD5STEP(F1, b, c, d, a, in[11]+0x895cd7be, 22);
-        MD5STEP(F1, a, b, c, d, in[12]+0x6b901122,  7);
-        MD5STEP(F1, d, a, b, c, in[13]+0xfd987193, 12);
-        MD5STEP(F1, c, d, a, b, in[14]+0xa679438e, 17);
-        MD5STEP(F1, b, c, d, a, in[15]+0x49b40821, 22);
-
-        MD5STEP(F2, a, b, c, d, in[ 1]+0xf61e2562,  5);
-        MD5STEP(F2, d, a, b, c, in[ 6]+0xc040b340,  9);
-        MD5STEP(F2, c, d, a, b, in[11]+0x265e5a51, 14);
-        MD5STEP(F2, b, c, d, a, in[ 0]+0xe9b6c7aa, 20);
-        MD5STEP(F2, a, b, c, d, in[ 5]+0xd62f105d,  5);
-        MD5STEP(F2, d, a, b, c, in[10]+0x02441453,  9);
-        MD5STEP(F2, c, d, a, b, in[15]+0xd8a1e681, 14);
-        MD5STEP(F2, b, c, d, a, in[ 4]+0xe7d3fbc8, 20);
-        MD5STEP(F2, a, b, c, d, in[ 9]+0x21e1cde6,  5);
-        MD5STEP(F2, d, a, b, c, in[14]+0xc33707d6,  9);
-        MD5STEP(F2, c, d, a, b, in[ 3]+0xf4d50d87, 14);
-        MD5STEP(F2, b, c, d, a, in[ 8]+0x455a14ed, 20);
-        MD5STEP(F2, a, b, c, d, in[13]+0xa9e3e905,  5);
-        MD5STEP(F2, d, a, b, c, in[ 2]+0xfcefa3f8,  9);
-        MD5STEP(F2, c, d, a, b, in[ 7]+0x676f02d9, 14);
-        MD5STEP(F2, b, c, d, a, in[12]+0x8d2a4c8a, 20);
-
-        MD5STEP(F3, a, b, c, d, in[ 5]+0xfffa3942,  4);
-        MD5STEP(F3, d, a, b, c, in[ 8]+0x8771f681, 11);
-        MD5STEP(F3, c, d, a, b, in[11]+0x6d9d6122, 16);
-        MD5STEP(F3, b, c, d, a, in[14]+0xfde5380c, 23);
-        MD5STEP(F3, a, b, c, d, in[ 1]+0xa4beea44,  4);
-        MD5STEP(F3, d, a, b, c, in[ 4]+0x4bdecfa9, 11);
-        MD5STEP(F3, c, d, a, b, in[ 7]+0xf6bb4b60, 16);
-        MD5STEP(F3, b, c, d, a, in[10]+0xbebfbc70, 23);
-        MD5STEP(F3, a, b, c, d, in[13]+0x289b7ec6,  4);
-        MD5STEP(F3, d, a, b, c, in[ 0]+0xeaa127fa, 11);
-        MD5STEP(F3, c, d, a, b, in[ 3]+0xd4ef3085, 16);
-        MD5STEP(F3, b, c, d, a, in[ 6]+0x04881d05, 23);
-        MD5STEP(F3, a, b, c, d, in[ 9]+0xd9d4d039,  4);
-        MD5STEP(F3, d, a, b, c, in[12]+0xe6db99e5, 11);
-        MD5STEP(F3, c, d, a, b, in[15]+0x1fa27cf8, 16);
-        MD5STEP(F3, b, c, d, a, in[ 2]+0xc4ac5665, 23);
-
-        MD5STEP(F4, a, b, c, d, in[ 0]+0xf4292244,  6);
-        MD5STEP(F4, d, a, b, c, in[ 7]+0x432aff97, 10);
-        MD5STEP(F4, c, d, a, b, in[14]+0xab9423a7, 15);
-        MD5STEP(F4, b, c, d, a, in[ 5]+0xfc93a039, 21);
-        MD5STEP(F4, a, b, c, d, in[12]+0x655b59c3,  6);
-        MD5STEP(F4, d, a, b, c, in[ 3]+0x8f0ccc92, 10);
-        MD5STEP(F4, c, d, a, b, in[10]+0xffeff47d, 15);
-        MD5STEP(F4, b, c, d, a, in[ 1]+0x85845dd1, 21);
-        MD5STEP(F4, a, b, c, d, in[ 8]+0x6fa87e4f,  6);
-        MD5STEP(F4, d, a, b, c, in[15]+0xfe2ce6e0, 10);
-        MD5STEP(F4, c, d, a, b, in[ 6]+0xa3014314, 15);
-        MD5STEP(F4, b, c, d, a, in[13]+0x4e0811a1, 21);
-        MD5STEP(F4, a, b, c, d, in[ 4]+0xf7537e82,  6);
-        MD5STEP(F4, d, a, b, c, in[11]+0xbd3af235, 10);
-        MD5STEP(F4, c, d, a, b, in[ 2]+0x2ad7d2bb, 15);
-        MD5STEP(F4, b, c, d, a, in[ 9]+0xeb86d391, 21);
-
-        buf[0] += a;
-        buf[1] += b;
-        buf[2] += c;
-        buf[3] += d;
-}
-
-/*
- * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious
- * initialization constants.
- */
-static void MD5Init(MD5Context *ctx){
-        ctx->isInit = 1;
-        ctx->buf[0] = 0x67452301;
-        ctx->buf[1] = 0xefcdab89;
-        ctx->buf[2] = 0x98badcfe;
-        ctx->buf[3] = 0x10325476;
-        ctx->bits[0] = 0;
-        ctx->bits[1] = 0;
-}
-
-/*
- * Update context to reflect the concatenation of another buffer full
- * of bytes.
- */
-static
-void MD5Update(MD5Context *ctx, const unsigned char *buf, unsigned int len){
-        uint32 t;
-
-        /* Update bitcount */
-
-        t = ctx->bits[0];
-        if ((ctx->bits[0] = t + ((uint32)len << 3)) < t)
-                ctx->bits[1]++; /* Carry from low to high */
-        ctx->bits[1] += len >> 29;
-
-        t = (t >> 3) & 0x3f;    /* Bytes already in shsInfo->data */
-
-        /* Handle any leading odd-sized chunks */
-
-        if ( t ) {
-                unsigned char *p = (unsigned char *)ctx->in + t;
-
-                t = 64-t;
-                if (len < t) {
-                        memcpy(p, buf, len);
-                        return;
-                }
-                memcpy(p, buf, t);
-                byteReverse(ctx->in, 16);
-                MD5Transform(ctx->buf, (uint32 *)ctx->in);
-                buf += t;
-                len -= t;
-        }
-
-        /* Process data in 64-byte chunks */
-
-        while (len >= 64) {
-                memcpy(ctx->in, buf, 64);
-                byteReverse(ctx->in, 16);
-                MD5Transform(ctx->buf, (uint32 *)ctx->in);
-                buf += 64;
-                len -= 64;
-        }
-
-        /* Handle any remaining bytes of data. */
-
-        memcpy(ctx->in, buf, len);
-}
-
-/*
- * Final wrapup - pad to 64-byte boundary with the bit pattern
- * 1 0* (64-bit count of bits processed, MSB-first)
- */
-static void MD5Final(unsigned char digest[16], MD5Context *ctx){
-        unsigned count;
-        unsigned char *p;
-
-        /* Compute number of bytes mod 64 */
-        count = (ctx->bits[0] >> 3) & 0x3F;
-
-        /* Set the first char of padding to 0x80.  This is safe since there is
-           always at least one byte free */
-        p = ctx->in + count;
-        *p++ = 0x80;
-
-        /* Bytes of padding needed to make 64 bytes */
-        count = 64 - 1 - count;
-
-        /* Pad out to 56 mod 64 */
-        if (count < 8) {
-                /* Two lots of padding:  Pad the first block to 64 bytes */
-                memset(p, 0, count);
-                byteReverse(ctx->in, 16);
-                MD5Transform(ctx->buf, (uint32 *)ctx->in);
-
-                /* Now fill the next block with 56 bytes */
-                memset(ctx->in, 0, 56);
-        } else {
-                /* Pad block to 56 bytes */
-                memset(p, 0, count-8);
-        }
-        byteReverse(ctx->in, 14);
-
-        /* Append length in bits and transform */
-        memcpy(ctx->in + 14*4, ctx->bits, 8);
-
-        MD5Transform(ctx->buf, (uint32 *)ctx->in);
-        byteReverse((unsigned char *)ctx->buf, 4);
-        memcpy(digest, ctx->buf, 16);
-}
-
 /*
-** Convert a 128-bit MD5 digest into a 32-digit base-16 number.
+** If the TCLSH macro is defined, add code to make a stand-alone program.
 */
-static void MD5DigestToBase16(unsigned char *digest, char *zBuf){
-  static char const zEncode[] = "0123456789abcdef";
-  int i, j;
-
-  for(j=i=0; i<16; i++){
-    int a = digest[i];
-    zBuf[j++] = zEncode[(a>>4)&0xf];
-    zBuf[j++] = zEncode[a & 0xf];
-  }
-  zBuf[j] = 0;
-}
+#if defined(TCLSH)
 
-
-/*
-** Convert a 128-bit MD5 digest into sequency of eight 5-digit integers
-** each representing 16 bits of the digest and separated from each
-** other by a "-" character.
-*/
-static void MD5DigestToBase10x8(unsigned char digest[16], char zDigest[50]){
-  int i, j;
-  unsigned int x;
-  for(i=j=0; i<16; i+=2){
-    x = digest[i]*256 + digest[i+1];
-    if( i>0 ) zDigest[j++] = '-';
-    sqlite3_snprintf(50-j, &zDigest[j], "%05u", x);
-    j += 5;
-  }
-  zDigest[j] = 0;
-}
-
-/*
-** A TCL command for md5.  The argument is the text to be hashed.  The
-** Result is the hash in base64.
-*/
-static int SQLITE_TCLAPI md5_cmd(
-  void*cd,
-  Tcl_Interp *interp,
-  int argc,
-  const char **argv
-){
-  MD5Context ctx;
-  unsigned char digest[16];
-  char zBuf[50];
-  void (*converter)(unsigned char*, char*);
-
-  if( argc!=2 ){
-    Tcl_AppendResult(interp,"wrong # args: should be \"", argv[0],
-        " TEXT\"", (char*)0);
-    return TCL_ERROR;
-  }
-  MD5Init(&ctx);
-  MD5Update(&ctx, (unsigned char*)argv[1], (unsigned)strlen(argv[1]));
-  MD5Final(digest, &ctx);
-  converter = (void(*)(unsigned char*,char*))cd;
-  converter(digest, zBuf);
-  Tcl_AppendResult(interp, zBuf, (char*)0);
-  return TCL_OK;
-}
-
-/*
-** A TCL command to take the md5 hash of a file.  The argument is the
-** name of the file.
+/* This is the main routine for an ordinary TCL shell.  If there are
+** are arguments, run the first argument as a script.  Otherwise,
+** read TCL commands from standard input
 */
-static int SQLITE_TCLAPI md5file_cmd(
-  void*cd,
-  Tcl_Interp *interp,
-  int argc,
-  const char **argv
-){
-  Tcl_Channel in;
-  MD5Context ctx;
-  void (*converter)(unsigned char*, char*);
-  unsigned char digest[16];
-  char zBuf[10240];
-
-  if( argc!=2 ){
-    Tcl_AppendResult(interp,"wrong # args: should be \"", argv[0],
-        " FILENAME\"", (char*)0);
-    return TCL_ERROR;
-  }
-  in = Tcl_OpenFileChannel(interp,argv[1],"rb",0666);
-  if( in==0 ){
-    return TCL_ERROR;
-  }
-  MD5Init(&ctx);
-  for(;;){
-    int n;
-    n = (int)Tcl_Read(in, zBuf, sizeof(zBuf));
-    if( n<=0 ) break;
-    MD5Update(&ctx, (unsigned char*)zBuf, (unsigned)n);
-  }
-  Tcl_Close(interp, in);
-  MD5Final(digest, &ctx);
-  converter = (void(*)(unsigned char*,char*))cd;
-  converter(digest, zBuf);
-  Tcl_AppendResult(interp, zBuf, (char*)0);
-  return TCL_OK;
-}
-
-/*
-** Register the four new TCL commands for generating MD5 checksums
-** with the TCL interpreter.
-*/
-int Md5_Init(Tcl_Interp *interp){
-  Tcl_CreateCommand(interp, "md5", (Tcl_CmdProc*)md5_cmd,
-                    MD5DigestToBase16, 0);
-  Tcl_CreateCommand(interp, "md5-10x8", (Tcl_CmdProc*)md5_cmd,
-                    MD5DigestToBase10x8, 0);
-  Tcl_CreateCommand(interp, "md5file", (Tcl_CmdProc*)md5file_cmd,
-                    MD5DigestToBase16, 0);
-  Tcl_CreateCommand(interp, "md5file-10x8", (Tcl_CmdProc*)md5file_cmd,
-                    MD5DigestToBase10x8, 0);
-  return TCL_OK;
-}
-#endif /* defined(SQLITE_TEST) || defined(SQLITE_TCLMD5) */
-
-#if defined(SQLITE_TEST)
-/*
-** During testing, the special md5sum() aggregate function is available.
-** inside SQLite.  The following routines implement that function.
-*/
-static void md5step(sqlite3_context *context, int argc, sqlite3_value **argv){
-  MD5Context *p;
-  int i;
-  if( argc<1 ) return;
-  p = sqlite3_aggregate_context(context, sizeof(*p));
-  if( p==0 ) return;
-  if( !p->isInit ){
-    MD5Init(p);
-  }
-  for(i=0; i<argc; i++){
-    const char *zData = (char*)sqlite3_value_text(argv[i]);
-    if( zData ){
-      MD5Update(p, (unsigned char*)zData, (unsigned)strlen(zData));
-    }
-  }
-}
-static void md5finalize(sqlite3_context *context){
-  MD5Context *p;
-  unsigned char digest[16];
-  char zBuf[33];
-  p = sqlite3_aggregate_context(context, sizeof(*p));
-  MD5Final(digest,p);
-  MD5DigestToBase16(digest, zBuf);
-  sqlite3_result_text(context, zBuf, strlen(zBuf), SQLITE_TRANSIENT);
-}
-int Md5_Register(
-  sqlite3 *db,
-  char **pzErrMsg,
-  const sqlite3_api_routines *pThunk
-){
-  int rc = sqlite3_create_function(db, "md5sum", -1, SQLITE_UTF8, 0, 0,
-                                 md5step, md5finalize);
-  sqlite3_overload_function(db, "md5sum", -1);  /* To exercise this API */
-  return rc;
-}
-#endif /* defined(SQLITE_TEST) */
-
-
-/*
-** If the macro TCLSH is one, then put in code this for the
-** "main" routine that will initialize Tcl and take input from
-** standard input, or if a file is named on the command line
-** the TCL interpreter reads and evaluates that file.
-*/
-#if TCLSH==1
 static const char *tclsh_main_loop(void){
   static const char zMainloop[] =
-    "set line {}\n"
-    "while {![eof stdin]} {\n"
-      "if {$line!=\"\"} {\n"
-        "puts -nonewline \"> \"\n"
-      "} else {\n"
-        "puts -nonewline \"% \"\n"
-      "}\n"
-      "flush stdout\n"
-      "append line [gets stdin]\n"
-      "if {[info complete $line]} {\n"
-        "if {[catch {uplevel #0 $line} result]} {\n"
-          "puts stderr \"Error: $result\"\n"
-        "} elseif {$result!=\"\"} {\n"
-          "puts $result\n"
+    "if {[llength $argv]>=1} {\n"
+      "set argv0 [lindex $argv 0]\n"
+      "set argv [lrange $argv 1 end]\n"
+      "source $argv0\n"
+    "} else {\n"
+      "set line {}\n"
+      "while {![eof stdin]} {\n"
+        "if {$line!=\"\"} {\n"
+          "puts -nonewline \"> \"\n"
+        "} else {\n"
+          "puts -nonewline \"% \"\n"
+        "}\n"
+        "flush stdout\n"
+        "append line [gets stdin]\n"
+        "if {[info complete $line]} {\n"
+          "if {[catch {uplevel #0 $line} result]} {\n"
+            "puts stderr \"Error: $result\"\n"
+          "} elseif {$result!=\"\"} {\n"
+            "puts $result\n"
+          "}\n"
+          "set line {}\n"
+        "} else {\n"
+          "append line \\n\n"
         "}\n"
-        "set line {}\n"
-      "} else {\n"
-        "append line \\n\n"
       "}\n"
     "}\n"
   ;
   return zMainloop;
 }
-#endif
-#if TCLSH==2
-static const char *tclsh_main_loop(void);
-#endif
-
-#ifdef SQLITE_TEST
-static void init_all(Tcl_Interp *);
-static int SQLITE_TCLAPI init_all_cmd(
-  ClientData cd,
-  Tcl_Interp *interp,
-  int objc,
-  Tcl_Obj *CONST objv[]
-){
-
-  Tcl_Interp *slave;
-  if( objc!=2 ){
-    Tcl_WrongNumArgs(interp, 1, objv, "SLAVE");
-    return TCL_ERROR;
-  }
-
-  slave = Tcl_GetSlave(interp, Tcl_GetString(objv[1]));
-  if( !slave ){
-    return TCL_ERROR;
-  }
-
-  init_all(slave);
-  return TCL_OK;
-}
-
-/*
-** Tclcmd: db_use_legacy_prepare DB BOOLEAN
-**
-**   The first argument to this command must be a database command created by
-**   [sqlite3]. If the second argument is true, then the handle is configured
-**   to use the sqlite3_prepare_v2() function to prepare statements. If it
-**   is false, sqlite3_prepare().
-*/
-static int SQLITE_TCLAPI db_use_legacy_prepare_cmd(
-  ClientData cd,
-  Tcl_Interp *interp,
-  int objc,
-  Tcl_Obj *CONST objv[]
-){
-  Tcl_CmdInfo cmdInfo;
-  SqliteDb *pDb;
-  int bPrepare;
-
-  if( objc!=3 ){
-    Tcl_WrongNumArgs(interp, 1, objv, "DB BOOLEAN");
-    return TCL_ERROR;
-  }
-
-  if( !Tcl_GetCommandInfo(interp, Tcl_GetString(objv[1]), &cmdInfo) ){
-    Tcl_AppendResult(interp, "no such db: ", Tcl_GetString(objv[1]), (char*)0);
-    return TCL_ERROR;
-  }
-  pDb = (SqliteDb*)cmdInfo.objClientData;
-  if( Tcl_GetBooleanFromObj(interp, objv[2], &bPrepare) ){
-    return TCL_ERROR;
-  }
-
-  pDb->bLegacyPrepare = bPrepare;
-
-  Tcl_ResetResult(interp);
-  return TCL_OK;
-}
-
-/*
-** Tclcmd: db_last_stmt_ptr DB
-**
-**   If the statement cache associated with database DB is not empty,
-**   return the text representation of the most recently used statement
-**   handle.
-*/
-static int SQLITE_TCLAPI db_last_stmt_ptr(
-  ClientData cd,
-  Tcl_Interp *interp,
-  int objc,
-  Tcl_Obj *CONST objv[]
-){
-  extern int sqlite3TestMakePointerStr(Tcl_Interp*, char*, void*);
-  Tcl_CmdInfo cmdInfo;
-  SqliteDb *pDb;
-  sqlite3_stmt *pStmt = 0;
-  char zBuf[100];
-
-  if( objc!=2 ){
-    Tcl_WrongNumArgs(interp, 1, objv, "DB");
-    return TCL_ERROR;
-  }
-
-  if( !Tcl_GetCommandInfo(interp, Tcl_GetString(objv[1]), &cmdInfo) ){
-    Tcl_AppendResult(interp, "no such db: ", Tcl_GetString(objv[1]), (char*)0);
-    return TCL_ERROR;
-  }
-  pDb = (SqliteDb*)cmdInfo.objClientData;
-
-  if( pDb->stmtList ) pStmt = pDb->stmtList->pStmt;
-  if( sqlite3TestMakePointerStr(interp, zBuf, pStmt) ){
-    return TCL_ERROR;
-  }
-  Tcl_SetResult(interp, zBuf, TCL_VOLATILE);
-
-  return TCL_OK;
-}
-#endif /* SQLITE_TEST */
-
-/*
-** Configure the interpreter passed as the first argument to have access
-** to the commands and linked variables that make up:
-**
-**   * the [sqlite3] extension itself,
-**
-**   * If SQLITE_TCLMD5 or SQLITE_TEST is defined, the Md5 commands, and
-**
-**   * If SQLITE_TEST is set, the various test interfaces used by the Tcl
-**     test suite.
-*/
-static void init_all(Tcl_Interp *interp){
-  Sqlite3_Init(interp);
-
-#if defined(SQLITE_TEST) || defined(SQLITE_TCLMD5)
-  Md5_Init(interp);
-#endif
-
-#ifdef SQLITE_TEST
-  {
-    extern int Sqliteconfig_Init(Tcl_Interp*);
-    extern int Sqlitetest1_Init(Tcl_Interp*);
-    extern int Sqlitetest2_Init(Tcl_Interp*);
-    extern int Sqlitetest3_Init(Tcl_Interp*);
-    extern int Sqlitetest4_Init(Tcl_Interp*);
-    extern int Sqlitetest5_Init(Tcl_Interp*);
-    extern int Sqlitetest6_Init(Tcl_Interp*);
-    extern int Sqlitetest7_Init(Tcl_Interp*);
-    extern int Sqlitetest8_Init(Tcl_Interp*);
-    extern int Sqlitetest9_Init(Tcl_Interp*);
-    extern int Sqlitetestasync_Init(Tcl_Interp*);
-    extern int Sqlitetest_autoext_Init(Tcl_Interp*);
-    extern int Sqlitetest_blob_Init(Tcl_Interp*);
-    extern int Sqlitetest_demovfs_Init(Tcl_Interp *);
-    extern int Sqlitetest_func_Init(Tcl_Interp*);
-    extern int Sqlitetest_hexio_Init(Tcl_Interp*);
-    extern int Sqlitetest_init_Init(Tcl_Interp*);
-    extern int Sqlitetest_malloc_Init(Tcl_Interp*);
-    extern int Sqlitetest_mutex_Init(Tcl_Interp*);
-    extern int Sqlitetestschema_Init(Tcl_Interp*);
-    extern int Sqlitetestsse_Init(Tcl_Interp*);
-    extern int Sqlitetesttclvar_Init(Tcl_Interp*);
-    extern int Sqlitetestfs_Init(Tcl_Interp*);
-    extern int SqlitetestThread_Init(Tcl_Interp*);
-    extern int SqlitetestOnefile_Init();
-    extern int SqlitetestOsinst_Init(Tcl_Interp*);
-    extern int Sqlitetestbackup_Init(Tcl_Interp*);
-    extern int Sqlitetestintarray_Init(Tcl_Interp*);
-    extern int Sqlitetestvfs_Init(Tcl_Interp *);
-    extern int Sqlitetestrtree_Init(Tcl_Interp*);
-    extern int Sqlitequota_Init(Tcl_Interp*);
-    extern int Sqlitemultiplex_Init(Tcl_Interp*);
-    extern int SqliteSuperlock_Init(Tcl_Interp*);
-    extern int SqlitetestSyscall_Init(Tcl_Interp*);
-#if defined(SQLITE_ENABLE_SESSION) && defined(SQLITE_ENABLE_PREUPDATE_HOOK)
-    extern int TestSession_Init(Tcl_Interp*);
-#endif
-    extern int Fts5tcl_Init(Tcl_Interp *);
-    extern int SqliteRbu_Init(Tcl_Interp*);
-    extern int Sqlitetesttcl_Init(Tcl_Interp*);
-#if defined(SQLITE_ENABLE_FTS3) || defined(SQLITE_ENABLE_FTS4)
-    extern int Sqlitetestfts3_Init(Tcl_Interp *interp);
-#endif
-
-#ifdef SQLITE_ENABLE_ZIPVFS
-    extern int Zipvfs_Init(Tcl_Interp*);
-    Zipvfs_Init(interp);
-#endif
-
-    Sqliteconfig_Init(interp);
-    Sqlitetest1_Init(interp);
-    Sqlitetest2_Init(interp);
-    Sqlitetest3_Init(interp);
-    Sqlitetest4_Init(interp);
-    Sqlitetest5_Init(interp);
-    Sqlitetest6_Init(interp);
-    Sqlitetest7_Init(interp);
-    Sqlitetest8_Init(interp);
-    Sqlitetest9_Init(interp);
-    Sqlitetestasync_Init(interp);
-    Sqlitetest_autoext_Init(interp);
-    Sqlitetest_blob_Init(interp);
-    Sqlitetest_demovfs_Init(interp);
-    Sqlitetest_func_Init(interp);
-    Sqlitetest_hexio_Init(interp);
-    Sqlitetest_init_Init(interp);
-    Sqlitetest_malloc_Init(interp);
-    Sqlitetest_mutex_Init(interp);
-    Sqlitetestschema_Init(interp);
-    Sqlitetesttclvar_Init(interp);
-    Sqlitetestfs_Init(interp);
-    SqlitetestThread_Init(interp);
-    SqlitetestOnefile_Init();
-    SqlitetestOsinst_Init(interp);
-    Sqlitetestbackup_Init(interp);
-    Sqlitetestintarray_Init(interp);
-    Sqlitetestvfs_Init(interp);
-    Sqlitetestrtree_Init(interp);
-    Sqlitequota_Init(interp);
-    Sqlitemultiplex_Init(interp);
-    SqliteSuperlock_Init(interp);
-    SqlitetestSyscall_Init(interp);
-#if defined(SQLITE_ENABLE_SESSION) && defined(SQLITE_ENABLE_PREUPDATE_HOOK)
-    TestSession_Init(interp);
-#endif
-    Fts5tcl_Init(interp);
-    SqliteRbu_Init(interp);
-    Sqlitetesttcl_Init(interp);
-
-#if defined(SQLITE_ENABLE_FTS3) || defined(SQLITE_ENABLE_FTS4)
-    Sqlitetestfts3_Init(interp);
-#endif
-
-    Tcl_CreateObjCommand(
-        interp, "load_testfixture_extensions", init_all_cmd, 0, 0
-    );
-    Tcl_CreateObjCommand(
-        interp, "db_use_legacy_prepare", db_use_legacy_prepare_cmd, 0, 0
-    );
-    Tcl_CreateObjCommand(
-        interp, "db_last_stmt_ptr", db_last_stmt_ptr, 0, 0
-    );
-
-#ifdef SQLITE_SSE
-    Sqlitetestsse_Init(interp);
-#endif
-  }
-#endif
-}
-
-/* Needed for the setrlimit() system call on unix */
-#if defined(unix)
-#include <sys/resource.h>
-#endif
 
 #define TCLSH_MAIN main   /* Needed to fake out mktclapp */
 int SQLITE_CDECL TCLSH_MAIN(int argc, char **argv){
   Tcl_Interp *interp;
+  int i;
+  const char *zScript = 0;
+  char zArgc[32];
+#if defined(TCLSH_INIT_PROC)
+  extern const char *TCLSH_INIT_PROC(Tcl_Interp*);
+#endif
 
 #if !defined(_WIN32_WCE)
   if( getenv("BREAK") ){
@@ -4321,17 +3706,6 @@ int SQLITE_CDECL TCLSH_MAIN(int argc, char **argv){
   }
 #endif
 
-  /* Since the primary use case for this binary is testing of SQLite,
-  ** be sure to generate core files if we crash */
-#if defined(SQLITE_TEST) && defined(unix)
-  { struct rlimit x;
-    getrlimit(RLIMIT_CORE, &x);
-    x.rlim_cur = x.rlim_max;
-    setrlimit(RLIMIT_CORE, &x);
-  }
-#endif /* SQLITE_TEST && unix */
-
-
   /* Call sqlite3_shutdown() once before doing anything else. This is to
   ** test that sqlite3_shutdown() can be safely called by a process before
   ** sqlite3_initialize() is. */
@@ -4340,38 +3714,27 @@ int SQLITE_CDECL TCLSH_MAIN(int argc, char **argv){
   Tcl_FindExecutable(argv[0]);
   Tcl_SetSystemEncoding(0, "utf-8");
   interp = Tcl_CreateInterp();
+  Sqlite3_Init(interp);
 
-#if TCLSH==2
-  sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
+  sqlite3_snprintf(sizeof(zArgc), zArgc, "%d", argc-1);
+  Tcl_SetVar(interp,"argc", zArgc, TCL_GLOBAL_ONLY);
+  Tcl_SetVar(interp,"argv0",argv[0],TCL_GLOBAL_ONLY);
+  Tcl_SetVar(interp,"argv", "", TCL_GLOBAL_ONLY);
+  for(i=1; i<argc; i++){
+    Tcl_SetVar(interp, "argv", argv[i],
+        TCL_GLOBAL_ONLY | TCL_LIST_ELEMENT | TCL_APPEND_VALUE);
+  }
+#if defined(TCLSH_INIT_PROC)
+  zScript = TCLSH_INIT_PROC(interp);
 #endif
-
-  init_all(interp);
-  if( argc>=2 ){
-    int i;
-    char zArgc[32];
-    sqlite3_snprintf(sizeof(zArgc), zArgc, "%d", argc-(3-TCLSH));
-    Tcl_SetVar(interp,"argc", zArgc, TCL_GLOBAL_ONLY);
-    Tcl_SetVar(interp,"argv0",argv[1],TCL_GLOBAL_ONLY);
-    Tcl_SetVar(interp,"argv", "", TCL_GLOBAL_ONLY);
-    for(i=3-TCLSH; i<argc; i++){
-      Tcl_SetVar(interp, "argv", argv[i],
-          TCL_GLOBAL_ONLY | TCL_LIST_ELEMENT | TCL_APPEND_VALUE);
-    }
-    if( TCLSH==1 ) {
-      Tcl_Obj *pathPtr = Tcl_NewStringObj(argv[1],-1);
-      Tcl_IncrRefCount(pathPtr);
-      if (Tcl_FSEvalFile(interp, pathPtr)!=TCL_OK ){
-        const char *zInfo = Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY);
-        if( zInfo==0 ) zInfo = Tcl_GetStringResult(interp);
-        fprintf(stderr,"%s: %s\n", *argv, zInfo);
-        Tcl_DecrRefCount(pathPtr);
-        return 1;
-      }
-      Tcl_DecrRefCount(pathPtr);
-    }
+  if( zScript==0 ){
+    zScript = tclsh_main_loop();
   }
-  if( TCLSH==2 || argc<=1 ){
-    Tcl_EvalEx(interp, tclsh_main_loop(), -1, TCL_EVAL_GLOBAL);
+  if( Tcl_EvalEx(interp, zScript, -1, TCL_EVAL_GLOBAL)!=TCL_OK ){
+    const char *zInfo = Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY);
+    if( zInfo==0 ) zInfo = Tcl_GetStringResult(interp);
+    fprintf(stderr,"%s: %s\n", *argv, zInfo);
+    return 1;
   }
   return 0;
 }
diff --git a/pkgs/sqlite3.21.0/win/makefile.vc b/pkgs/sqlite3.21.0/win/makefile.vc
new file mode 100644 (file)
index 0000000..22c57f9
--- /dev/null
@@ -0,0 +1,52 @@
+#------------------------------------------------------------- -*- makefile -*-\r
+#\r
+# Sample makefile for building Tcl extensions.\r
+#\r
+# Basic build, test and install\r
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\tcl\r
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\tcl test\r
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\tcl install\r
+#\r
+# For other build options (debug, static etc.)\r
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for\r
+# detailed documentation.\r
+#\r
+# See the file "license.terms" for information on usage and redistribution\r
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+# PROJECT is sqlite, not sqlite3 to match TEA AC_INIT definition.\r
+# This makes the generated DLL name also consistent between the two\r
+# except for the "t" suffix which is the convention for nmake builds.\r
+PROJECT = sqlite\r
+PRJ_PACKAGE_TCLNAME = sqlite3\r
+\r
+!include "rules-ext.vc"\r
+\r
+PRJ_OBJS = $(TMP_DIR)\tclsqlite3.obj\r
+\r
+# Preprocessor macros specific to sqlite3.\r
+PRJ_DEFINES = -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE \\r
+                  -DSQLITE_ENABLE_DBSTAT_VTAB=1 \\r
+                  -DSQLITE_ENABLE_FTS3_PARENTHESIS=1 -DSQLITE_ENABLE_FTS4=1 \\r
+                  -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 \\r
+                  -DSQLITE_ENABLE_JSON=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS=1 \\r
+                  -DSQLITE_3_SUFFIX_ONLY=1 -DSQLITE_ENABLE_RTREE=1 \\r
+                  -DSQLITE_UNTESTABLE=1 -DSQLITE_OMIT_LOOKASIDE=1 \\r
+                  -DSQLITE_SECURE_DELETE=1 -DSQLITE_SOUNDEX=1 \\r
+                  -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1 -DDSQLITE_USE_ALLOCA=1 \\r
+                  -DSQLITE_ENABLE_FTS4=1 -DSQLITE_OMIT_DEPRECATED=1\r
+\r
+# Standard targets to build, install, test etc.\r
+!include "$(_RULESDIR)\targets.vc"\r
+\r
+# The built-in pkgindex does no suffice for our extension as\r
+# the PROJECT name (sqlite) is not same as init function name (Sqlite3)\r
+pkgindex:\r
+       @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \\r
+           [list load [file join $$dir $(PRJLIBNAME)] $(PRJ_PACKAGE_TCLNAME)] > $(OUT_DIR)\pkgIndex.tcl\r
+\r
+# Install the manpage though on Windows, doubt it does much good\r
+install:    default-install-docs-n\r
+\r
similarity index 81%
rename from pkgs/thread2.8.1/win/nmakehlp.c
rename to pkgs/sqlite3.21.0/win/nmakehlp.c
index 84cf75c..025bb99 100644 (file)
 #endif
 
 
-
 /* protos */
 
 static int CheckForCompilerFeature(const char *option);
-static int CheckForLinkerFeature(const char *option);
+static int CheckForLinkerFeature(const char **options, int count);
 static int IsIn(const char *string, const char *substring);
 static int SubstituteFile(const char *substs, const char *filename);
 static int QualifyPath(const char *path);
+static int LocateDependency(const char *keyfile);
 static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
 static DWORD WINAPI ReadFromPipe(LPVOID args);
 
@@ -74,6 +74,7 @@ main(
     char msg[300];
     DWORD dwWritten;
     int chars;
+    char *s;
 
     /*
      * Make sure children (cl.exe and link.exe) are kept quiet.
@@ -102,16 +103,16 @@ main(
            }
            return CheckForCompilerFeature(argv[2]);
        case 'l':
-           if (argc != 3) {
+           if (argc < 3) {
                chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -l <linker option>\n"
+                       "usage: %s -l <linker option> ?<mandatory option> ...?\n"
                        "Tests for whether link.exe supports an option\n"
                        "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
                WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
                        &dwWritten, NULL);
                return 2;
            }
-           return CheckForLinkerFeature(argv[2]);
+           return CheckForLinkerFeature(&argv[2], argc-2);
        case 'f':
            if (argc == 2) {
                chars = snprintf(msg, sizeof(msg) - 1,
@@ -153,8 +154,13 @@ main(
                    &dwWritten, NULL);
                return 0;
            }
-           printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'));
-           return 0;
+           s = GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0');
+           if (s && *s) {
+               printf("%s\n", s);
+               return 0;
+           } else
+               return 1; /* Version not found. Return non-0 exit code */
+
        case 'Q':
            if (argc != 3) {
                chars = snprintf(msg, sizeof(msg) - 1,
@@ -166,6 +172,18 @@ main(
                return 2;
            }
            return QualifyPath(argv[2]);
+
+       case 'L':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -L keypath\n"
+                   "Emit the fully qualified path of directory containing keypath\n"
+                   "exitcodes: 0 == success, 1 == not found, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return LocateDependency(argv[2]);
        }
     }
     chars = snprintf(msg, sizeof(msg) - 1,
@@ -313,7 +331,8 @@ CheckForCompilerFeature(
 \f
 static int
 CheckForLinkerFeature(
-    const char *option)
+    const char **options,
+    int count)
 {
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
@@ -322,7 +341,8 @@ CheckForLinkerFeature(
     char msg[300];
     BOOL ok;
     HANDLE hProcess, h, pipeThreads[2];
-    char cmdline[100];
+    int i;
+    char cmdline[255];
 
     hProcess = GetCurrentProcess();
 
@@ -368,7 +388,11 @@ CheckForLinkerFeature(
      * Append our option for testing.
      */
 
-    lstrcat(cmdline, option);
+    for (i = 0; i < count; i++) {
+       lstrcat(cmdline, " \"");
+       lstrcat(cmdline, options[i]);
+       lstrcat(cmdline, "\"");
+    }
 
     ok = CreateProcess(
            NULL,           /* Module name. */
@@ -433,7 +457,9 @@ CheckForLinkerFeature(
     return !(strstr(Out.buffer, "LNK1117") != NULL ||
            strstr(Err.buffer, "LNK1117") != NULL ||
            strstr(Out.buffer, "LNK4044") != NULL ||
-           strstr(Err.buffer, "LNK4044") != NULL);
+           strstr(Err.buffer, "LNK4044") != NULL ||
+           strstr(Out.buffer, "LNK4224") != NULL ||
+           strstr(Err.buffer, "LNK4224") != NULL);
 }
 \f
 static DWORD WINAPI
@@ -687,6 +713,97 @@ QualifyPath(
 }
 
 /*
+ * Implements LocateDependency for a single directory. See that command
+ * for an explanation.
+ * Returns 0 if found after printing the directory.
+ * Returns 1 if not found but no errors.
+ * Returns 2 on any kind of error
+ * Basically, these are used as exit codes for the process.
+ */
+static int LocateDependencyHelper(const char *dir, const char *keypath)
+{
+    HANDLE hSearch;
+    char path[MAX_PATH+1];
+    int dirlen, keylen, ret;
+    WIN32_FIND_DATA finfo;
+
+    if (dir == NULL || keypath == NULL)
+       return 2; /* Have no real error reporting mechanism into nmake */
+    dirlen = strlen(dir);
+    if ((dirlen + 3) > sizeof(path))
+       return 2;
+    strncpy(path, dir, dirlen);
+    strncpy(path+dirlen, "\\*", 3);    /* Including terminating \0 */
+    keylen = strlen(keypath);
+
+#if 0 /* This function is not available in Visual C++ 6 */
+    /*
+     * Use numerics 0 -> FindExInfoStandard,
+     * 1 -> FindExSearchLimitToDirectories, 
+     * as these are not defined in Visual C++ 6
+     */
+    hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0);
+#else
+    hSearch = FindFirstFile(path, &finfo);
+#endif
+    if (hSearch == INVALID_HANDLE_VALUE)
+       return 1; /* Not found */
+
+    /* Loop through all subdirs checking if the keypath is under there */
+    ret = 1; /* Assume not found */
+    do {
+       int sublen;
+       /*
+        * We need to check it is a directory despite the 
+        * FindExSearchLimitToDirectories in the above call. See SDK docs
+        */
+       if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
+           continue;
+       sublen = strlen(finfo.cFileName);
+       if ((dirlen+1+sublen+1+keylen+1) > sizeof(path))
+           continue;           /* Path does not fit, assume not matched */
+       strncpy(path+dirlen+1, finfo.cFileName, sublen);
+       path[dirlen+1+sublen] = '\\';
+       strncpy(path+dirlen+1+sublen+1, keypath, keylen+1);
+       if (PathFileExists(path)) {
+           /* Found a match, print to stdout */
+           path[dirlen+1+sublen] = '\0';
+           QualifyPath(path);
+           ret = 0;
+           break;
+       }
+    } while (FindNextFile(hSearch, &finfo));
+    FindClose(hSearch);
+    return ret;
+}
+
+/*
+ * LocateDependency --
+ *
+ *     Locates a dependency for a package.
+ *        keypath - a relative path within the package directory
+ *          that is used to confirm it is the correct directory.
+ *     The search path for the package directory is currently only
+ *      the parent and grandparent of the current working directory.
+ *      If found, the command prints 
+ *         name_DIRPATH=<full path of located directory>
+ *      and returns 0. If not found, does not print anything and returns 1.
+ */
+static int LocateDependency(const char *keypath)
+{
+    int i, ret;
+    static char *paths[] = {"..", "..\\..", "..\\..\\.."};
+    
+    for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) {
+       ret = LocateDependencyHelper(paths[i], keypath);
+       if (ret == 0)
+           return ret;
+    }
+    return ret;
+}
+
+
+/*
  * Local variables:
  *   mode: c
  *   c-basic-offset: 4
diff --git a/pkgs/sqlite3.21.0/win/rules-ext.vc b/pkgs/sqlite3.21.0/win/rules-ext.vc
new file mode 100644 (file)
index 0000000..58c70fa
--- /dev/null
@@ -0,0 +1,118 @@
+# This file should only be included in makefiles for Tcl extensions,\r
+# NOT in the makefile for Tcl itself.\r
+\r
+!ifndef _RULES_EXT_VC\r
+\r
+# We need to run from the directory the parent makefile is located in.\r
+# nmake does not tell us what makefile was used to invoke it so parent\r
+# makefile has to set the MAKEFILEVC macro or we just make a guess and\r
+# warn if we think that is not the case.\r
+!if "$(MAKEFILEVC)" == ""\r
+\r
+!if exist("$(PROJECT).vc")\r
+MAKEFILEVC = $(PROJECT).vc\r
+!elseif exist("makefile.vc")\r
+MAKEFILEVC = makefile.vc\r
+!endif\r
+!endif # "$(MAKEFILEVC)" == ""\r
+\r
+!if !exist("$(MAKEFILEVC)")\r
+MSG = ^\r
+You must run nmake from the directory containing the project makefile.^\r
+If you are doing that and getting this message, set the MAKEFILEVC^\r
+macro to the name of the project makefile.\r
+!message WARNING: $(MSG)\r
+!endif\r
+\r
+!if "$(PROJECT)" == "tcl"\r
+!error The rules-ext.vc file is not intended for Tcl itself.\r
+!endif\r
+\r
+# We extract version numbers using the nmakehlp program. For now use\r
+# the local copy of nmakehlp. Once we locate Tcl, we will use that\r
+# one if it is newer.\r
+!if [$(CC) -nologo "nmakehlp.c" -link -subsystem:console > nul]\r
+!endif\r
+\r
+# First locate the Tcl directory that we are working with.\r
+!ifdef TCLDIR\r
+\r
+_RULESDIR = $(TCLDIR:/=\)\r
+\r
+!else\r
+\r
+# If an installation path is specified, that is also the Tcl directory.\r
+# Also Tk never builds against an installed Tcl, it needs Tcl sources\r
+!if defined(INSTALLDIR) && "$(PROJECT)" != "tk"\r
+_RULESDIR=$(INSTALLDIR:/=\)\r
+!else\r
+# Locate Tcl sources\r
+!if [echo _RULESDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]\r
+_RULESDIR = ..\..\tcl\r
+!else\r
+!include nmakehlp.out\r
+!endif\r
+\r
+!endif # defined(INSTALLDIR)....\r
+\r
+!endif # ifndef TCLDIR\r
+\r
+# Now look for the targets.vc file under the Tcl root. Note we check this\r
+# file and not rules.vc because the latter also exists on older systems.\r
+!if exist("$(_RULESDIR)\lib\nmake\targets.vc") # Building against installed Tcl\r
+_RULESDIR = $(_RULESDIR)\lib\nmake\r
+!elseif exist("$(_RULESDIR)\win\targets.vc")   # Building against Tcl sources\r
+_RULESDIR = $(_RULESDIR)\win\r
+!else\r
+# If we have not located Tcl's targets file, most likely we are compiling\r
+# against an older version of Tcl and so must use our own support files.\r
+_RULESDIR = .\r
+!endif\r
+\r
+!if "$(_RULESDIR)" != "."\r
+# Potentially using Tcl's support files. If this extension has its own\r
+# nmake support files, need to compare the versions and pick newer.\r
+\r
+!if exist("rules.vc") # The extension has its own copy\r
+\r
+!if [echo TCL_RULES_MAJOR = \> versions.vc] \\r
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MAJOR >> versions.vc]\r
+!endif\r
+!if [echo TCL_RULES_MINOR = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MINOR >> versions.vc]\r
+!endif\r
+\r
+!if [echo OUR_RULES_MAJOR = \>> versions.vc] \\r
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MAJOR >> versions.vc]\r
+!endif\r
+!if [echo OUR_RULES_MINOR = \>> versions.vc] \\r
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MINOR >> versions.vc]\r
+!endif\r
+!include versions.vc\r
+# We have a newer version of the support files, use them\r
+!if ($(TCL_RULES_MAJOR) != $(OUR_RULES_MAJOR)) || ($(TCL_RULES_MINOR) < $(OUR_RULES_MINOR))\r
+_RULESDIR = .\r
+!endif\r
+\r
+!endif # if exist("rules.vc")\r
+\r
+!endif # if $(_RULESDIR) != "."\r
+\r
+# Let rules.vc know what copy of nmakehlp.c to use.\r
+NMAKEHLPC = $(_RULESDIR)\nmakehlp.c\r
+\r
+# Get rid of our internal defines before calling rules.vc\r
+!undef TCL_RULES_MAJOR\r
+!undef TCL_RULES_MINOR\r
+!undef OUR_RULES_MAJOR\r
+!undef OUR_RULES_MINOR\r
+\r
+!if exist("$(_RULESDIR)\rules.vc")\r
+!message *** Using $(_RULESDIR)\rules.vc\r
+!include "$(_RULESDIR)\rules.vc"\r
+!else\r
+!error *** Could not locate rules.vc in $(_RULESDIR)\r
+!endif\r
+\r
+!endif # _RULES_EXT_VC
\ No newline at end of file
diff --git a/pkgs/sqlite3.21.0/win/rules.vc b/pkgs/sqlite3.21.0/win/rules.vc
new file mode 100644 (file)
index 0000000..fac9af9
--- /dev/null
@@ -0,0 +1,1711 @@
+#------------------------------------------------------------- -*- makefile -*-\r
+# rules.vc --\r
+#\r
+# Part of the nmake based build system for Tcl and its extensions.\r
+# This file does all the hard work in terms of parsing build options,\r
+# compiler switches, defining common targets and macros. The Tcl makefile\r
+# directly includes this. Extensions include it via "rules-ext.vc".\r
+#\r
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for\r
+# detailed documentation.\r
+#\r
+# See the file "license.terms" for information on usage and redistribution\r
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
+#\r
+# Copyright (c) 2001-2003 David Gravereaux.\r
+# Copyright (c) 2003-2008 Patrick Thoyts\r
+# Copyright (c) 2017      Ashok P. Nadkarni\r
+#------------------------------------------------------------------------------\r
+\r
+!ifndef _RULES_VC\r
+_RULES_VC = 1\r
+\r
+# The following macros define the version of the rules.vc nmake build system\r
+# For modifications that are not backward-compatible, you *must* change\r
+# the major version.\r
+RULES_VERSION_MAJOR = 1\r
+RULES_VERSION_MINOR = 0\r
+\r
+# The PROJECT macro must be defined by parent makefile.\r
+!if "$(PROJECT)" == ""\r
+!error *** Error: Macro PROJECT not defined! Please define it before including rules.vc\r
+!endif\r
+\r
+!if "$(PRJ_PACKAGE_TCLNAME)" == ""\r
+PRJ_PACKAGE_TCLNAME = $(PROJECT)\r
+!endif\r
+\r
+# Also special case Tcl and Tk to save some typing later\r
+DOING_TCL = 0\r
+DOING_TK  = 0\r
+!if "$(PROJECT)" == "tcl"\r
+DOING_TCL = 1\r
+!elseif "$(PROJECT)" == "tk"\r
+DOING_TK = 1\r
+!endif\r
+\r
+!ifndef NEED_TK\r
+# Backwards compatibility\r
+!ifdef PROJECT_REQUIRES_TK\r
+NEED_TK = $(PROJECT_REQUIRES_TK)\r
+!else\r
+NEED_TK = 0\r
+!endif\r
+!endif\r
+\r
+!ifndef NEED_TCL_SOURCE\r
+NEED_TCL_SOURCE = 0\r
+!endif\r
+\r
+!ifdef NEED_TK_SOURCE\r
+!if $(NEED_TK_SOURCE)\r
+NEED_TK = 1\r
+!endif\r
+!else\r
+NEED_TK_SOURCE = 0\r
+!endif\r
+\r
+################################################################\r
+# Nmake is a pretty weak environment in syntax and capabilities\r
+# so this file is necessarily verbose. It's broken down into\r
+# the following parts.\r
+#\r
+# 0. Sanity check that compiler environment is set up and initialize\r
+#    any built-in settings from the parent makefile\r
+# 1. First define the external tools used for compiling, copying etc.\r
+#    as this is independent of everything else.\r
+# 2. Figure out our build structure in terms of the directory, whether\r
+#    we are building Tcl or an extension, etc.\r
+# 3. Determine the compiler and linker versions\r
+# 4. Build the nmakehlp helper application\r
+# 5. Determine the supported compiler options and features\r
+# 6. Parse the OPTS macro value for user-specified build configuration\r
+# 7. Parse the STATS macro value for statistics instrumentation\r
+# 8. Parse the CHECKS macro for additional compilation checks\r
+# 9. Extract Tcl, and possibly Tk, version numbers from the headers\r
+# 10. Based on this selected configuration, construct the output\r
+#     directory and file paths\r
+# 11. Construct the paths where the package is to be installed\r
+# 12. Set up the actual options passed to compiler and linker based\r
+#     on the information gathered above.\r
+# 13. Define some standard build targets and implicit rules. These may\r
+#     be optionally disabled by the parent makefile.\r
+# 14. (For extensions only.) Compare the configuration of the target\r
+#     Tcl and the extensions and warn against discrepancies.\r
+#\r
+# One final note about the macro names used. They are as they are\r
+# for historical reasons. We would like legacy extensions to\r
+# continue to work with this make include file so be wary of\r
+# changing them for consistency or clarity.\r
+\r
+# 0. Sanity check compiler environment\r
+\r
+# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or\r
+# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)\r
+\r
+!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)\r
+MSG = ^\r
+Visual C++ compiler environment not initialized.\r
+!error $(MSG)\r
+!endif\r
+\r
+# We need to run from the directory the parent makefile is located in.\r
+# nmake does not tell us what makefile was used to invoke it so parent\r
+# makefile has to set the MAKEFILEVC macro or we just make a guess and\r
+# warn if we think that is not the case.\r
+!if "$(MAKEFILEVC)" == ""\r
+\r
+!if exist("$(PROJECT).vc")\r
+MAKEFILEVC = $(PROJECT).vc\r
+!elseif exist("makefile.vc")\r
+MAKEFILEVC = makefile.vc\r
+!endif\r
+!endif # "$(MAKEFILEVC)" == ""\r
+\r
+!if !exist("$(MAKEFILEVC)")\r
+MSG = ^\r
+You must run nmake from the directory containing the project makefile.^\r
+If you are doing that and getting this message, set the MAKEFILEVC^\r
+macro to the name of the project makefile.\r
+!message WARNING: $(MSG)\r
+!endif\r
+\r
+\r
+################################################################\r
+# 1. Define external programs being used\r
+\r
+#----------------------------------------------------------\r
+# Set the proper copy method to avoid overwrite questions\r
+# to the user when copying files and selecting the right\r
+# "delete all" method.\r
+#----------------------------------------------------------\r
+\r
+RMDIR  = rmdir /S /Q\r
+CPY    = xcopy /i /y >NUL\r
+CPYDIR  = xcopy /e /i /y >NUL\r
+COPY   = copy /y >NUL\r
+MKDIR   = mkdir\r
+\r
+######################################################################\r
+# 2. Figure out our build environment in terms of what we're building.\r
+#\r
+# (a) Tcl itself\r
+# (b) Tk\r
+# (c) a Tcl extension using libraries/includes from an *installed* Tcl\r
+# (d) a Tcl extension using libraries/includes from Tcl source directory\r
+#\r
+# This last is needed because some extensions still need\r
+# some Tcl interfaces that are not publicly exposed.\r
+#\r
+# The fragment will set the following macros:\r
+# ROOT - root of this module sources\r
+# COMPATDIR - source directory that holds compatibility sources\r
+# DOCDIR - source directory containing documentation files\r
+# GENERICDIR - platform-independent source directory\r
+# WINDIR - Windows-specific source directory\r
+# TESTDIR - directory containing test files\r
+# TOOLSDIR - directory containing build tools\r
+# _TCLDIR - root of the Tcl installation OR the Tcl sources. Not set\r
+#    when building Tcl itself.\r
+# _INSTALLDIR - native form of the installation path. For Tcl\r
+#    this will be the root of the Tcl installation. For extensions\r
+#    this will be the lib directory under the root.\r
+# TCLINSTALL  - set to 1 if _TCLDIR refers to\r
+#    headers and libraries from an installed Tcl, and 0 if built against\r
+#    Tcl sources. Not set when building Tcl itself. Yes, not very well\r
+#    named.\r
+# _TCL_H - native path to the tcl.h file\r
+#\r
+# If Tk is involved, also sets the following\r
+# _TKDIR - native form Tk installation OR Tk source. Not set if building\r
+#    Tk itself.\r
+# TKINSTALL - set 1 if _TKDIR refers to installed Tk and 0 if Tk sources\r
+# _TK_H - native path to the tk.h file\r
+\r
+# Root directory for sources and assumed subdirectories\r
+ROOT = $(MAKEDIR)\..\r
+# The following paths CANNOT have spaces in them as they appear on the\r
+# left side of implicit rules.\r
+!ifndef COMPATDIR\r
+COMPATDIR      = $(ROOT)\compat\r
+!endif\r
+!ifndef DOCDIR\r
+DOCDIR         = $(ROOT)\doc\r
+!endif\r
+!ifndef GENERICDIR\r
+GENERICDIR     = $(ROOT)\generic\r
+!endif\r
+!ifndef TOOLSDIR\r
+TOOLSDIR       = $(ROOT)\tools\r
+!endif\r
+!ifndef TESTDIR\r
+TESTDIR        = $(ROOT)\tests\r
+!endif\r
+!ifndef LIBDIR\r
+!if exist("$(ROOT)\library")\r
+LIBDIR          = $(ROOT)\library\r
+!else\r
+LIBDIR          = $(ROOT)\lib\r
+!endif\r
+!endif\r
+!ifndef DEMODIR\r
+!if exist("$(LIBDIR)\demos")\r
+DEMODIR                = $(LIBDIR)\demos\r
+!else\r
+DEMODIR                = $(ROOT)\demos\r
+!endif\r
+!endif # ifndef DEMODIR\r
+# Do NOT enclose WINDIR in a !ifndef because Windows always defines\r
+# WINDIR env var to point to c:\windows!\r
+# TBD - This is a potentially dangerous conflict, rename WINDIR to\r
+# something else\r
+WINDIR         = $(ROOT)\win\r
+\r
+!ifndef RCDIR\r
+!if exist("$(WINDIR)\rc")\r
+RCDIR           = $(WINDIR)\rc\r
+!else\r
+RCDIR           = $(WINDIR)\r
+!endif\r
+!endif\r
+RCDIR = $(RCDIR:/=\)\r
+\r
+# The target directory where the built packages and binaries will be installed.\r
+# INSTALLDIR is the (optional) path specified by the user.\r
+# _INSTALLDIR is INSTALLDIR using the backslash separator syntax\r
+!ifdef INSTALLDIR\r
+### Fix the path separators.\r
+_INSTALLDIR    = $(INSTALLDIR:/=\)\r
+!else\r
+### Assume the normal default.\r
+_INSTALLDIR    = $(HOMEDRIVE)\Tcl\r
+!endif\r
+\r
+!if $(DOING_TCL)\r
+\r
+# BEGIN Case 2(a) - Building Tcl itself\r
+\r
+# Only need to define _TCL_H\r
+_TCL_H = ..\generic\tcl.h\r
+\r
+# END Case 2(a) - Building Tcl itself\r
+\r
+!elseif $(DOING_TK)\r
+\r
+# BEGIN Case 2(b) - Building Tk\r
+\r
+TCLINSTALL = 0 # Tk always builds against Tcl source, not an installed Tcl\r
+!if "$(TCLDIR)" == ""\r
+!if [echo TCLDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]\r
+!error *** Could not locate Tcl source directory.\r
+!endif\r
+!include nmakehlp.out\r
+!endif # TCLDIR == ""\r
+\r
+_TCLDIR        = $(TCLDIR:/=\)\r
+_TCL_H  = $(_TCLDIR)\generic\tcl.h\r
+!if !exist("$(_TCL_H)")\r
+!error Could not locate tcl.h. Please set the TCLDIR macro to point to the Tcl *source* directory.\r
+!endif\r
+\r
+_TK_H = ..\generic\tk.h\r
+\r
+# END Case 2(b) - Building Tk\r
+\r
+!else\r
+\r
+# BEGIN Case 2(c) or (d) - Building an extension other than Tk\r
+\r
+# If command line has specified Tcl location through TCLDIR, use it\r
+# else default to the INSTALLDIR setting\r
+!if "$(TCLDIR)" != ""\r
+\r
+_TCLDIR        = $(TCLDIR:/=\)\r
+!if exist("$(_TCLDIR)\include\tcl.h") # Case 2(c) with TCLDIR defined\r
+TCLINSTALL     = 1\r
+_TCL_H          = $(_TCLDIR)\include\tcl.h\r
+!elseif exist("$(_TCLDIR)\generic\tcl.h") # Case 2(d) with TCLDIR defined\r
+TCLINSTALL     = 0\r
+_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
+!endif\r
+\r
+!else  #  # Case 2(c) for extensions with TCLDIR undefined\r
+\r
+# Need to locate Tcl depending on whether it needs Tcl source or not.\r
+# If we don't, check the INSTALLDIR for an installed Tcl first\r
+\r
+!if exist("$(_INSTALLDIR)\include\tcl.h") && !$(NEED_TCL_SOURCE)\r
+\r
+TCLINSTALL     = 1\r
+TCLDIR          = $(_INSTALLDIR)\..\r
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions\r
+# later so the \.. accounts for the /lib\r
+_TCLDIR                = $(_INSTALLDIR)\..\r
+_TCL_H          = $(_TCLDIR)\include\tcl.h\r
+\r
+!else # exist(...) && ! $(NEED_TCL_SOURCE)\r
+\r
+!if [echo _TCLDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]\r
+!error *** Could not locate Tcl source directory.\r
+!endif\r
+!include nmakehlp.out\r
+TCLINSTALL      = 0\r
+TCLDIR         = $(_TCLDIR)\r
+_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
+\r
+!endif # exist(...) && ! $(NEED_TCL_SOURCE)\r
+\r
+!endif # TCLDIR\r
+\r
+!ifndef _TCL_H\r
+MSG =^\r
+Failed to find tcl.h. The TCLDIR macro is set incorrectly or is not set and default path does not contain tcl.h.\r
+!error $(MSG)\r
+!endif\r
+\r
+# Now do the same to locate Tk headers and libs if project requires Tk\r
+!if $(NEED_TK)\r
+\r
+!if "$(TKDIR)" != ""\r
+\r
+_TKDIR = $(TKDIR:/=\)\r
+!if exist("$(_TKDIR)\include\tk.h")\r
+TKINSTALL      = 1\r
+_TK_H          = $(_TKDIR)\include\tk.h\r
+!elseif exist("$(_TKDIR)\generic\tk.h")\r
+TKINSTALL      = 0\r
+_TK_H          = $(_TKDIR)\generic\tk.h\r
+!endif\r
+\r
+!else # TKDIR not defined\r
+\r
+# Need to locate Tcl depending on whether it needs Tcl source or not.\r
+# If we don't, check the INSTALLDIR for an installed Tcl first\r
+\r
+!if exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)\r
+\r
+TKINSTALL      = 1\r
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions\r
+# later so the \.. accounts for the /lib\r
+_TKDIR         = $(_INSTALLDIR)\..\r
+_TK_H          = $(_TKDIR)\include\tk.h\r
+TKDIR          = $(_TKDIR)\r
+\r
+!else # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)\r
+\r
+!if [echo _TKDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tk.h >> nmakehlp.out]\r
+!error *** Could not locate Tk source directory.\r
+!endif\r
+!include nmakehlp.out\r
+TKINSTALL      = 0\r
+TKDIR          = $(_TKDIR)\r
+_TK_H          = $(_TKDIR)\generic\tk.h\r
+\r
+!endif # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)\r
+\r
+!endif # TKDIR\r
+\r
+!ifndef _TK_H\r
+MSG =^\r
+Failed to find tk.h. The TKDIR macro is set incorrectly or is not set and default path does not contain tk.h.\r
+!error $(MSG)\r
+!endif\r
+\r
+!endif # NEED_TK\r
+\r
+!if $(NEED_TCL_SOURCE) && $(TCLINSTALL)\r
+MSG = ^\r
+*** Warning: This extension requires the source distribution of Tcl.^\r
+*** Please set the TCLDIR macro to point to the Tcl sources.\r
+!error $(MSG)\r
+!endif\r
+\r
+!if $(NEED_TK_SOURCE)\r
+!if $(TKINSTALL)\r
+MSG = ^\r
+*** Warning: This extension requires the source distribution of Tk.^\r
+*** Please set the TKDIR macro to point to the Tk sources.\r
+!error $(MSG)\r
+!endif\r
+!endif\r
+\r
+\r
+# If INSTALLDIR set to tcl installation root dir then reset to the\r
+# lib dir for installing extensions\r
+!if exist("$(_INSTALLDIR)\include\tcl.h")\r
+_INSTALLDIR=$(_INSTALLDIR)\lib\r
+!endif\r
+\r
+# END Case 2(c) or (d) - Building an extension\r
+!endif # if $(DOING_TCL)\r
+\r
+################################################################\r
+# 3. Determine compiler version and architecture\r
+# In this section, we figure out the compiler version and the\r
+# architecture for which we are building. This sets the\r
+# following macros:\r
+# VCVERSION - the internal compiler version as 1200, 1400, 1910 etc.\r
+#     This is also printed by the compiler in dotted form 19.10 etc.\r
+# VCVER - the "marketing version", for example Visual C++ 6 for internal\r
+#     compiler version 1200. This is kept only for legacy reasons as it\r
+#     does not make sense for recent Microsoft compilers. Only used for\r
+#     output directory names.\r
+# ARCH - set to IX86 or AMD64 depending on 32- or 64-bit target\r
+# NATIVE_ARCH - set to IX86 or AMD64 for the host machine\r
+# MACHINE - same as $(ARCH) - legacy\r
+# _VC_MANIFEST_EMBED_{DLL,EXE} - commands for embedding a manifest if needed\r
+# CFG_ENCODING - set to an character encoding.\r
+#   TBD - this is passed to compiler as TCL_CFGVAL_ENCODING but can't\r
+#   see where it is used\r
+\r
+cc32           = $(CC)   # built-in default.\r
+link32         = link\r
+lib32          = lib\r
+rc32           = $(RC)   # built-in default.\r
+\r
+#----------------------------------------------------------------\r
+# Figure out the compiler architecture and version by writing\r
+# the C macros to a file, preprocessing them with the C\r
+# preprocessor and reading back the created file\r
+\r
+_HASH=^#\r
+_VC_MANIFEST_EMBED_EXE=\r
+_VC_MANIFEST_EMBED_DLL=\r
+VCVER=0\r
+!if ![echo VCVERSION=_MSC_VER > vercl.x] \\r
+    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \\r
+    && ![echo ARCH=IX86 >> vercl.x] \\r
+    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \\r
+    && ![echo ARCH=AMD64 >> vercl.x] \\r
+    && ![echo $(_HASH)endif >> vercl.x] \\r
+    && ![$(cc32) -nologo -TC -P vercl.x 2>NUL]\r
+!include vercl.i\r
+!if $(VCVERSION) < 1900\r
+!if ![echo VCVER= ^\> vercl.vc] \\r
+    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]\r
+!include vercl.vc\r
+!endif\r
+!else\r
+# The simple calculation above does not apply to new Visual Studio releases\r
+# Keep the compiler version in its native form.\r
+VCVER = $(VCVERSION)\r
+!endif\r
+!endif\r
+\r
+!if ![del 2>NUL /q/f vercl.x vercl.i vercl.vc]\r
+!endif\r
+\r
+#----------------------------------------------------------------\r
+# The MACHINE macro is used by legacy makefiles so set it as well\r
+!ifdef MACHINE\r
+!if "$(MACHINE)" == "x86"\r
+!undef MACHINE\r
+MACHINE = IX86\r
+!elseif "$(MACHINE)" == "x64"\r
+!undef MACHINE\r
+MACHINE = AMD64\r
+!endif\r
+!if "$(MACHINE)" != "$(ARCH)"\r
+!error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH).\r
+!endif\r
+!else\r
+MACHINE=$(ARCH)\r
+!endif\r
+\r
+#------------------------------------------------------------\r
+# Figure out the *host* architecture by reading the registry\r
+\r
+!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]\r
+NATIVE_ARCH=IX86\r
+!else\r
+NATIVE_ARCH=AMD64\r
+!endif\r
+\r
+# Since MSVC8 we must deal with manifest resources.\r
+!if $(VCVERSION) >= 1400\r
+_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1\r
+_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2\r
+!endif\r
+\r
+!ifndef CFG_ENCODING\r
+CFG_ENCODING   = \"cp1252\"\r
+!endif\r
+\r
+################################################################\r
+# 4. Build the nmakehlp program\r
+# This is a helper app we need to overcome nmake's limiting\r
+# environment. We will call out to it to get various bits of\r
+# information about supported compiler options etc.\r
+#\r
+# Tcl itself will always use the nmakehlp.c program which is\r
+# in its own source. This is the "master" copy and kept updated.\r
+#\r
+# Extensions built against an installed Tcl will use the installed\r
+# copy of Tcl's nmakehlp.c if there is one and their own version\r
+# otherwise. In the latter case, they would also be using their own\r
+# rules.vc. Note that older versions of Tcl do not install nmakehlp.c\r
+# or rules.vc.\r
+#\r
+# Extensions built against Tcl sources will use the one from the Tcl source.\r
+#\r
+# When building an extension using a sufficiently new version of Tcl,\r
+# rules-ext.vc will define NMAKEHLPC appropriately to point to the\r
+# copy of nmakehlp.c to be used.\r
+\r
+!ifndef NMAKEHLPC\r
+# Default to the one in the current directory (the extension's own nmakehlp.c)\r
+NMAKEHLPC = nmakehlp.c\r
+\r
+!if !$(DOING_TCL)\r
+!if $(TCLINSTALL)\r
+!if exist("$(_TCLDIR)\lib\nmake\nmakehlp.c")\r
+NMAKEHLPC = $(_TCLDIR)\lib\nmake\nmakehlp.c\r
+!endif\r
+!else # ! $(TCLINSTALL)\r
+!if exist("$(_TCLDIR)\win\nmakehlp.c")\r
+NMAKEHLPC = $(_TCLDIR)\win\nmakehlp.c\r
+!endif\r
+!endif # $(TCLINSTALL)\r
+!endif # !$(DOING_TCL)\r
+\r
+!endif # NMAKEHLPC\r
+\r
+# We always build nmakehlp even if it exists since we do not know\r
+# what source it was built from.\r
+!message *** Using $(NMAKEHLPC)\r
+!if [$(cc32) -nologo "$(NMAKEHLPC)" -link -subsystem:console > nul]\r
+!endif\r
+\r
+################################################################\r
+# 5. Test for compiler features\r
+# Visual C++ compiler options have changed over the years. Check\r
+# which options are supported by the compiler in use.\r
+#\r
+# The following macros are set:\r
+# OPTIMIZATIONS - the compiler flags to be used for optimized builds\r
+# DEBUGFLAGS - the compiler flags to be used for debug builds\r
+# LINKERFLAGS - Flags passed to the linker\r
+#\r
+# Note that these are the compiler settings *available*, not those\r
+# that will be *used*. The latter depends on the OPTS macro settings\r
+# which we have not yet parsed.\r
+#\r
+# Also note that some of the flags in OPTIMIZATIONS are not really\r
+# related to optimization. They are placed there only for legacy reasons\r
+# as some extensions expect them to be included in that macro.\r
+\r
+# -Op improves float consistency. Note only needed for older compilers\r
+# Newer compilers do not need or support this option.\r
+!if [nmakehlp -c -Op]\r
+FPOPTS  = -Op\r
+!endif\r
+\r
+# Strict floating point semantics - present in newer compilers in lieu of -Op\r
+!if [nmakehlp -c -fp:strict]\r
+FPOPTS  = $(FPOPTS) -fp:strict\r
+!endif\r
+\r
+!if "$(MACHINE)" == "IX86"\r
+### test for pentium errata\r
+!if [nmakehlp -c -QI0f]\r
+!message *** Compiler has 'Pentium 0x0f fix'\r
+FPOPTS  = $(FPOPTS) -QI0f\r
+!else\r
+!message *** Compiler does not have 'Pentium 0x0f fix'\r
+!endif\r
+!endif\r
+\r
+### test for optimizations\r
+# /O2 optimization includes /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy as per\r
+# documentation. Note we do NOT want /Gs as that inserts a _chkstk\r
+# stack probe at *every* function entry, not just those with more than\r
+# a page of stack allocation resulting in a performance hit.  However,\r
+# /O2 documentation is misleading as its stack probes are simply the\r
+# default page size locals allocation probes and not what is implied\r
+# by an explicit /Gs option.\r
+\r
+OPTIMIZATIONS = $(FPOPTS)\r
+\r
+!if [nmakehlp -c -O2]\r
+!message *** Compiler has 'Optimizations'\r
+OPTIMIZING = 1\r
+OPTIMIZATIONS   = $(OPTIMIZATIONS) -O2\r
+!else\r
+# Legacy, really. All modern compilers support this\r
+!message *** Compiler does not have 'Optimizations'\r
+OPTIMIZING = 0\r
+!endif\r
+\r
+# Checks for buffer overflows in local arrays\r
+!if [nmakehlp -c -GS]\r
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS\r
+!endif\r
+\r
+# Link time optimization. Note that this option (potentially) makes\r
+# generated libraries only usable by the specific VC++ version that\r
+# created it. Requires /LTCG linker option\r
+!if [nmakehlp -c -GL]\r
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL\r
+CC_GL_OPT_ENABLED = 1\r
+!else\r
+# In newer compilers -GL and -YX are incompatible.\r
+!if [nmakehlp -c -YX]\r
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX\r
+!endif\r
+!endif # [nmakehlp -c -GL]\r
+\r
+DEBUGFLAGS     = $(FPOPTS)\r
+\r
+# Run time error checks. Not available or valid in a release, non-debug build\r
+# RTC is for modern compilers, -GZ is legacy\r
+!if [nmakehlp -c -RTC1]\r
+DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1\r
+!elseif [nmakehlp -c -GZ]\r
+DEBUGFLAGS     = $(DEBUGFLAGS) -GZ\r
+!endif\r
+\r
+#----------------------------------------------------------------\r
+# Linker flags\r
+\r
+# LINKER_TESTFLAGS are for internal use when we call nmakehlp to test\r
+# if the linker supports a specific option. Without these flags link will\r
+# return "LNK1561: entry point must be defined" error compiling from VS-IDE:\r
+# They are not passed through to the actual application / extension\r
+# link rules.\r
+!ifndef LINKER_TESTFLAGS\r
+LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmakehlp.out\r
+!endif\r
+\r
+LINKERFLAGS     =\r
+\r
+# If compiler has enabled link time optimization, linker must too with -ltcg\r
+!ifdef CC_GL_OPT_ENABLED\r
+!if [nmakehlp -l -ltcg $(LINKER_TESTFLAGS)]\r
+LINKERFLAGS     = $(LINKERFLAGS) -ltcg\r
+!endif\r
+!endif\r
+\r
+########################################################################\r
+# 6. Parse the OPTS macro to work out the requested build configuration.\r
+# Based on this, we will construct the actual switches to be passed to the\r
+# compiler and linker using the macros defined in the previous section.\r
+# The following macros are defined by this section based on OPTS\r
+# STATIC_BUILD - 0 -> Tcl is to be built as a shared library\r
+#                1 -> build as a static library and shell\r
+# TCL_THREADS - legacy but always 1 on Windows since winsock requires it.\r
+# DEBUG - 1 -> debug build, 0 -> release builds\r
+# SYMBOLS - 1 -> generate PDB's, 0 -> no PDB's\r
+# PROFILE - 1 -> generate profiling info, 0 -> no profiling\r
+# PGO     - 1 -> profile based optimization, 0 -> no\r
+# MSVCRT  - 1 -> link to dynamic C runtime even when building static Tcl build\r
+#           0 -> link to static C runtime for static Tcl build.\r
+#           Does not impact shared Tcl builds (STATIC_BUILD == 0)\r
+# TCL_USE_STATIC_PACKAGES - 1 -> statically link the registry and dde extensions\r
+#           in the Tcl shell. 0 -> keep them as shared libraries\r
+#           Does not impact shared Tcl builds.\r
+# USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation.\r
+#           0 -> Use the non-thread allocator.\r
+# UNCHECKED - 1 -> when doing a debug build with symbols, use the release\r
+#           C runtime, 0 -> use the debug C runtime.\r
+# USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking\r
+# CONFIG_CHECK - 1 -> check current build configuration against Tcl\r
+#           configuration (ignored for Tcl itself)\r
+# Further, LINKERFLAGS are modified based on above.\r
+\r
+# Default values for all the above\r
+STATIC_BUILD   = 0\r
+TCL_THREADS    = 1\r
+DEBUG          = 0\r
+SYMBOLS                = 0\r
+PROFILE                = 0\r
+PGO            = 0\r
+MSVCRT         = 1\r
+TCL_USE_STATIC_PACKAGES        = 0\r
+USE_THREAD_ALLOC = 1\r
+UNCHECKED      = 0\r
+CONFIG_CHECK    = 1\r
+!if $(DOING_TCL)\r
+USE_STUBS       = 0\r
+!else\r
+USE_STUBS       = 1\r
+!endif\r
+\r
+# If OPTS is not empty AND does not contain "none" which turns off all OPTS\r
+# set the above macros based on OPTS content\r
+!if "$(OPTS)" != "" && ![nmakehlp -f "$(OPTS)" "none"]\r
+\r
+# OPTS are specified, parse them\r
+\r
+!if [nmakehlp -f $(OPTS) "static"]\r
+!message *** Doing static\r
+STATIC_BUILD   = 1\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "nostubs"]\r
+!message *** Not using stubs\r
+USE_STUBS      = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "nomsvcrt"]\r
+!message *** Doing nomsvcrt\r
+MSVCRT         = 0\r
+!else\r
+!if [nmakehlp -f $(OPTS) "msvcrt"]\r
+!message *** Doing msvcrt\r
+MSVCRT         = 1\r
+!else\r
+!if !$(STATIC_BUILD)\r
+MSVCRT         = 1\r
+!else\r
+MSVCRT         = 0\r
+!endif\r
+!endif\r
+!endif # [nmakehlp -f $(OPTS) "nomsvcrt"]\r
+\r
+!if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD)\r
+!message *** Doing staticpkg\r
+TCL_USE_STATIC_PACKAGES        = 1\r
+!else\r
+TCL_USE_STATIC_PACKAGES        = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "nothreads"]\r
+!message *** Compile explicitly for non-threaded tcl\r
+TCL_THREADS    = 0\r
+USE_THREAD_ALLOC= 0\r
+!else\r
+TCL_THREADS    = 1\r
+USE_THREAD_ALLOC= 1\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "symbols"]\r
+!message *** Doing symbols\r
+DEBUG          = 1\r
+!else\r
+DEBUG          = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "pdbs"]\r
+!message *** Doing pdbs\r
+SYMBOLS                = 1\r
+!else\r
+SYMBOLS                = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "profile"]\r
+!message *** Doing profile\r
+PROFILE                = 1\r
+!else\r
+PROFILE                = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "pgi"]\r
+!message *** Doing profile guided optimization instrumentation\r
+PGO            = 1\r
+!elseif [nmakehlp -f $(OPTS) "pgo"]\r
+!message *** Doing profile guided optimization\r
+PGO            = 2\r
+!else\r
+PGO            = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "loimpact"]\r
+!message *** Warning: ignoring option "loimpact" - deprecated on modern Windows.\r
+!endif\r
+\r
+# TBD - should get rid of this option\r
+!if [nmakehlp -f $(OPTS) "thrdalloc"]\r
+!message *** Doing thrdalloc\r
+USE_THREAD_ALLOC = 1\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "tclalloc"]\r
+USE_THREAD_ALLOC = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "unchecked"]\r
+!message *** Doing unchecked\r
+UNCHECKED = 1\r
+!else\r
+UNCHECKED = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "noconfigcheck"]\r
+CONFIG_CHECK = 1\r
+!else\r
+CONFIG_CHECK = 0\r
+!endif\r
+\r
+!endif # "$(OPTS)" != ""  && ... parsing of OPTS\r
+\r
+# Set linker flags based on above\r
+\r
+!if $(PGO) > 1\r
+!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)]\r
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize\r
+!else\r
+MSG=^\r
+This compiler does not support profile guided optimization.\r
+!error $(MSG)\r
+!endif\r
+!elseif $(PGO) > 0\r
+!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)]\r
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument\r
+!else\r
+MSG=^\r
+This compiler does not support profile guided optimization.\r
+!error $(MSG)\r
+!endif\r
+!endif\r
+\r
+################################################################\r
+# 7. Parse the STATS macro to configure code instrumentation\r
+# The following macros are set by this section:\r
+# TCL_MEM_DEBUG - 1 -> enables memory allocation instrumentation\r
+#                 0 -> disables\r
+# TCL_COMPILE_DEBUG - 1 -> enables byte compiler logging\r
+#                     0 -> disables\r
+\r
+# Default both are off\r
+TCL_MEM_DEBUG      = 0\r
+TCL_COMPILE_DEBUG   = 0\r
+\r
+!if "$(STATS)" != "" && ![nmakehlp -f "$(STATS)" "none"]\r
+\r
+!if [nmakehlp -f $(STATS) "memdbg"]\r
+!message *** Doing memdbg\r
+TCL_MEM_DEBUG      = 1\r
+!else\r
+TCL_MEM_DEBUG      = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(STATS) "compdbg"]\r
+!message *** Doing compdbg\r
+TCL_COMPILE_DEBUG   = 1\r
+!else\r
+TCL_COMPILE_DEBUG   = 0\r
+!endif\r
+\r
+!endif\r
+\r
+####################################################################\r
+# 8. Parse the CHECKS macro to configure additional compiler checks\r
+# The following macros are set by this section:\r
+# WARNINGS - compiler switches that control the warnings level\r
+# TCL_NO_DEPRECATED - 1 -> disable support for deprecated functions\r
+#                     0 -> enable deprecated functions\r
+\r
+# Defaults - Permit deprecated functions and warning level 3\r
+TCL_NO_DEPRECATED          = 0\r
+WARNINGS                   = -W3\r
+\r
+!if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"]\r
+\r
+!if [nmakehlp -f $(CHECKS) "nodep"]\r
+!message *** Doing nodep check\r
+TCL_NO_DEPRECATED          = 1\r
+!endif\r
+\r
+!if [nmakehlp -f $(CHECKS) "fullwarn"]\r
+!message *** Doing full warnings check\r
+WARNINGS                   = -W4\r
+!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)]\r
+LINKERFLAGS                = $(LINKERFLAGS) -warn:3\r
+!endif\r
+!endif\r
+\r
+!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]\r
+!message *** Doing 64bit portability warnings\r
+WARNINGS                   = $(WARNINGS) -Wp64\r
+!endif\r
+\r
+!endif\r
+\r
+################################################################\r
+# 9. Extract various version numbers\r
+# For Tcl and Tk, version numbers are extracted from tcl.h and tk.h\r
+# respectively. For extensions, versions are extracted from the\r
+# configure.in or configure.ac from the TEA configuration if it\r
+# exists, and unset otherwise.\r
+# Sets the following macros:\r
+# TCL_MAJOR_VERSION\r
+# TCL_MINOR_VERSION\r
+# TCL_PATCH_LEVEL\r
+# TCL_VERSION\r
+# TK_MAJOR_VERSION\r
+# TK_MINOR_VERSION\r
+# TK_PATCH_LEVEL\r
+# TK_VERSION\r
+# DOTVERSION - set as (for example) 2.5\r
+# VERSION - set as (for example 25)\r
+#--------------------------------------------------------------\r
+\r
+!if [echo REM = This file is generated from rules.vc > versions.vc]\r
+!endif\r
+!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TCL_MINOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]\r
+!endif\r
+\r
+!if defined(_TK_H)\r
+!if [echo TK_MAJOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TK_MINOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TK_PATCH_LEVEL = \>> versions.vc] \\r
+   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]\r
+!endif\r
+!endif # _TK_H\r
+\r
+!include versions.vc\r
+\r
+TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)\r
+TCL_DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)\r
+!if defined(_TK_H)\r
+TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)\r
+TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)\r
+!endif\r
+\r
+# Set DOTVERSION and VERSION\r
+!if $(DOING_TCL)\r
+\r
+DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)\r
+VERSION = $(TCL_VERSION)\r
+\r
+!elseif $(DOING_TK)\r
+\r
+DOTVERSION = $(TK_DOTVERSION)\r
+VERSION = $(TK_VERSION)\r
+\r
+!else # Doing a non-Tk extension\r
+\r
+# If parent makefile has not defined DOTVERSION, try to get it from TEA\r
+# first from a configure.in file, and then from configure.ac\r
+!ifndef DOTVERSION\r
+!if [echo DOTVERSION = \> versions.vc] \\r
+   || [nmakehlp -V $(ROOT)\configure.in ^[$(PROJECT)^] >> versions.vc]\r
+!if [echo DOTVERSION = \> versions.vc] \\r
+   || [nmakehlp -V $(ROOT)\configure.ac ^[$(PROJECT)^] >> versions.vc]\r
+!error *** Could not figure out extension version. Please define DOTVERSION in parent makefile before including rules.vc.\r
+!endif\r
+!endif\r
+!include versions.vc\r
+!endif # DOTVERSION\r
+VERSION         = $(DOTVERSION:.=)\r
+\r
+!endif # $(DOING_TCL) ... etc.\r
+\r
+################################################################\r
+# 10. Construct output directory and file paths\r
+# Figure-out how to name our intermediate and output directories.\r
+# In order to avoid inadvertent mixing of object files built using\r
+# different compilers, build configurations etc.,\r
+#\r
+# Naming convention (suffixes):\r
+#   t = full thread support.\r
+#   s = static library (as opposed to an import library)\r
+#   g = linked to the debug enabled C run-time.\r
+#   x = special static build when it links to the dynamic C run-time.\r
+#\r
+# The following macros are set in this section:\r
+# SUFX - the suffix to use for binaries based on above naming convention\r
+# BUILDDIRTOP - the toplevel default output directory\r
+#      is of the form {Release,Debug}[_AMD64][_COMPILERVERSION]\r
+# TMP_DIR - directory where object files are created\r
+# OUT_DIR - directory where output executables are created\r
+# Both TMP_DIR and OUT_DIR are defaulted only if not defined by the\r
+# parent makefile (or command line). The default values are\r
+# based on BUILDDIRTOP.\r
+# STUBPREFIX - name of the stubs library for this project\r
+# PRJIMPLIB - output path of the generated project import library\r
+# PRJLIBNAME - name of generated project library\r
+# PRJLIB     - output path of generated project library\r
+# PRJSTUBLIBNAME - name of the generated project stubs library\r
+# PRJSTUBLIB - output path of the generated project stubs library\r
+# RESFILE - output resource file (only if not static build)\r
+\r
+SUFX       = tsgx\r
+\r
+!if $(DEBUG)\r
+BUILDDIRTOP = Debug\r
+!else\r
+BUILDDIRTOP = Release\r
+!endif\r
+\r
+!if "$(MACHINE)" != "IX86"\r
+BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)\r
+!endif\r
+!if $(VCVER) > 6\r
+BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)\r
+!endif\r
+\r
+!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)\r
+SUFX       = $(SUFX:g=)\r
+!endif\r
+\r
+TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX\r
+\r
+!if !$(STATIC_BUILD)\r
+TMP_DIRFULL = $(TMP_DIRFULL:Static=)\r
+SUFX       = $(SUFX:s=)\r
+EXT        = dll\r
+TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
+SUFX       = $(SUFX:x=)\r
+!else\r
+TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)\r
+EXT        = lib\r
+!if !$(MSVCRT)\r
+TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
+SUFX       = $(SUFX:x=)\r
+!endif\r
+!endif\r
+\r
+!if !$(TCL_THREADS)\r
+TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)\r
+SUFX       = $(SUFX:t=)\r
+!endif\r
+\r
+!ifndef TMP_DIR\r
+TMP_DIR            = $(TMP_DIRFULL)\r
+!ifndef OUT_DIR\r
+OUT_DIR            = .\$(BUILDDIRTOP)\r
+!endif\r
+!else\r
+!ifndef OUT_DIR\r
+OUT_DIR            = $(TMP_DIR)\r
+!endif\r
+!endif\r
+\r
+# Relative paths -> absolute\r
+!if [echo OUT_DIR = \> nmakehlp.out] \\r
+   || [nmakehlp -Q "$(OUT_DIR)" >> nmakehlp.out]\r
+!error *** Could not fully qualify path OUT_DIR=$(OUT_DIR)\r
+!endif\r
+!if [echo TMP_DIR = \>> nmakehlp.out] \\r
+   || [nmakehlp -Q "$(TMP_DIR)" >> nmakehlp.out]\r
+!error *** Could not fully qualify path TMP_DIR=$(TMP_DIR)\r
+!endif\r
+!include nmakehlp.out\r
+\r
+# The name of the stubs library for the project being built\r
+STUBPREFIX      = $(PROJECT)stub\r
+\r
+# Set up paths to various Tcl executables and libraries needed by extensions\r
+!if $(DOING_TCL)\r
+\r
+TCLSHNAME       = $(PROJECT)sh$(VERSION)$(SUFX).exe\r
+TCLSH          = $(OUT_DIR)\$(TCLSHNAME)\r
+TCLIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib\r
+TCLLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)\r
+TCLLIB         = $(OUT_DIR)\$(TCLLIBNAME)\r
+\r
+TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
+TCLSTUBLIB     = $(OUT_DIR)\$(TCLSTUBLIBNAME)\r
+TCL_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"\r
+\r
+!else # ! $(DOING_TCL)\r
+\r
+!if $(TCLINSTALL) # Building against an installed Tcl\r
+\r
+TCLSH          = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe\r
+!if !exist("$(TCLSH)") && $(TCL_THREADS)\r
+TCLSH           = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe\r
+!endif\r
+TCLSTUBLIB     = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib\r
+TCLIMPLIB      = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib\r
+TCL_LIBRARY    = $(_TCLDIR)\lib\r
+TCLREGLIB      = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib\r
+TCLDDELIB      = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib\r
+TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target\r
+TCL_INCLUDES    = -I"$(_TCLDIR)\include"\r
+\r
+!else # Building against Tcl sources\r
+\r
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe\r
+!if !exist($(TCLSH)) && $(TCL_THREADS)\r
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe\r
+!endif\r
+TCLSTUBLIB     = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib\r
+TCLIMPLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib\r
+TCL_LIBRARY    = $(_TCLDIR)\library\r
+TCLREGLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib\r
+TCLDDELIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib\r
+TCLTOOLSDIR    = $(_TCLDIR)\tools\r
+TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"\r
+\r
+!endif # TCLINSTALL\r
+\r
+tcllibs = "$(TCLSTUBLIB)" "$(TCLIMPLIB)"\r
+\r
+!endif # $(DOING_TCL)\r
+\r
+# We need a tclsh that will run on the host machine as part of the build.\r
+# IX86 runs on all architectures.\r
+!ifndef TCLSH_NATIVE\r
+!if "$(MACHINE)" == "IX86" || "$(MACHINE)" == "$(NATIVE_ARCH)"\r
+TCLSH_NATIVE   = $(TCLSH)\r
+!else\r
+!error You must explicitly set TCLSH_NATIVE for cross-compilation\r
+!endif\r
+!endif\r
+\r
+# Do the same for Tk and Tk extensions that require the Tk libraries\r
+!if $(DOING_TK) || $(NEED_TK)\r
+WISHNAMEPREFIX = wish\r
+WISHNAME = $(WISHNAMEPREFIX)$(TK_VERSION)$(SUFX).exe\r
+TKLIBNAME      = $(PROJECT)$(TK_VERSION)$(SUFX).$(EXT)\r
+TKSTUBLIBNAME  = tkstub$(TK_VERSION).lib\r
+TKIMPLIBNAME   = tk$(TK_VERSION)$(SUFX).lib\r
+\r
+!if $(DOING_TK)\r
+WISH           = $(OUT_DIR)\$(WISHNAME)\r
+TKSTUBLIB      = $(OUT_DIR)\$(TKSTUBLIBNAME)\r
+TKIMPLIB       = $(OUT_DIR)\$(TKIMPLIBNAME)\r
+TKLIB          = $(OUT_DIR)\$(TKLIBNAME)\r
+TK_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"\r
+\r
+!else # effectively NEED_TK\r
+\r
+!if $(TKINSTALL) # Building against installed Tk\r
+WISH           = $(_TKDIR)\bin\$(WISHNAME)\r
+TKSTUBLIB      = $(_TKDIR)\lib\$(TKSTUBLIBNAME)\r
+TKIMPLIB       = $(_TKDIR)\lib\$(TKIMPLIBNAME)\r
+TK_INCLUDES     = -I"$(_TKDIR)\include"\r
+!else # Building against Tk sources\r
+WISH           = $(_TKDIR)\win\$(BUILDDIRTOP)\$(WISHNAME)\r
+TKSTUBLIB      = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKSTUBLIBNAME)\r
+TKIMPLIB       = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKIMPLIBNAME)\r
+TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"\r
+!endif # TKINSTALL\r
+tklibs = "$(TKSTUBLIB)" "$(TKIMPLIB)"\r
+\r
+!endif # $(DOING_TK)\r
+!endif # $(DOING_TK) || $(NEED_TK)\r
+\r
+# Various output paths\r
+PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX:t=).lib\r
+PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX:t=).$(EXT)\r
+PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)\r
+\r
+PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
+PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)\r
+\r
+# If extension parent makefile has not defined a resource definition file,\r
+# we will generate one from standard template.\r
+!if !$(DOING_TCL) && !$(DOING_TK) && !$(STATIC_BUILD)\r
+!ifdef RCFILE\r
+RESFILE = $(TMP_DIR)\$(RCFILE:.rc=.res)\r
+!else\r
+RESFILE = $(TMP_DIR)\$(PROJECT).res\r
+!endif\r
+!endif\r
+\r
+###################################################################\r
+# 11. Construct the paths for the installation directories\r
+# The following macros get defined in this section:\r
+# LIB_INSTALL_DIR - where libraries should be installed\r
+# BIN_INSTALL_DIR - where the executables should be installed\r
+# DOC_INSTALL_DIR - where documentation should be installed\r
+# SCRIPT_INSTALL_DIR - where scripts should be installed\r
+# INCLUDE_INSTALL_DIR - where C include files should be installed\r
+# DEMO_INSTALL_DIR - where demos should be installed\r
+# PRJ_INSTALL_DIR - where package will be installed (not set for tcl and tk)\r
+\r
+!if $(DOING_TCL) || $(DOING_TK)\r
+LIB_INSTALL_DIR                = $(_INSTALLDIR)\lib\r
+BIN_INSTALL_DIR                = $(_INSTALLDIR)\bin\r
+DOC_INSTALL_DIR                = $(_INSTALLDIR)\doc\r
+!if $(DOING_TCL)\r
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)\r
+!else # DOING_TK\r
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)\r
+!endif\r
+DEMO_INSTALL_DIR       = $(SCRIPT_INSTALL_DIR)\demos\r
+INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\include\r
+\r
+!else # extension other than Tk\r
+\r
+PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)\r
+LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
+BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
+DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
+SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)\r
+DEMO_INSTALL_DIR       = $(PRJ_INSTALL_DIR)\demos\r
+INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include\r
+\r
+!endif\r
+\r
+###################################################################\r
+# 12. Set up actual options to be passed to the compiler and linker\r
+# Now we have all the information we need, set up the actual flags and\r
+# options that we will pass to the compiler and linker. The main\r
+# makefile should use these in combination with whatever other flags\r
+# and switches are specific to it.\r
+# The following macros are defined, names are for historical compatibility:\r
+# OPTDEFINES - /Dxxx C macro flags based on user-specified OPTS\r
+# COMPILERFLAGS - /Dxxx C macro flags independent of any configuration opttions\r
+# crt - Compiler switch that selects the appropriate C runtime\r
+# cdebug - Compiler switches related to debug AND optimizations\r
+# cwarn - Compiler switches that set warning levels\r
+# cflags - complete compiler switches (subsumes cdebug and cwarn)\r
+# ldebug - Linker switches controlling debug information and optimization\r
+# lflags - complete linker switches (subsumes ldebug) except subsystem type\r
+# dlllflags - complete linker switches to build DLLs (subsumes lflags)\r
+# conlflags - complete linker switches for console program (subsumes lflags)\r
+# guilflags - complete linker switches for GUI program (subsumes lflags)\r
+# baselibs - minimum Windows libraries required. Parent makefile can\r
+#    define PRJ_LIBS before including rules.rc if additional libs are needed\r
+\r
+OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS\r
+\r
+!if $(TCL_MEM_DEBUG)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG\r
+!endif\r
+!if $(TCL_COMPILE_DEBUG)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS\r
+!endif\r
+!if $(TCL_THREADS)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1\r
+!if $(USE_THREAD_ALLOC)\r
+OPTDEFINES     = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1\r
+!endif\r
+!endif\r
+!if $(STATIC_BUILD)\r
+OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD\r
+!endif\r
+!if $(TCL_NO_DEPRECATED)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED\r
+!endif\r
+\r
+!if $(USE_STUBS)\r
+# Note we do not define USE_TCL_STUBS even when building tk since some\r
+# test targets in tk do not use stubs\r
+!if ! $(DOING_TCL)\r
+USE_STUBS_DEFS  = -DUSE_TCL_STUBS -DUSE_TCLOO_STUBS\r
+!if $(NEED_TK)\r
+USE_STUBS_DEFS  = $(USE_STUBS_DEFS) -DUSE_TK_STUBS\r
+!endif\r
+!endif\r
+!endif # USE_STUBS\r
+\r
+!if !$(DEBUG)\r
+OPTDEFINES     = $(OPTDEFINES) -DNDEBUG\r
+!if $(OPTIMIZING)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED\r
+!endif\r
+!endif\r
+!if $(PROFILE)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED\r
+!endif\r
+!if "$(MACHINE)" == "AMD64"\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT\r
+!endif\r
+!if $(VCVERSION) < 1300\r
+OPTDEFINES     = $(OPTDEFINES) -DNO_STRTOI64\r
+!endif\r
+\r
+# _ATL_XP_TARGETING - Newer SDK's need this to build for XP\r
+COMPILERFLAGS  = /D_ATL_XP_TARGETING\r
+\r
+# Following is primarily for the benefit of extensions. Tcl 8.5 builds\r
+# Tcl without /DUNICODE, while 8.6 builds with it defined. When building\r
+# an extension, it is advisable (but not mandated) to use the same Windows\r
+# API as the Tcl build. This is accordingly defaulted below. A particular\r
+# extension can override this by pre-definining USE_WIDECHAR_API.\r
+!ifndef USE_WIDECHAR_API\r
+!if $(TCL_VERSION) > 85\r
+USE_WIDECHAR_API = 1\r
+!else\r
+USE_WIDECHAR_API = 0\r
+!endif\r
+!endif\r
+\r
+!if $(USE_WIDECHAR_API)\r
+COMPILERFLAGS = $(COMPILERFLAGS) /DUNICODE /D_UNICODE\r
+!endif\r
+\r
+# Like the TEA system only set this non empty for non-Tk extensions\r
+# Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME\r
+# so we pass both\r
+!if !$(DOING_TCL) && !$(DOING_TK)\r
+PKGNAMEFLAGS = -DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \\r
+               -DPACKAGE_TCLNAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \\r
+               -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \\r
+               -DMODULE_SCOPE=extern\r
+!endif\r
+\r
+# crt picks the C run time based on selected OPTS\r
+!if $(MSVCRT)\r
+!if $(DEBUG) && !$(UNCHECKED)\r
+crt = -MDd\r
+!else\r
+crt = -MD\r
+!endif\r
+!else\r
+!if $(DEBUG) && !$(UNCHECKED)\r
+crt = -MTd\r
+!else\r
+crt = -MT\r
+!endif\r
+!endif\r
+\r
+# cdebug includes compiler options for debugging as well as optimization.\r
+!if $(DEBUG)\r
+\r
+# In debugging mode, optimizations need to be disabled\r
+cdebug = -Zi -Od $(DEBUGFLAGS)\r
+\r
+!else\r
+\r
+cdebug = $(OPTIMIZATIONS)\r
+!if $(SYMBOLS)\r
+cdebug = $(cdebug) -Zi\r
+!endif\r
+\r
+!endif # $(DEBUG)\r
+\r
+# cwarn includes default warning levels.\r
+cwarn = $(WARNINGS)\r
+\r
+!if "$(MACHINE)" == "AMD64"\r
+# Disable pointer<->int warnings related to cast between different sizes\r
+# There are a gadzillion of these due to use of ClientData and\r
+# clutter up compiler\r
+# output increasing chance of a real warning getting lost. So disable them.\r
+# Eventually some day, Tcl will be 64-bit clean.\r
+cwarn = $(cwarn) -wd4311 -wd4312\r
+!endif\r
+\r
+### Common compiler options that are architecture specific\r
+!if "$(MACHINE)" == "ARM"\r
+carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE\r
+!else\r
+carch =\r
+!endif\r
+\r
+!if $(DEBUG)\r
+# Turn warnings into errors\r
+cwarn = $(cwarn) -WX\r
+!endif\r
+\r
+INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES)\r
+!if !$(DOING_TCL) && !$(DOING_TK)\r
+INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WINDIR)" -I"$(COMPATDIR)"\r
+!endif\r
+\r
+# These flags are defined roughly in the order of the pre-reform\r
+# rules.vc/makefile.vc to help visually compare that the pre- and\r
+# post-reform build logs\r
+\r
+# cflags contains generic flags used for building practically all object files\r
+cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\ $(cdebug)\r
+\r
+# appcflags contains $(cflags) and flags for building the application\r
+# object files (e.g. tclsh, or wish) pkgcflags contains $(cflags) plus\r
+# flags used for building shared object files The two differ in the\r
+# BUILD_$(PROJECT) macro which should be defined only for the shared\r
+# library *implementation* and not for its caller interface\r
+\r
+appcflags = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES) $(USE_STUBS_DEFS)\r
+appcflags_nostubs = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES)\r
+pkgcflags = $(appcflags) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)\r
+pkgcflags_nostubs = $(appcflags_nostubs) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)\r
+\r
+# stubscflags contains $(cflags) plus flags used for building a stubs\r
+# library for the package.  Note: -DSTATIC_BUILD is defined in\r
+# $(OPTDEFINES) only if the OPTS configuration indicates a static\r
+# library. However the stubs library is ALWAYS static hence included\r
+# here irrespective of the OPTS setting.\r
+#\r
+# TBD - tclvfs has a comment that stubs libs should not be compiled with -GL\r
+# without stating why. Tcl itself compiled stubs libs with this flag.\r
+# so we do not remove it from cflags. -GL may prevent extensions\r
+# compiled with one VC version to fail to link against stubs library\r
+# compiled with another VC version. Check for this and fix accordingly.\r
+stubscflags = $(cflags) $(PKGNAMEFLAGS) $(PRJ_DEFINES) $(OPTDEFINES) -Zl -DSTATIC_BUILD $(INCLUDES)\r
+\r
+# Link flags\r
+\r
+!if $(DEBUG)\r
+ldebug = -debug -debugtype:cv\r
+!else\r
+ldebug = -release -opt:ref -opt:icf,3\r
+!if $(SYMBOLS)\r
+ldebug = $(ldebug) -debug -debugtype:cv\r
+!endif\r
+!endif\r
+\r
+# Note: Profiling is currently only possible with the Visual Studio Enterprise\r
+!if $(PROFILE)\r
+ldebug= $(ldebug) -profile\r
+!endif\r
+\r
+### Declarations common to all linker versions\r
+lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)\r
+\r
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900\r
+lflags = $(lflags) -nodefaultlib:libucrt.lib\r
+!endif\r
+\r
+dlllflags = $(lflags) -dll\r
+conlflags = $(lflags) -subsystem:console\r
+guilflags = $(lflags) -subsystem:windows\r
+\r
+# Libraries that are required for every image.\r
+# Extensions should define any additional libraries with $(PRJ_LIBS)\r
+winlibs   = kernel32.lib advapi32.lib\r
+\r
+!if $(NEED_TK)\r
+winlibs = $(winlibs) gdi32.lib user32.lib uxtheme.lib\r
+!endif\r
+\r
+# Avoid 'unresolved external symbol __security_cookie' errors.\r
+# c.f. http://support.microsoft.com/?id=894573\r
+!if "$(MACHINE)" == "AMD64"\r
+!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500\r
+winlibs   = $(winlibs) bufferoverflowU.lib\r
+!endif\r
+!endif\r
+\r
+baselibs = $(winlibs) $(PRJ_LIBS)\r
+\r
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900\r
+baselibs   = $(baselibs) ucrt.lib\r
+!endif\r
+\r
+################################################################\r
+# 13. Define standard commands, common make targets and implicit rules\r
+\r
+CCPKGCMD = $(cc32) $(pkgcflags) -Fo$(TMP_DIR)^\\r
+CCAPPCMD = $(cc32) $(appcflags) -Fo$(TMP_DIR)^\\r
+CCSTUBSCMD = $(cc32) $(stubscflags) -Fo$(TMP_DIR)^\\r
+\r
+LIBCMD = $(lib32) -nologo $(LINKERFLAGS) -out:$@\r
+DLLCMD = $(link32) $(dlllflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)\r
+\r
+CONEXECMD = $(link32) $(conlflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)\r
+GUIEXECMD = $(link32) $(guilflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)\r
+RESCMD  = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \\r
+           $(TCL_INCLUDES) \\r
+           -DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \\r
+           -DCOMMAVERSION=$(DOTVERSION:.=,),0 \\r
+           -DDOTVERSION=\"$(DOTVERSION)\" \\r
+           -DVERSION=\"$(VERSION)\" \\r
+           -DSUFX=\"$(SUFX:t=)\" \\r
+           -DPROJECT=\"$(PROJECT)\" \\r
+           -DPRJLIBNAME=\"$(PRJLIBNAME)\"\r
+\r
+!ifndef DEFAULT_BUILD_TARGET\r
+DEFAULT_BUILD_TARGET = $(PROJECT)\r
+!endif\r
+\r
+default-target: $(DEFAULT_BUILD_TARGET)\r
+\r
+default-pkgindex:\r
+       @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \\r
+           [list load [file join $$dir $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl\r
+\r
+default-pkgindex-tea:\r
+       @if exist $(ROOT)\pkgIndex.tcl.in nmakehlp -s << $(ROOT)\pkgIndex.tcl.in > $(OUT_DIR)\pkgIndex.tcl\r
+@PACKAGE_VERSION@    $(DOTVERSION)\r
+@PACKAGE_NAME@       $(PRJ_PACKAGE_TCLNAME)\r
+@PACKAGE_TCLNAME@    $(PRJ_PACKAGE_TCLNAME)\r
+@PKG_LIB_FILE@       $(PRJLIBNAME)\r
+<<\r
+\r
+\r
+default-install: default-install-binaries default-install-libraries\r
+\r
+default-install-binaries: $(PRJLIB)\r
+       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"\r
+       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL\r
+\r
+default-install-libraries: $(OUT_DIR)\pkgIndex.tcl\r
+       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'\r
+       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"\r
+       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'\r
+       @$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)\r
+\r
+default-install-stubs:\r
+       @echo Installing stubs library to '$(SCRIPT_INSTALL_DIR)'\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"\r
+       @$(CPY) $(PRJSTUBLIB) "$(SCRIPT_INSTALL_DIR)" >NUL\r
+\r
+default-install-docs-html:\r
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'\r
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"\r
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.html" "$(DOCDIR)\*.css" "$(DOCDIR)\*.png") do @$(COPY) %f "$(DOC_INSTALL_DIR)"\r
+\r
+default-install-docs-n:\r
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'\r
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"\r
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.n") do @$(COPY) %f "$(DOC_INSTALL_DIR)"\r
+\r
+default-install-demos:\r
+       @echo Installing demos to '$(DEMO_INSTALL_DIR)'\r
+       @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)"\r
+       @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)"\r
+\r
+default-clean:\r
+       @echo Cleaning $(TMP_DIR)\* ...\r
+       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)\r
+       @echo Cleaning $(WINDIR)\nmakehlp.obj, nmakehlp.exe ...\r
+       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj\r
+       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe\r
+       @if exist $(WINDIR)\nmakehlp.out del $(WINDIR)\nmakehlp.out\r
+       @echo Cleaning $(WINDIR)\nmhlp-out.txt ...\r
+       @if exist $(WINDIR)\nmhlp-out.txt del $(WINDIR)\nmhlp-out.txt\r
+       @echo Cleaning $(WINDIR)\_junk.pch ...\r
+       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch\r
+       @echo Cleaning $(WINDIR)\vercl.x, vercl.i ...\r
+       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x\r
+       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i\r
+       @echo Cleaning $(WINDIR)\versions.vc, version.vc ...\r
+       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc\r
+       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc\r
+\r
+default-hose: default-clean\r
+       @echo Hosing $(OUT_DIR)\* ...\r
+       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)\r
+\r
+# Only for backward compatibility\r
+default-distclean: default-hose\r
+\r
+default-setup:\r
+       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)\r
+       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)\r
+\r
+!if "$(TESTPAT)" != ""\r
+TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)\r
+!endif\r
+\r
+default-test: default-setup $(PROJECT)\r
+       @set TCLLIBPATH=$(OUT_DIR:\=/)\r
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"\r
+       cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS)\r
+\r
+default-shell: default-setup $(PROJECT)\r
+       @set TCLLIBPATH=$(OUT_DIR:\=/)\r
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"\r
+       $(DEBUGGER) $(TCLSH)\r
+\r
+# Generation of Windows version resource\r
+!ifdef RCFILE\r
+\r
+# Note: don't use $** in below rule because there may be other dependencies\r
+# and only the "master" rc must be passed to the resource compiler\r
+$(TMP_DIR)\$(PROJECT).res: $(RCDIR)\$(PROJECT).rc\r
+       $(RESCMD) $(RCDIR)\$(PROJECT).rc\r
+\r
+!else\r
+\r
+# If parent makefile has not defined a resource definition file,\r
+# we will generate one from standard template.\r
+$(TMP_DIR)\$(PROJECT).res: $(TMP_DIR)\$(PROJECT).rc\r
+\r
+$(TMP_DIR)\$(PROJECT).rc:\r
+       @$(COPY) << $(TMP_DIR)\$(PROJECT).rc\r
+#include <winver.h>\r
+\r
+VS_VERSION_INFO VERSIONINFO\r
+ FILEVERSION   COMMAVERSION\r
+ PRODUCTVERSION        COMMAVERSION\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef DEBUG\r
+ FILEFLAGS     VS_FF_DEBUG\r
+#else\r
+ FILEFLAGS     0x0L\r
+#endif\r
+ FILEOS                VOS_NT_WINDOWS32\r
+ FILETYPE      VFT_DLL\r
+ FILESUBTYPE   0x0L\r
+BEGIN\r
+    BLOCK "StringFileInfo"\r
+    BEGIN\r
+        BLOCK "040904b0"\r
+        BEGIN\r
+            VALUE "FileDescription",  "Tcl extension " PROJECT\r
+            VALUE "OriginalFilename", PRJLIBNAME\r
+            VALUE "FileVersion",      DOTVERSION\r
+            VALUE "ProductName",      "Package " PROJECT " for Tcl"\r
+            VALUE "ProductVersion",   DOTVERSION\r
+        END\r
+    END\r
+    BLOCK "VarFileInfo"\r
+    BEGIN\r
+        VALUE "Translation", 0x409, 1200\r
+    END\r
+END\r
+\r
+<<\r
+\r
+!endif # ifdef RCFILE\r
+\r
+!ifndef DISABLE_IMPLICIT_RULES\r
+DISABLE_IMPLICIT_RULES = 0\r
+!endif\r
+\r
+!if !$(DISABLE_IMPLICIT_RULES)\r
+# Implicit rule definitions - only for building library objects. For stubs and\r
+# main application, the master makefile should define explicit rules.\r
+\r
+{$(ROOT)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(WINDIR)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(RCDIR)}.rc{$(TMP_DIR)}.res:\r
+       $(RESCMD) $<\r
+\r
+{$(WINDIR)}.rc{$(TMP_DIR)}.res:\r
+       $(RESCMD) $<\r
+\r
+{$(TMP_DIR)}.rc{$(TMP_DIR)}.res:\r
+       $(RESCMD) $<\r
+\r
+.SUFFIXES:\r
+.SUFFIXES:.c .rc\r
+\r
+!endif\r
+\r
+################################################################\r
+# 14. Sanity check selected options against Tcl build options\r
+# When building an extension, certain configuration options should\r
+# match the ones used when Tcl was built. Here we check and\r
+# warn on a mismatch.\r
+!if ! $(DOING_TCL)\r
+\r
+!if $(TCLINSTALL) # Building against an installed Tcl\r
+!if exist("$(_TCLDIR)\lib\nmake\tcl.nmake")\r
+TCLNMAKECONFIG = "$(_TCLDIR)\lib\nmake\tcl.nmake"\r
+!endif\r
+!else # ! $(TCLINSTALL) - building against Tcl source\r
+!if exist("$(OUT_DIR)\tcl.nmake")\r
+TCLNMAKECONFIG = "$(OUT_DIR)\tcl.nmake"\r
+!endif\r
+!endif # TCLINSTALL\r
+\r
+!if $(CONFIG_CHECK)\r
+!ifdef TCLNMAKECONFIG\r
+!include $(TCLNMAKECONFIG)\r
+\r
+!if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)"\r
+!error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)).\r
+!endif\r
+!if defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC)\r
+!message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)).\r
+!endif\r
+!if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG)\r
+!message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)).\r
+!endif\r
+!endif\r
+\r
+!endif # TCLNMAKECONFIG\r
+\r
+!endif # ! $(DOING_TCL)\r
+\r
+\r
+#----------------------------------------------------------\r
+# Display stats being used.\r
+#----------------------------------------------------------\r
+\r
+!if !$(DOING_TCL)\r
+!message *** Building against Tcl at '$(_TCLDIR)'\r
+!endif\r
+!if !$(DOING_TK) && $(NEED_TK)\r
+!message *** Building against Tk at '$(_TKDIR)'\r
+!endif\r
+!message *** Intermediate directory will be '$(TMP_DIR)'\r
+!message *** Output directory will be '$(OUT_DIR)'\r
+!message *** Installation, if selected, will be in '$(_INSTALLDIR)'\r
+!message *** Suffix for binaries will be '$(SUFX)'\r
+!message *** Compiler version $(VCVER). Target machine is $(MACHINE)\r
+!message *** Host architecture is $(NATIVE_ARCH)\r
+\r
+!endif # ifdef _RULES_VC\r
diff --git a/pkgs/sqlite3.21.0/win/targets.vc b/pkgs/sqlite3.21.0/win/targets.vc
new file mode 100644 (file)
index 0000000..7f1d388
--- /dev/null
@@ -0,0 +1,98 @@
+#------------------------------------------------------------- -*- makefile -*-\r
+# targets.vc --\r
+#\r
+# Part of the nmake based build system for Tcl and its extensions.\r
+# This file defines some standard targets for the convenience of extensions\r
+# and can be optionally included by the extension makefile.\r
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for docs.\r
+\r
+$(PROJECT): setup pkgindex $(PRJLIB)\r
+\r
+!ifdef PRJ_STUBOBJS\r
+$(PROJECT): $(PRJSTUBLIB)\r
+$(PRJSTUBLIB): $(PRJ_STUBOBJS)\r
+       $(LIBCMD) $**\r
+\r
+$(PRJ_STUBOBJS):\r
+       $(CCSTUBSCMD) %s\r
+!endif # PRJ_STUBOBJS\r
+\r
+!ifdef PRJ_MANIFEST\r
+$(PROJECT): $(PRJLIB).manifest\r
+$(PRJLIB).manifest: $(PRJ_MANIFEST)\r
+       @nmakehlp -s << $** >$@\r
+@MACHINE@        $(MACHINE:IX86=X86)\r
+<<\r
+!endif\r
+\r
+!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"\r
+$(PRJLIB): $(PRJ_OBJS) $(RESFILE)\r
+!if $(STATIC_BUILD)\r
+       $(LIBCMD) $**\r
+!else\r
+       $(DLLCMD) $**\r
+       $(_VC_MANIFEST_EMBED_DLL)\r
+!endif\r
+       -@del $*.exp\r
+!endif\r
+\r
+!if "$(PRJ_HEADERS)" != "" && "$(PRJ_OBJS)" != ""\r
+$(PRJ_OBJS): $(PRJ_HEADERS)\r
+!endif\r
+\r
+# If parent makefile has defined stub objects, add their installation\r
+# to the default install\r
+!if "$(PRJ_STUBOBJS)" != ""\r
+default-install: default-install-stubs\r
+!endif\r
+\r
+# Unlike the other default targets, these cannot be in rules.vc because\r
+# the executed command depends on existence of macro PRJ_HEADERS_PUBLIC\r
+# that the parent makefile will not define until after including rules-ext.vc\r
+!if "$(PRJ_HEADERS_PUBLIC)" != ""\r
+default-install: default-install-headers\r
+default-install-headers:\r
+       @echo Installing headers to '$(INCLUDE_INSTALL_DIR)'\r
+       @for %f in ($(PRJ_HEADERS_PUBLIC)) do @$(COPY) %f "$(INCLUDE_INSTALL_DIR)"\r
+!endif\r
+\r
+!if "$(DISABLE_STANDARD_TARGETS)" == ""\r
+DISABLE_STANDARD_TARGETS = 0\r
+!endif\r
+\r
+!if "$(DISABLE_TARGET_setup)" == ""\r
+DISABLE_TARGET_setup = 0\r
+!endif\r
+!if "$(DISABLE_TARGET_install)" == ""\r
+DISABLE_TARGET_install = 0\r
+!endif\r
+!if "$(DISABLE_TARGET_clean)" == ""\r
+DISABLE_TARGET_clean = 0\r
+!endif\r
+!if "$(DISABLE_TARGET_test)" == ""\r
+DISABLE_TARGET_test = 0\r
+!endif\r
+!if "$(DISABLE_TARGET_shell)" == ""\r
+DISABLE_TARGET_shell = 0\r
+!endif\r
+\r
+!if !$(DISABLE_STANDARD_TARGETS)\r
+!if !$(DISABLE_TARGET_setup)\r
+setup: default-setup\r
+!endif\r
+!if !$(DISABLE_TARGET_install)\r
+install: default-install\r
+!endif\r
+!if !$(DISABLE_TARGET_clean)\r
+clean: default-clean\r
+realclean: hose\r
+hose: default-hose\r
+distclean: realclean default-distclean\r
+!endif\r
+!if !$(DISABLE_TARGET_test)\r
+test: default-test\r
+!endif\r
+!if !$(DISABLE_TARGET_shell)\r
+shell: default-shell\r
+!endif\r
+!endif # DISABLE_STANDARD_TARGETS\r
diff --git a/pkgs/tdbc1.0.5/win/makefile.vc b/pkgs/tdbc1.0.5/win/makefile.vc
deleted file mode 100644 (file)
index 34bd1da..0000000
+++ /dev/null
@@ -1,534 +0,0 @@
-#------------------------------------------------------------- -*- makefile -*-
-# makefile.vc --
-#
-#      Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)
-#
-# This makefile is based upon the Tcl 8.6 Makefile.vc and modified to 
-# make it suitable as a general package makefile. Look for the word EDIT
-# which marks sections that may need modification. As a minumum you will
-# need to change the PROJECT, DOTVERSION and DLLOBJS variables to values
-# relevant to your package.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-#
-# Copyright (c) 1995-1996 Sun Microsystems, Inc.
-# Copyright (c) 1998-2000 Ajuba Solutions.
-# Copyright (c) 2001-2005 ActiveState Corporation.
-# Copyright (c) 2001-2004 David Gravereaux.
-# Copyright (c) 2003-2008 Pat Thoyts.
-#------------------------------------------------------------------------------
-
-# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
-# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
-!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)
-MSG = ^
-You need to run vcvars32.bat from Developer Studio or setenv.bat from the^
-Platform SDK first to setup the environment.  Jump to this line to read^
-the build instructions.
-!error $(MSG)
-!endif
-
-#------------------------------------------------------------------------------
-# HOW TO USE this makefile:
-#
-# 1)  It is now necessary to have MSVCDir, MSDevDir or MSSDK set in the
-#     environment.  This is used as a check to see if vcvars32.bat had been
-#     run prior to running nmake or during the installation of Microsoft
-#     Visual C++, MSVCDir had been set globally and the PATH adjusted.
-#     Either way is valid.
-#
-#     You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin
-#     directory to setup the proper environment, if needed, for your
-#     current setup.  This is a needed bootstrap requirement and allows the
-#     swapping of different environments to be easier.
-#
-# 2)  To use the Platform SDK (not expressly needed), run setenv.bat after
-#     vcvars32.bat according to the instructions for it.  This can also
-#     turn on the 64-bit compiler, if your SDK has it.
-#
-# 3)  Targets are:
-#      all       -- Builds everything.
-#      <project> -- Builds the project (eg: nmake sample)
-#      test      -- Builds and runs the test suite.
-#      install   -- Installs the built binaries and libraries to $(INSTALLDIR)
-#                   in an appropriate subdirectory.
-#      clean/realclean/distclean -- varying levels of cleaning.
-#
-# 4)  Macros usable on the commandline:
-#      INSTALLDIR=<path>
-#              Sets where to install Tcl from the built binaries.
-#              C:\Progra~1\Tcl is assumed when not specified.
-#
-#      OPTS=loimpact,msvcrt,nothreads,pdbs,profile,static,symbols,unchecked,none
-#              Sets special options for the core.  The default is for none.
-#              Any combination of the above may be used (comma separated).
-#              'none' will over-ride everything to nothing.
-#
-#              loimpact = Adds a flag for how NT treats the heap to keep memory
-#                         in use, low.  This is said to impact alloc performance.
-#              msvcrt  =  Affects the static option only to switch it from
-#                         using libcmt(d) as the C runtime [by default] to
-#                         msvcrt(d). This is useful for static embedding
-#                         support.
-#              nothreads = Turns off multithreading support (not recommended)
-#              static  =  Builds a static library of the core instead of a
-#                         dll.  The shell will be static (and large), as well.
-#              pdbs     = Build detached symbols for release builds.
-#              profile  = Adds profiling hooks.  Map file is assumed.
-#              symbols  = Debug build. Links to the debug C runtime, disables
-#                         optimizations and creates pdb symbols files.
-#              unchecked = Allows a symbols build to not use the debug
-#                         enabled runtime (msvcrt.dll not msvcrtd.dll
-#                         or libcmt.lib not libcmtd.lib).
-#
-#      STATS=memdbg,compdbg,none
-#              Sets optional memory and bytecode compiler debugging code added
-#              to the core.  The default is for none.  Any combination of the
-#              above may be used (comma separated).  'none' will over-ride
-#              everything to nothing.
-#
-#              memdbg   = Enables the debugging memory allocator.
-#              compdbg  = Enables byte compilation logging.
-#
-#      CHECKS=64bit,fullwarn,nodep,none
-#              Sets special macros for checking compatability.
-#
-#              64bit    = Enable 64bit portability warnings (if available)
-#              fullwarn = Builds with full compiler and link warnings enabled.
-#                          Very verbose.
-#              nodep    = Turns off compatability macros to ensure Tk isn't
-#                          being built with deprecated functions.
-#
-#      MACHINE=(ARM|AMD64|IA64|X86)
-#              Set the machine type used for the compiler, linker, and
-#              resource compiler.  This hook is needed to tell the tools
-#              when alternate platforms are requested.  IX86 is the default
-#              when not specified. If the CPU environment variable has been
-#              set (ie: recent Platform SDK) then MACHINE is set from CPU.
-#
-#      TMP_DIR=<path>
-#      OUT_DIR=<path>
-#              Hooks to allow the intermediate and output directories to be
-#              changed.  $(OUT_DIR) is assumed to be
-#              $(BINROOT)\(Release|Debug) based on if symbols are requested.
-#              $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default.
-#
-#      TESTPAT=<file>
-#              Reads the tests requested to be run from this file.
-#
-# 5)  Examples:
-#
-#      Basic syntax of calling nmake looks like this:
-#      nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]]
-#
-#                        Standard (no frills)
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat
-#       Setting environment for using Microsoft Visual C++ tools.
-#       c:\tcl_src\win\>nmake -f makefile.vc all
-#       c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl
-#
-#                         Building for Win64
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat
-#       Setting environment for using Microsoft Visual C++ tools.
-#       c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL
-#       Targeting Windows pre64 RETAIL
-#       c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64
-#
-#------------------------------------------------------------------------------
-#==============================================================================
-#------------------------------------------------------------------------------
-
-!if !exist("makefile.vc")
-MSG = ^
-You must run this makefile only from the directory it is in.^
-Please `cd` to its location first.
-!error $(MSG)
-!endif
-
-#-------------------------------------------------------------------------
-# Project specific information (EDIT)
-#
-# You should edit this with the name and version of your project. This
-# information is used to generate the name of the package library and
-# it's install location.
-#
-# For example, the sample extension is  going to build sample05.dll and
-# would install it into $(INSTALLDIR)\lib\sample05
-#
-# You need to specify the object files that need to be linked into your
-# binary here.
-#
-#-------------------------------------------------------------------------
-
-PROJECT = tdbc
-
-# Uncomment the following line if this is a Tk extension.
-#PROJECT_REQUIRES_TK=1
-!include "rules.vc"
-# nmakehelp -V <file> <tag> will search the file for tag, skips until a
-#      number and returns all character until a character not in [0-9.ab]
-#      is read.
-
-!if [echo REM = This file is generated from Makefile.vc > versions.vc]
-!endif
-# get project version from row AC_INIT([tdbc], [1.0b17])
-!if [echo DOTVERSION = \>> versions.vc] \
-   && [nmakehlp -V ..\configure.ac AC_INIT >> versions.vc]
-!endif
-!if [echo TCL_VERSION_REQ = \>> versions.vc] \
-   && [nmakehlp -V ..\configure.ac TCL_VERSION_REQ >> versions.vc]
-!endif
-!if [echo TCL_VERSION_DESIRED = \>> versions.vc] \
-   && [nmakehlp -V ..\configure.ac TCL_VERSION_DESIRED >> versions.vc]
-!endif
-!if [echo TCLOO_VERSION_REQ = \>> versions.vc] \
-   && [nmakehlp -V ..\configure.ac TCLOO_VERSION_REQ >> versions.vc]
-!endif
-
-!include "versions.vc"
-
-VERSION         = $(DOTVERSION:.=)
-STUBPREFIX      = $(PROJECT)stub
-
-DLLOBJS = \
-       $(TMP_DIR)\tdbc.obj \
-       $(TMP_DIR)\tdbcStubInit.obj \
-       $(TMP_DIR)\tdbcTokenize.obj \
-!if !$(STATIC_BUILD)
-       $(TMP_DIR)\tdbc.res
-!endif
-
-PRJSTUBOBJS = \
-       $(TMP_DIR)\tdbcStubLib.obj
-
-PRJHEADERS = \
-       $(GENERICDIR)\tdbc.h \
-       $(GENERICDIR)\tdbcDecls.h \
-       $(GENERICDIR)\tdbcInt.h
-
-#-------------------------------------------------------------------------
-# Target names and paths ( shouldn't need changing )
-#-------------------------------------------------------------------------
-
-BINROOT                = $(MAKEDIR)
-ROOT            = $(MAKEDIR)\..
-
-PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
-PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
-PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)
-
-PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
-PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)
-
-### Make sure we use backslash only.
-# This is normally the lib folder of a tcl installation
-PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)
-LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
-BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
-DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
-SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)
-INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\..\include
-
-### The following paths CANNOT have spaces in them.
-GENERICDIR     = $(ROOT)\generic
-WINDIR         = $(ROOT)\win
-LIBDIR          = $(ROOT)\library
-DOCDIR         = $(ROOT)\doc
-TOOLSDIR       = $(ROOT)\tools
-COMPATDIR      = $(ROOT)\compat
-
-#---------------------------------------------------------------------
-# Compile flags
-#---------------------------------------------------------------------
-
-!if !$(DEBUG)
-!if $(OPTIMIZING)
-### This cranks the optimization level to maximize speed
-cdebug = $(OPTIMIZATIONS)
-!else
-cdebug =
-!endif
-!else if "$(MACHINE)" == "IA64"
-### Warnings are too many, can't support warnings into errors.
-cdebug = -Zi -Od $(DEBUGFLAGS)
-!else
-cdebug = -Zi -WX $(DEBUGFLAGS)
-!endif
-
-### Common compiler options that are architecture specific
-!if "$(MACHINE)" == "ARM"
-carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
-!else
-carch =
-!endif
-
-### Declarations common to all compiler options
-cwarn = $(WARNINGS) -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE
-cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\
-
-!if $(MSVCRT)
-!if $(DEBUG) && !$(UNCHECKED)
-crt = -MDd
-!else
-crt = -MD
-!endif
-!else
-!if $(DEBUG) && !$(UNCHECKED)
-crt = -MTd
-!else
-crt = -MT
-!endif
-!endif
-
-cflags = $(cflags) -DMODULE_SCOPE=extern -DUSE_TCL_STUBS
-!if defined(TKSTUBLIB)
-cflags = $(cflags) -DUSE_TK_STUBS
-!endif
-
-INCLUDES       = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)"
-BASE_CFLAGS    = $(cflags) $(cdebug) $(crt) $(INCLUDES)
-CON_CFLAGS     = $(cflags) $(cdebug) $(crt) -DCONSOLE
-TCL_CFLAGS     = -DPACKAGE_NAME="\"$(PROJECT)\"" \
-                 -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \
-                 -DBUILD_$(PROJECT) \
-                 $(BASE_CFLAGS) $(OPTDEFINES)
-
-### Stubs files should not be compiled with -GL
-STUB_CFLAGS     = $(cflags) $(cdebug:-GL=) #$(TK_DEFINES)
-
-#---------------------------------------------------------------------
-# Link flags
-#---------------------------------------------------------------------
-
-!if $(DEBUG)
-ldebug = -debug
-!if $(MSVCRT)
-ldebug = $(ldebug) -nodefaultlib:msvcrt
-!endif
-!else
-ldebug = -release -opt:ref -opt:icf,3
-!endif
-
-### Declarations common to all linker options
-lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)
-
-!if $(PROFILE)
-lflags = $(lflags) -profile
-!endif
-
-!if $(ALIGN98_HACK) && !$(STATIC_BUILD)
-### Align sections for PE size savings.
-lflags = $(lflags) -opt:nowin98
-!else if !$(ALIGN98_HACK) && $(STATIC_BUILD)
-### Align sections for speed in loading by choosing the virtual page size.
-lflags = $(lflags) -align:4096
-!endif
-
-!if $(LOIMPACT)
-lflags = $(lflags) -ws:aggressive
-!endif
-
-dlllflags = $(lflags) -dll
-conlflags = $(lflags) -subsystem:console
-guilflags = $(lflags) -subsystem:windows
-!if !$(STATIC_BUILD)
-baselibs  = $(TCLSTUBLIB)
-!if defined(TKSTUBLIB)
-baselibs  = $(baselibs) $(TKSTUBLIB)
-!endif
-!endif
-
-# Avoid 'unresolved external symbol __security_cookie' errors.
-# c.f. http://support.microsoft.com/?id=894573
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
-!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500
-baselibs   = $(baselibs) bufferoverflowU.lib
-!endif
-!endif
-
-#---------------------------------------------------------------------
-# TclTest flags
-#---------------------------------------------------------------------
-
-!if "$(TESTPAT)" != ""
-TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
-!endif
-
-#---------------------------------------------------------------------
-# Project specific targets (EDIT)
-#---------------------------------------------------------------------
-
-all:       setup $(PROJECT)
-$(PROJECT): setup pkgIndex $(PRJLIB)
-install:    install-binaries install-libraries install-docs
-pkgIndex:   setup $(OUT_DIR)\pkgIndex.tcl
-
-!if !$(STATIC_BUILD)
-$(PROJECT):  $(PRJSTUBLIB)
-!endif
-
-test: setup $(PROJECT)
-       @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
-       @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)
-       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)
-!if $(TCLINSTALL)
-       @set PATH=$(_TCLDIR)\bin;$(PATH)
-!else
-       @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
-!endif
-       $(DEBUGGER) $(TCLSH) "$(ROOT)/tests/all.tcl" $(TESTFLAGS)
-
-shell: setup $(PROJECT)
-       @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)
-!if $(TCLINSTALL)
-       @set PATH=$(_TCLDIR)\bin;$(PATH)
-!else
-       @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
-!endif
-       $(DEBUGGER) $(TCLSH) $(SCRIPT)
-
-setup:
-       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
-       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
-
-# See <tcl>/win/coffbase.txt for extension base addresses.
-$(PRJLIB): $(DLLOBJS)
-!if $(STATIC_BUILD)
-       $(lib32) -nologo -out:$@ @<<
-$**
-<<
-!else
-       $(link32) $(dlllflags) -base:@$(COFFBASE),tdbc -out:$@ $(baselibs) @<<
-$**
-<<
-       $(_VC_MANIFEST_EMBED_DLL)
-       -@del $*.exp
-!endif
-
-$(PRJSTUBLIB): $(PRJSTUBOBJS)
-       $(lib32) -nologo -nodefaultlib -out:$@ $(PRJSTUBOBJS)
-
-#---------------------------------------------------------------------
-# Implicit rules
-#---------------------------------------------------------------------
-
-{$(WINDIR)}.c{$(TMP_DIR)}.obj::
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
-$<
-<<
-
-{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
-$<
-<<
-
-{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
-$<
-<<
-
-{$(WINDIR)}.rc{$(TMP_DIR)}.res:
-       $(rc32) -fo $@ -r -i "$(GENERICDIR)" -D_WIN32 -D__WIN32__ \
-               -DCOMMAVERSION=$(DOTVERSION:.=,),0 \
-               -DDOTVERSION=\"$(DOTVERSION)\" \
-               -DVERSION=\"$(VERSION)$(SUFX)\" \
-!if $(DEBUG)
-       -d DEBUG \
-!endif
-!if $(TCL_THREADS)
-       -d TCL_THREADS \
-!endif
-!if $(STATIC_BUILD)
-       -d STATIC_BUILD \
-!endif
-       $<
-
-.SUFFIXES:
-.SUFFIXES:.c .rc
-
-#-------------------------------------------------------------------------
-# Explicit dependency rules
-#
-#-------------------------------------------------------------------------
-.PHONY: $(OUT_DIR)\pkgIndex.tcl
-
-$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in
-       @nmakehlp -s << $** > $@
-@PACKAGE_NAME@        $(PROJECT)
-@PACKAGE_VERSION@     $(DOTVERSION)
-@TCL_VERSION_REQ@     $(TCL_VERSION_REQ)
-@TCL_VERSION_DESIRED@ $(TCL_VERSION_DESIRED)
-@TCLOO_VERSION_REQ@   $(TCLOO_VERSION_REQ)
-@PKG_LIB_FILE@        $(PRJLIBNAME)
-@TCL_VERSION@         $(TCL_DOTVERSION)
-<<
-
-.PHONY: $(OUT_DIR)\tdbcConfig.sh
-
-$(OUT_DIR)\tdbcConfig.sh: $(ROOT)\tdbcConfig.sh.in
-       nmakehlp -s << $** > $@
-@PACKAGE_VERSION@            $(DOTVERSION)
-@PKG_LIB_FILE@               $(PRJLIBNAME)
-@tdbc_LIB_SPEC@              $(LIB_INSTALL_DIR)\$(PRJLIBNAME)
-@PKG_STUB_LIB_FILE@          $(PRJSTUBLIBNAME)
-@tdbc_BUILD_STUB_LIB_SPEC@   $(PRJSTUBLIB)
-@tdbc_STUB_LIB_SPEC@         $(LIB_INSTALL_DIR)\$(PRJSTUBLIBNAME)
-@tdbc_BUILD_STUB_LIB_PATH@   $(PRJSTUBLIB)
-@tdbc_STUB_LIB_PATH@         $(LIB_INSTALL_DIR)\$(PRJSTUBLIBNAME)
-@tdbc_SRC_DIR@               $(ROOT)
-@tdbc_INCLUDE_SPEC@          -I$(INCLUDE_INSTALL_DIR)
-@tdbc_BUILD_INCLUDE_SPEC@    -I$(GENERICDIR)
-@tdbc_LIB_DIR@               $(LIB_INSTALL_DIR)
-<<
-
-$(TMP_DIR)\tdbcStubLib.obj : $(GENERICDIR)\tdbcStubLib.c
-        $(cc32) $(STUB_CFLAGS) $(TCL_INCLUDES) -Zl -DSTATIC_BUILD -Fo$@ $?
-
-#---------------------------------------------------------------------
-# Installation. (EDIT)
-#
-# You may need to modify this section to reflect the final distribution
-# of your files and possibly to generate documentation.
-#
-#---------------------------------------------------------------------
-
-install-binaries: $(OUT_DIR)\tdbcConfig.sh
-       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'
-       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
-       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
-       @$(CPY) $(PRJSTUBLIB) "$(LIB_INSTALL_DIR)" >NUL
-       @$(CPY) $(OUT_DIR)\tdbcConfig.sh "$(LIB_INSTALL_DIR)"
-
-install-libraries: $(OUT_DIR)\pkgIndex.tcl
-       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
-       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
-       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
-       @$(CPY) $(OUT_DIR)\pkgIndex.tcl "$(SCRIPT_INSTALL_DIR)"
-       @echo Installing header files in '$(INCLUDE_INSTALL_DIR)'
-       @$(CPY) "$(GENERICDIR)\tdbc.h"      "$(INCLUDE_INSTALL_DIR)\"
-       @$(CPY) "$(GENERICDIR)\tdbcDecls.h" "$(INCLUDE_INSTALL_DIR)\"
-
-install-docs:
-       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
-       @if exist $(DOCDIR) $(CPY) $(DOCDIR)\*.n "$(DOC_INSTALL_DIR)"
-
-#---------------------------------------------------------------------
-# Clean up
-#---------------------------------------------------------------------
-
-clean:
-       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)
-       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc
-       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i
-       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x
-       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch
-
-realclean: clean
-       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)
-
-distclean: realclean
-       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe
-       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj
diff --git a/pkgs/tdbc1.0.5/win/nmakehlp.c b/pkgs/tdbc1.0.5/win/nmakehlp.c
deleted file mode 100644 (file)
index d8021b9..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * nmakehlp.c --
- *
- *     This is used to fix limitations within nmake and the environment.
- *
- * Copyright (c) 2002 by David Gravereaux.
- * Copyright (c) 2006 by Pat Thoyts
- *
- * See the file "license.terms" for information on usage and redistribution of
- * this file, and for a DISCLAIMER OF ALL WARRANTIES.
- * ----------------------------------------------------------------------------
- */
-
-#define _CRT_SECURE_NO_DEPRECATE
-#include <windows.h>
-#define NO_SHLWAPI_GDI
-#define NO_SHLWAPI_STREAM
-#define NO_SHLWAPI_REG
-#include <shlwapi.h>
-#pragma comment (lib, "user32.lib")
-#pragma comment (lib, "kernel32.lib")
-#pragma comment (lib, "shlwapi.lib")
-#include <stdio.h>
-#include <math.h>
-
-/*
- * This library is required for x64 builds with _some_ versions of MSVC
- */
-#if defined(_M_IA64) || defined(_M_AMD64)
-#if _MSC_VER >= 1400 && _MSC_VER < 1500
-#pragma comment(lib, "bufferoverflowU")
-#endif
-#endif
-
-/* ISO hack for dumb VC++ */
-#ifdef _MSC_VER
-#define   snprintf     _snprintf
-#endif
-
-
-
-/* protos */
-
-static int CheckForCompilerFeature(const char *option);
-static int CheckForLinkerFeature(const char *option);
-static int IsIn(const char *string, const char *substring);
-static int SubstituteFile(const char *substs, const char *filename);
-static int QualifyPath(const char *path);
-static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
-static DWORD WINAPI ReadFromPipe(LPVOID args);
-
-/* globals */
-
-#define CHUNK  25
-#define STATICBUFFERSIZE    1000
-typedef struct {
-    HANDLE pipe;
-    char buffer[STATICBUFFERSIZE];
-} pipeinfo;
-
-pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'};
-pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'};
-\f
-/*
- * exitcodes: 0 == no, 1 == yes, 2 == error
- */
-
-int
-main(
-    int argc,
-    char *argv[])
-{
-    char msg[300];
-    DWORD dwWritten;
-    int chars;
-
-    /*
-     * Make sure children (cl.exe and link.exe) are kept quiet.
-     */
-
-    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
-
-    /*
-     * Make sure the compiler and linker aren't effected by the outside world.
-     */
-
-    SetEnvironmentVariable("CL", "");
-    SetEnvironmentVariable("LINK", "");
-
-    if (argc > 1 && *argv[1] == '-') {
-       switch (*(argv[1]+1)) {
-       case 'c':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -c <compiler option>\n"
-                       "Tests for whether cl.exe supports an option\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return CheckForCompilerFeature(argv[2]);
-       case 'l':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -l <linker option>\n"
-                       "Tests for whether link.exe supports an option\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return CheckForLinkerFeature(argv[2]);
-       case 'f':
-           if (argc == 2) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -f <string> <substring>\n"
-                       "Find a substring within another\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           } else if (argc == 3) {
-               /*
-                * If the string is blank, there is no match.
-                */
-
-               return 0;
-           } else {
-               return IsIn(argv[2], argv[3]);
-           }
-       case 's':
-           if (argc == 2) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -s <substitutions file> <file>\n"
-                       "Perform a set of string map type substutitions on a file\n"
-                       "exitcodes: 0\n",
-                       argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return SubstituteFile(argv[2], argv[3]);
-       case 'V':
-           if (argc != 4) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                   "usage: %s -V filename matchstring\n"
-                   "Extract a version from a file:\n"
-                   "eg: pkgIndex.tcl \"package ifneeded http\"",
-                   argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                   &dwWritten, NULL);
-               return 0;
-           }
-           printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'));
-           return 0;
-       case 'Q':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                   "usage: %s -Q path\n"
-                   "Emit the fully qualified path\n"
-                   "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                   &dwWritten, NULL);
-               return 2;
-           }
-           return QualifyPath(argv[2]);
-       }
-    }
-    chars = snprintf(msg, sizeof(msg) - 1,
-           "usage: %s -c|-f|-l|-Q|-s|-V ...\n"
-           "This is a little helper app to equalize shell differences between WinNT and\n"
-           "Win9x and get nmake.exe to accomplish its job.\n",
-           argv[0]);
-    WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
-    return 2;
-}
-\f
-static int
-CheckForCompilerFeature(
-    const char *option)
-{
-    STARTUPINFO si;
-    PROCESS_INFORMATION pi;
-    SECURITY_ATTRIBUTES sa;
-    DWORD threadID;
-    char msg[300];
-    BOOL ok;
-    HANDLE hProcess, h, pipeThreads[2];
-    char cmdline[100];
-
-    hProcess = GetCurrentProcess();
-
-    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
-    ZeroMemory(&si, sizeof(STARTUPINFO));
-    si.cb = sizeof(STARTUPINFO);
-    si.dwFlags   = STARTF_USESTDHANDLES;
-    si.hStdInput = INVALID_HANDLE_VALUE;
-
-    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
-    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
-    sa.lpSecurityDescriptor = NULL;
-    sa.bInheritHandle = FALSE;
-
-    /*
-     * Create a non-inheritible pipe.
-     */
-
-    CreatePipe(&Out.pipe, &h, &sa, 0);
-
-    /*
-     * Dupe the write side, make it inheritible, and close the original.
-     */
-
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Same as above, but for the error side.
-     */
-
-    CreatePipe(&Err.pipe, &h, &sa, 0);
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Base command line.
-     */
-
-    lstrcpy(cmdline, "cl.exe -nologo -c -TC -Zs -X -Fp.\\_junk.pch ");
-
-    /*
-     * Append our option for testing
-     */
-
-    lstrcat(cmdline, option);
-
-    /*
-     * Filename to compile, which exists, but is nothing and empty.
-     */
-
-    lstrcat(cmdline, " .\\nul");
-
-    ok = CreateProcess(
-           NULL,           /* Module name. */
-           cmdline,        /* Command line. */
-           NULL,           /* Process handle not inheritable. */
-           NULL,           /* Thread handle not inheritable. */
-           TRUE,           /* yes, inherit handles. */
-           DETACHED_PROCESS, /* No console for you. */
-           NULL,           /* Use parent's environment block. */
-           NULL,           /* Use parent's starting directory. */
-           &si,            /* Pointer to STARTUPINFO structure. */
-           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
-
-    if (!ok) {
-       DWORD err = GetLastError();
-       int chars = snprintf(msg, sizeof(msg) - 1,
-               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
-
-       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
-               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
-               (300-chars), 0);
-       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
-       return 2;
-    }
-
-    /*
-     * Close our references to the write handles that have now been inherited.
-     */
-
-    CloseHandle(si.hStdOutput);
-    CloseHandle(si.hStdError);
-
-    WaitForInputIdle(pi.hProcess, 5000);
-    CloseHandle(pi.hThread);
-
-    /*
-     * Start the pipe reader threads.
-     */
-
-    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
-    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
-
-    /*
-     * Block waiting for the process to end.
-     */
-
-    WaitForSingleObject(pi.hProcess, INFINITE);
-    CloseHandle(pi.hProcess);
-
-    /*
-     * Wait for our pipe to get done reading, should it be a little slow.
-     */
-
-    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
-    CloseHandle(pipeThreads[0]);
-    CloseHandle(pipeThreads[1]);
-
-    /*
-     * Look for the commandline warning code in both streams.
-     *  - in MSVC 6 & 7 we get D4002, in MSVC 8 we get D9002.
-     */
-
-    return !(strstr(Out.buffer, "D4002") != NULL
-             || strstr(Err.buffer, "D4002") != NULL
-             || strstr(Out.buffer, "D9002") != NULL
-             || strstr(Err.buffer, "D9002") != NULL
-             || strstr(Out.buffer, "D2021") != NULL
-             || strstr(Err.buffer, "D2021") != NULL);
-}
-\f
-static int
-CheckForLinkerFeature(
-    const char *option)
-{
-    STARTUPINFO si;
-    PROCESS_INFORMATION pi;
-    SECURITY_ATTRIBUTES sa;
-    DWORD threadID;
-    char msg[300];
-    BOOL ok;
-    HANDLE hProcess, h, pipeThreads[2];
-    char cmdline[100];
-
-    hProcess = GetCurrentProcess();
-
-    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
-    ZeroMemory(&si, sizeof(STARTUPINFO));
-    si.cb = sizeof(STARTUPINFO);
-    si.dwFlags   = STARTF_USESTDHANDLES;
-    si.hStdInput = INVALID_HANDLE_VALUE;
-
-    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
-    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
-    sa.lpSecurityDescriptor = NULL;
-    sa.bInheritHandle = TRUE;
-
-    /*
-     * Create a non-inheritible pipe.
-     */
-
-    CreatePipe(&Out.pipe, &h, &sa, 0);
-
-    /*
-     * Dupe the write side, make it inheritible, and close the original.
-     */
-
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Same as above, but for the error side.
-     */
-
-    CreatePipe(&Err.pipe, &h, &sa, 0);
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Base command line.
-     */
-
-    lstrcpy(cmdline, "link.exe -nologo ");
-
-    /*
-     * Append our option for testing.
-     */
-
-    lstrcat(cmdline, option);
-
-    ok = CreateProcess(
-           NULL,           /* Module name. */
-           cmdline,        /* Command line. */
-           NULL,           /* Process handle not inheritable. */
-           NULL,           /* Thread handle not inheritable. */
-           TRUE,           /* yes, inherit handles. */
-           DETACHED_PROCESS, /* No console for you. */
-           NULL,           /* Use parent's environment block. */
-           NULL,           /* Use parent's starting directory. */
-           &si,            /* Pointer to STARTUPINFO structure. */
-           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
-
-    if (!ok) {
-       DWORD err = GetLastError();
-       int chars = snprintf(msg, sizeof(msg) - 1,
-               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
-
-       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
-               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
-               (300-chars), 0);
-       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
-       return 2;
-    }
-
-    /*
-     * Close our references to the write handles that have now been inherited.
-     */
-
-    CloseHandle(si.hStdOutput);
-    CloseHandle(si.hStdError);
-
-    WaitForInputIdle(pi.hProcess, 5000);
-    CloseHandle(pi.hThread);
-
-    /*
-     * Start the pipe reader threads.
-     */
-
-    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
-    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
-
-    /*
-     * Block waiting for the process to end.
-     */
-
-    WaitForSingleObject(pi.hProcess, INFINITE);
-    CloseHandle(pi.hProcess);
-
-    /*
-     * Wait for our pipe to get done reading, should it be a little slow.
-     */
-
-    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
-    CloseHandle(pipeThreads[0]);
-    CloseHandle(pipeThreads[1]);
-
-    /*
-     * Look for the commandline warning code in the stderr stream.
-     */
-
-    return !(strstr(Out.buffer, "LNK1117") != NULL ||
-           strstr(Err.buffer, "LNK1117") != NULL ||
-           strstr(Out.buffer, "LNK4044") != NULL ||
-           strstr(Err.buffer, "LNK4044") != NULL);
-}
-\f
-static DWORD WINAPI
-ReadFromPipe(
-    LPVOID args)
-{
-    pipeinfo *pi = (pipeinfo *) args;
-    char *lastBuf = pi->buffer;
-    DWORD dwRead;
-    BOOL ok;
-
-  again:
-    if (lastBuf - pi->buffer + CHUNK > STATICBUFFERSIZE) {
-       CloseHandle(pi->pipe);
-       return (DWORD)-1;
-    }
-    ok = ReadFile(pi->pipe, lastBuf, CHUNK, &dwRead, 0L);
-    if (!ok || dwRead == 0) {
-       CloseHandle(pi->pipe);
-       return 0;
-    }
-    lastBuf += dwRead;
-    goto again;
-
-    return 0;  /* makes the compiler happy */
-}
-\f
-static int
-IsIn(
-    const char *string,
-    const char *substring)
-{
-    return (strstr(string, substring) != NULL);
-}
-\f
-/*
- * GetVersionFromFile --
- *     Looks for a match string in a file and then returns the version
- *     following the match where a version is anything acceptable to
- *     package provide or package ifneeded.
- */
-
-static const char *
-GetVersionFromFile(
-    const char *filename,
-    const char *match,
-    int numdots)
-{
-    size_t cbBuffer = 100;
-    static char szBuffer[100];
-    char *szResult = NULL;
-    FILE *fp = fopen(filename, "rt");
-
-    if (fp != NULL) {
-       /*
-        * Read data until we see our match string.
-        */
-
-       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
-           LPSTR p, q;
-
-           p = strstr(szBuffer, match);
-           if (p != NULL) {
-               /*
-                * Skip to first digit.
-                */
-
-               while (*p && !isdigit(*p)) {
-                   ++p;
-               }
-
-               /*
-                * Find ending whitespace.
-                */
-
-               q = p;
-               while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q)
-                           && (!strchr("ab", q[-1])) || --numdots))) {
-                   ++q;
-               }
-
-               memcpy(szBuffer, p, q - p);
-               szBuffer[q-p] = 0;
-               szResult = szBuffer;
-               break;
-           }
-       }
-       fclose(fp);
-    }
-    return szResult;
-}
-\f
-/*
- * List helpers for the SubstituteFile function
- */
-
-typedef struct list_item_t {
-    struct list_item_t *nextPtr;
-    char * key;
-    char * value;
-} list_item_t;
-
-/* insert a list item into the list (list may be null) */
-static list_item_t *
-list_insert(list_item_t **listPtrPtr, const char *key, const char *value)
-{
-    list_item_t *itemPtr = malloc(sizeof(list_item_t));
-    if (itemPtr) {
-       itemPtr->key = strdup(key);
-       itemPtr->value = strdup(value);
-       itemPtr->nextPtr = NULL;
-
-       while(*listPtrPtr) {
-           listPtrPtr = &(*listPtrPtr)->nextPtr;
-       }
-       *listPtrPtr = itemPtr;
-    }
-    return itemPtr;
-}
-
-static void
-list_free(list_item_t **listPtrPtr)
-{
-    list_item_t *tmpPtr, *listPtr = *listPtrPtr;
-    while (listPtr) {
-       tmpPtr = listPtr;
-       listPtr = listPtr->nextPtr;
-       free(tmpPtr->key);
-       free(tmpPtr->value);
-       free(tmpPtr);
-    }
-}
-\f
-/*
- * SubstituteFile --
- *     As windows doesn't provide anything useful like sed and it's unreliable
- *     to use the tclsh you are building against (consider x-platform builds -
- *     eg compiling AMD64 target from IX86) we provide a simple substitution
- *     option here to handle autoconf style substitutions.
- *     The substitution file is whitespace and line delimited. The file should
- *     consist of lines matching the regular expression:
- *       \s*\S+\s+\S*$
- *
- *     Usage is something like:
- *       nmakehlp -S << $** > $@
- *        @PACKAGE_NAME@ $(PACKAGE_NAME)
- *        @PACKAGE_VERSION@ $(PACKAGE_VERSION)
- *        <<
- */
-
-static int
-SubstituteFile(
-    const char *substitutions,
-    const char *filename)
-{
-    size_t cbBuffer = 1024;
-    static char szBuffer[1024], szCopy[1024];
-    char *szResult = NULL;
-    list_item_t *substPtr = NULL;
-    FILE *fp, *sp;
-
-    fp = fopen(filename, "rt");
-    if (fp != NULL) {
-
-       /*
-        * Build a list of substutitions from the first filename
-        */
-
-       sp = fopen(substitutions, "rt");
-       if (sp != NULL) {
-           while (fgets(szBuffer, cbBuffer, sp) != NULL) {
-               char *ks, *ke, *vs, *ve;
-               ks = szBuffer;
-               while (ks && *ks && isspace(*ks)) ++ks;
-               ke = ks;
-               while (ke && *ke && !isspace(*ke)) ++ke;
-               vs = ke;
-               while (vs && *vs && isspace(*vs)) ++vs;
-               ve = vs;
-               while (ve && *ve && !(*ve == '\r' || *ve == '\n')) ++ve;
-               *ke = 0, *ve = 0;
-               list_insert(&substPtr, ks, vs);
-           }
-           fclose(sp);
-       }
-
-       /* debug: dump the list */
-#ifdef _DEBUG
-       {
-           int n = 0;
-           list_item_t *p = NULL;
-           for (p = substPtr; p != NULL; p = p->nextPtr, ++n) {
-               fprintf(stderr, "% 3d '%s' => '%s'\n", n, p->key, p->value);
-           }
-       }
-#endif
-
-       /*
-        * Run the substitutions over each line of the input
-        */
-
-       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
-           list_item_t *p = NULL;
-           for (p = substPtr; p != NULL; p = p->nextPtr) {
-               char *m = strstr(szBuffer, p->key);
-               if (m) {
-                   char *cp, *op, *sp;
-                   cp = szCopy;
-                   op = szBuffer;
-                   while (op != m) *cp++ = *op++;
-                   sp = p->value;
-                   while (sp && *sp) *cp++ = *sp++;
-                   op += strlen(p->key);
-                   while (*op) *cp++ = *op++;
-                   *cp = 0;
-                   memcpy(szBuffer, szCopy, sizeof(szCopy));
-               }
-           }
-           printf(szBuffer);
-       }
-
-       list_free(&substPtr);
-    }
-    fclose(fp);
-    return 0;
-}
-\f
-/*
- * QualifyPath --
- *
- *     This composes the current working directory with a provided path
- *     and returns the fully qualified and normalized path.
- *     Mostly needed to setup paths for testing.
- */
-
-static int
-QualifyPath(
-    const char *szPath)
-{
-    char szCwd[MAX_PATH + 1];
-    char szTmp[MAX_PATH + 1];
-    char *p;
-    GetCurrentDirectory(MAX_PATH, szCwd);
-    while ((p = strchr(szPath, '/')) && *p)
-       *p = '\\';
-    PathCombine(szTmp, szCwd, szPath);
-    PathCanonicalize(szCwd, szTmp);
-    printf("%s\n", szCwd);
-    return 0;
-}
-
-/*
- * Local variables:
- *   mode: c
- *   c-basic-offset: 4
- *   fill-column: 78
- *   indent-tabs-mode: t
- *   tab-width: 8
- * End:
- */
diff --git a/pkgs/tdbc1.0.5/win/rules.vc b/pkgs/tdbc1.0.5/win/rules.vc
deleted file mode 100644 (file)
index 4b5a40e..0000000
+++ /dev/null
@@ -1,691 +0,0 @@
-#------------------------------------------------------------------------------
-# rules.vc --
-#
-#      Microsoft Visual C++ makefile include for decoding the commandline
-#      macros.  This file does not need editing to build Tcl.
-#
-#      This version is modified from the Tcl source version to support
-#      building extensions using nmake.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-#
-# Copyright (c) 2001-2003 David Gravereaux.
-# Copyright (c) 2003-2008 Patrick Thoyts
-#------------------------------------------------------------------------------
-
-!ifndef _RULES_VC
-_RULES_VC = 1
-
-cc32           = $(CC)   # built-in default.
-link32         = link
-lib32          = lib
-rc32           = $(RC)   # built-in default.
-
-!ifndef INSTALLDIR
-### Assume the normal default.
-_INSTALLDIR    = C:\Program Files\Tcl
-!else
-### Fix the path separators.
-_INSTALLDIR    = $(INSTALLDIR:/=\)
-!endif
-
-#----------------------------------------------------------
-# Set the proper copy method to avoid overwrite questions
-# to the user when copying files and selecting the right
-# "delete all" method.
-#----------------------------------------------------------
-
-!if "$(OS)" == "Windows_NT"
-RMDIR  = rmdir /S /Q
-ERRNULL  = 2>NUL
-!if ![ver | find "4.0" > nul]
-CPY    = echo y | xcopy /i >NUL
-COPY   = copy >NUL
-!else
-CPY    = xcopy /i /y >NUL
-COPY   = copy /y >NUL
-!endif
-!else # "$(OS)" != "Windows_NT"
-CPY    = xcopy /i >_JUNK.OUT # On Win98 NUL does not work here.
-COPY   = copy >_JUNK.OUT # On Win98 NUL does not work here.
-RMDIR  = deltree /Y
-NULL    = \NUL # Used in testing directory existence
-ERRNULL = >NUL # Win9x shell cannot redirect stderr
-!endif
-MKDIR   = mkdir
-
-#------------------------------------------------------------------------------
-# Determine the host and target architectures and compiler version.
-#------------------------------------------------------------------------------
-
-_HASH=^#
-_VC_MANIFEST_EMBED_EXE=
-_VC_MANIFEST_EMBED_DLL=
-VCVER=0
-!if ![echo VCVERSION=_MSC_VER > vercl.x] \
-    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
-    && ![echo ARCH=IX86 >> vercl.x] \
-    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
-    && ![echo ARCH=AMD64 >> vercl.x] \
-    && ![echo $(_HASH)endif >> vercl.x] \
-    && ![cl -nologo -TC -P vercl.x $(ERRNULL)]
-!include vercl.i
-!if ![echo VCVER= ^\> vercl.vc] \
-    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
-!include vercl.vc
-!endif
-!endif
-!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]
-!endif
-
-!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]
-NATIVE_ARCH=IX86
-!else
-NATIVE_ARCH=AMD64
-!endif
-
-# Since MSVC8 we must deal with manifest resources.
-!if $(VCVERSION) >= 1400
-_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1
-_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2
-!endif
-
-!ifndef MACHINE
-MACHINE=$(ARCH)
-!endif
-
-!ifndef CFG_ENCODING
-CFG_ENCODING   = \"cp1252\"
-!endif
-
-!message ===============================================================================
-
-#----------------------------------------------------------
-# build the helper app we need to overcome nmake's limiting
-# environment.
-#----------------------------------------------------------
-
-!if !exist(nmakehlp.exe)
-!if [$(cc32) -nologo nmakehlp.c -link -subsystem:console > nul]
-!endif
-!endif
-
-#----------------------------------------------------------
-# Test for compiler features
-#----------------------------------------------------------
-
-### test for optimizations
-!if [nmakehlp -c -Ot]
-!message *** Compiler has 'Optimizations'
-OPTIMIZING     = 1
-!else
-!message *** Compiler does not have 'Optimizations'
-OPTIMIZING     = 0
-!endif
-
-OPTIMIZATIONS   =
-
-!if [nmakehlp -c -Ot]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Ot
-!endif
-
-!if [nmakehlp -c -Oi]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Oi
-!endif
-
-!if [nmakehlp -c -Op]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Op
-!endif
-
-!if [nmakehlp -c -fp:strict]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -fp:strict
-!endif
-
-!if [nmakehlp -c -Gs]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Gs
-!endif
-
-!if [nmakehlp -c -GS]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS
-!endif
-
-!if [nmakehlp -c -GL]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL
-!endif
-
-DEBUGFLAGS     =
-
-!if [nmakehlp -c -RTC1]
-DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1
-!elseif [nmakehlp -c -GZ]
-DEBUGFLAGS     = $(DEBUGFLAGS) -GZ
-!endif
-
-COMPILERFLAGS  =-W3
-
-# In v13 -GL and -YX are incompatible.
-!if [nmakehlp -c -YX]
-!if ![nmakehlp -c -GL]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX
-!endif
-!endif
-
-!if "$(MACHINE)" == "IX86"
-### test for pentium errata
-!if [nmakehlp -c -QI0f]
-!message *** Compiler has 'Pentium 0x0f fix'
-COMPILERFLAGS  = $(COMPILERFLAGS) -QI0f
-!else
-!message *** Compiler does not have 'Pentium 0x0f fix'
-!endif
-!endif
-
-!if "$(MACHINE)" == "IA64"
-### test for Itanium errata
-!if [nmakehlp -c -QIA64_Bx]
-!message *** Compiler has 'B-stepping errata workarounds'
-COMPILERFLAGS   = $(COMPILERFLAGS) -QIA64_Bx
-!else
-!message *** Compiler does not have 'B-stepping errata workarounds'
-!endif
-!endif
-
-!if "$(MACHINE)" == "IX86"
-### test for -align:4096, when align:512 will do.
-!if [nmakehlp -l -opt:nowin98]
-!message *** Linker has 'Win98 alignment problem'
-ALIGN98_HACK   = 1
-!else
-!message *** Linker does not have 'Win98 alignment problem'
-ALIGN98_HACK   = 0
-!endif
-!else
-ALIGN98_HACK   = 0
-!endif
-
-LINKERFLAGS     =
-
-!if [nmakehlp -l -ltcg]
-LINKERFLAGS     =-ltcg
-!endif
-
-#----------------------------------------------------------
-# Decode the options requested.
-#----------------------------------------------------------
-
-!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]
-STATIC_BUILD   = 0
-TCL_THREADS    = 1
-DEBUG          = 0
-SYMBOLS                = 0
-PROFILE                = 0
-PGO            = 0
-MSVCRT         = 0
-LOIMPACT       = 0
-UNCHECKED       = 0
-!else
-!if [nmakehlp -f $(OPTS) "static"]
-!message *** Doing static
-STATIC_BUILD   = 1
-!else
-STATIC_BUILD   = 0
-!endif
-!if [nmakehlp -f $(OPTS) "msvcrt"]
-!message *** Doing msvcrt
-MSVCRT         = 1
-!else
-MSVCRT         = 0
-!endif
-!if [nmakehlp -f $(OPTS) "nothreads"]
-!message *** Compile explicitly for non-threaded tcl
-TCL_THREADS    = 0
-!else
-TCL_THREADS     = 1
-!endif
-!if [nmakehlp -f $(OPTS) "symbols"]
-!message *** Doing symbols
-DEBUG          = 1
-!else
-DEBUG          = 0
-!endif
-!if [nmakehlp -f $(OPTS) "pdbs"]
-!message *** Doing pdbs
-SYMBOLS                = 1
-!else
-SYMBOLS                = 0
-!endif
-!if [nmakehlp -f $(OPTS) "profile"]
-!message *** Doing profile
-PROFILE                = 1
-!else
-PROFILE                = 0
-!endif
-!if [nmakehlp -f $(OPTS) "pgi"]
-!message *** Doing profile guided optimization instrumentation
-PGO            = 1
-!elseif [nmakehlp -f $(OPTS) "pgo"]
-!message *** Doing profile guided optimization
-PGO            = 2
-!else
-PGO            = 0
-!endif
-!if [nmakehlp -f $(OPTS) "loimpact"]
-!message *** Doing loimpact
-LOIMPACT       = 1
-!else
-LOIMPACT       = 0
-!endif
-!if [nmakehlp -f $(OPTS) "unchecked"]
-!message *** Doing unchecked
-UNCHECKED = 1
-!else
-UNCHECKED = 0
-!endif
-!endif
-
-
-!if !$(STATIC_BUILD)
-# Make sure we don't build overly fat DLLs.
-MSVCRT         = 1
-# We shouldn't statically put the extensions inside the shell when dynamic.
-TCL_USE_STATIC_PACKAGES = 0
-!endif
-
-
-#----------------------------------------------------------
-# Figure-out how to name our intermediate and output directories.
-# We wouldn't want different builds to use the same .obj files
-# by accident.
-#----------------------------------------------------------
-
-#----------------------------------------
-# Naming convention:
-#   t = full thread support.
-#   s = static library (as opposed to an
-#      import library)
-#   g = linked to the debug enabled C
-#      run-time.
-#   x = special static build when it
-#      links to the dynamic C run-time.
-#----------------------------------------
-SUFX       = sgx
-
-!if $(DEBUG)
-BUILDDIRTOP = Debug
-!else
-BUILDDIRTOP = Release
-!endif
-
-!if "$(MACHINE)" != "IX86"
-BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)
-!endif
-!if $(VCVER) > 6
-BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)
-!endif
-
-!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)
-SUFX       = $(SUFX:g=)
-!endif
-
-TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
-
-!if !$(STATIC_BUILD)
-TMP_DIRFULL = $(TMP_DIRFULL:Static=)
-SUFX       = $(SUFX:s=)
-EXT        = dll
-!if $(MSVCRT)
-TMP_DIRFULL = $(TMP_DIRFULL:X=)
-SUFX       = $(SUFX:x=)
-!endif
-!else
-TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
-EXT        = lib
-!if !$(MSVCRT)
-TMP_DIRFULL = $(TMP_DIRFULL:X=)
-SUFX       = $(SUFX:x=)
-!endif
-!endif
-
-!if !$(TCL_THREADS)
-TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)
-SUFX       = $(SUFX:t=)
-!endif
-
-!ifndef TMP_DIR
-TMP_DIR            = $(TMP_DIRFULL)
-!ifndef OUT_DIR
-OUT_DIR            = .\$(BUILDDIRTOP)
-!endif
-!else
-!ifndef OUT_DIR
-OUT_DIR            = $(TMP_DIR)
-!endif
-!endif
-
-
-#----------------------------------------------------------
-# Decode the statistics requested.
-#----------------------------------------------------------
-
-!if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"]
-TCL_MEM_DEBUG      = 0
-TCL_COMPILE_DEBUG   = 0
-!else
-!if [nmakehlp -f $(STATS) "memdbg"]
-!message *** Doing memdbg
-TCL_MEM_DEBUG      = 1
-!else
-TCL_MEM_DEBUG      = 0
-!endif
-!if [nmakehlp -f $(STATS) "compdbg"]
-!message *** Doing compdbg
-TCL_COMPILE_DEBUG   = 1
-!else
-TCL_COMPILE_DEBUG   = 0
-!endif
-!endif
-
-
-#----------------------------------------------------------
-# Decode the checks requested.
-#----------------------------------------------------------
-
-!if "$(CHECKS)" == "" || [nmakehlp -f "$(CHECKS)" "none"]
-TCL_NO_DEPRECATED          = 0
-WARNINGS                   = -W3
-!else
-!if [nmakehlp -f $(CHECKS) "nodep"]
-!message *** Doing nodep check
-TCL_NO_DEPRECATED          = 1
-!else
-TCL_NO_DEPRECATED          = 0
-!endif
-!if [nmakehlp -f $(CHECKS) "fullwarn"]
-!message *** Doing full warnings check
-WARNINGS                   = -W4
-!if [nmakehlp -l -warn:3]
-LINKERFLAGS                = $(LINKERFLAGS) -warn:3
-!endif
-!else
-WARNINGS                   = -W3
-!endif
-!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]
-!message *** Doing 64bit portability warnings
-WARNINGS                   = $(WARNINGS) -Wp64
-!endif
-!endif
-
-!if $(PGO) > 1
-!if [nmakehlp -l -ltcg:pgoptimize]
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize
-!else
-MSG=^
-This compiler does not support profile guided optimization.
-!error $(MSG)
-!endif
-!elseif $(PGO) > 0
-!if [nmakehlp -l -ltcg:pginstrument]
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument
-!else
-MSG=^
-This compiler does not support profile guided optimization.
-!error $(MSG)
-!endif
-!endif
-
-#----------------------------------------------------------
-# Set our defines now armed with our options.
-#----------------------------------------------------------
-
-OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS
-
-!if $(TCL_MEM_DEBUG)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG
-!endif
-!if $(TCL_COMPILE_DEBUG)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
-!endif
-!if $(TCL_THREADS)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1
-!endif
-!if $(STATIC_BUILD)
-OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD
-!endif
-!if $(TCL_NO_DEPRECATED)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED
-!endif
-
-!if !$(DEBUG)
-OPTDEFINES     = $(OPTDEFINES) -DNDEBUG
-!if $(OPTIMIZING)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
-!endif
-!endif
-!if $(PROFILE)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED
-!endif
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT
-!endif
-
-
-#----------------------------------------------------------
-# Get common info used when building extensions.
-#----------------------------------------------------------
-
-!if "$(PROJECT)" != "tcl"
-
-# If INSTALLDIR set to tcl root dir then reset to the lib dir.
-!if exist("$(_INSTALLDIR)\include\tcl.h")
-_INSTALLDIR=$(_INSTALLDIR)\lib
-!endif
-
-!if !defined(TCLDIR)
-!if exist("$(_INSTALLDIR)\..\include\tcl.h")
-TCLINSTALL     = 1
-_TCLDIR                = $(_INSTALLDIR)\..
-_TCL_H          = $(_INSTALLDIR)\..\include\tcl.h
-TCLDIR          = $(_INSTALLDIR)\..
-!else
-MSG=^
-Failed to find tcl.h.  Set the TCLDIR macro.
-!error $(MSG)
-!endif
-!else
-_TCLDIR        = $(TCLDIR:/=\)
-!if exist("$(_TCLDIR)\include\tcl.h")
-TCLINSTALL     = 1
-_TCL_H          = $(_TCLDIR)\include\tcl.h
-!elseif exist("$(_TCLDIR)\generic\tcl.h")
-TCLINSTALL     = 0
-_TCL_H          = $(_TCLDIR)\generic\tcl.h
-!else
-MSG =^
-Failed to find tcl.h.  The TCLDIR macro does not appear correct.
-!error $(MSG)
-!endif
-!endif
-!endif
-
-#--------------------------------------------------------------
-# Extract various version numbers from tcl headers
-# The generated file is then included in the makefile.
-#--------------------------------------------------------------
-
-!if [echo REM = This file is generated from rules.vc > versions.vc]
-!endif
-!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]
-!endif
-!if [echo TCL_MINOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]
-!endif
-!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \
-   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]
-!endif
-
-# If building the tcl core then we need additional package versions
-!if "$(PROJECT)" == "tcl"
-!if [echo PKG_HTTP_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\http\pkgIndex.tcl http >> versions.vc]
-!endif
-!if [echo PKG_TCLTEST_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\tcltest\pkgIndex.tcl tcltest >> versions.vc]
-!endif
-!if [echo PKG_MSGCAT_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\msgcat\pkgIndex.tcl msgcat >> versions.vc]
-!endif
-!if [echo PKG_PLATFORM_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform " >> versions.vc]
-!endif
-!if [echo PKG_SHELL_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform::shell" >> versions.vc]
-!endif
-!endif
-
-!include versions.vc
-
-#--------------------------------------------------------------
-# Setup tcl version dependent stuff headers
-#--------------------------------------------------------------
-
-!if "$(PROJECT)" != "tcl"
-
-TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)
-
-!if $(TCL_VERSION) < 81
-TCL_DOES_STUBS = 0
-!else
-TCL_DOES_STUBS = 1
-!endif
-
-!if $(TCLINSTALL)
-_TCLBINDIR      = "$(_TCLDIR)\bin"
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)$(SUFX).exe"
-!if !exist($(TCLSH)) && $(TCL_THREADS)
-TCLSH           = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)t$(SUFX).exe"
-!endif
-TCLSTUBLIB     = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"
-TCLIMPLIB      = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"
-TCL_LIBRARY    = $(_TCLDIR)\lib
-COFFBASE       = \must\have\tcl\sources\to\build\this\target
-TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target
-TCL_INCLUDES    = -I"$(_TCLDIR)\include"
-!else
-_TCLBINDIR      = $(_TCLDIR)\win\$(BUILDDIRTOP)
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)$(SUFX).exe"
-!if !exist($(TCLSH)) && $(TCL_THREADS)
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)t$(SUFX).exe"
-!endif
-TCLSTUBLIB     = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"
-TCLIMPLIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"
-TCL_LIBRARY    = $(_TCLDIR)\library
-COFFBASE       = "$(_TCLDIR)\win\coffbase.txt"
-TCLTOOLSDIR    = $(_TCLDIR)\tools
-TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"
-!endif
-
-!endif
-
-#----------------------------------------------------------
-# Optionally check for Tk info for building extensions.
-#----------------------------------------------------------
-
-!ifdef PROJECT_REQUIRES_TK
-!if !defined(TKDIR)
-!if exist("$(_INSTALLDIR)\..\include\tk.h")
-TKINSTALL      = 1
-_TKDIR         = $(_INSTALLDIR)\..
-_TK_H          = $(_TKDIR)\include\tk.h
-TKDIR          = $(_TKDIR)
-!elseif exist("$(_TCLDIR)\include\tk.h")
-TKINSTALL      = 1
-_TKDIR         = $(_TCLDIR)
-_TK_H          = $(_TKDIR)\include\tk.h
-TKDIR          = $(_TKDIR)
-!endif
-!else
-_TKDIR = $(TKDIR:/=\)
-!if exist("$(_TKDIR)\include\tk.h")
-TKINSTALL      = 1
-_TK_H          = $(_TKDIR)\include\tk.h
-!elseif exist("$(_TKDIR)\generic\tk.h")
-TKINSTALL      = 0
-_TK_H          = $(_TKDIR)\generic\tk.h
-!else
-MSG =^
-Failed to find tk.h. The TKDIR macro does not appear correct.
-!error $(MSG)
-!endif
-!endif
-!endif
-
-#-------------------------------------------------------------------------
-# Extract Tk version numbers
-#-------------------------------------------------------------------------
-
-!if defined(PROJECT_REQUIRES_TK) || "$(PROJECT)" == "tk"
-!if [echo TK_MAJOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]
-!endif
-!if [echo TK_MINOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]
-!endif
-!if [echo TK_PATCH_LEVEL = \>> versions.vc] \
-   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]
-!endif
-
-!include versions.vc
-
-TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
-TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)
-
-!if "$(PROJECT)" != "tk"
-!if $(TKINSTALL)
-_TKBINDIR       = $(_TKDIR)\bin
-WISH           = "$(_TKBINDIR)\wish$(TK_VERSION)$(SUFX).exe"
-!if !exist($(WISH)) && $(TCL_THREADS)
-WISH           = "$(_TKBINDIR)\wish$(TK_VERSION)t$(SUFX).exe"
-!endif
-TKSTUBLIB      = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"
-TK_LIBRARY     = $(_TKDIR)\lib
-TKIMPLIB       = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"
-TK_INCLUDES     = -I"$(_TKDIR)\include"
-!else
-_TKBINDIR       = $(_TKDIR)\win\$(BUILDDIRTOP)
-WISH           = "$(_TKBINDIR)\wish$(TCL_VERSION)$(SUFX).exe"
-!if !exist($(WISH)) && $(TCL_THREADS)
-WISH           = "$(_TKBINDIR)\wish$(TCL_VERSION)t$(SUFX).exe"
-!endif
-TKSTUBLIB      = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"
-TKIMPLIB       = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"
-TK_LIBRARY     = $(_TKDIR)\library
-TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
-!endif
-!endif
-
-!endif
-
-#----------------------------------------------------------
-# Setup the fully qualified OUT_DIR path as OUT_DIR_PATH
-#----------------------------------------------------------
-!if [echo OUT_DIR_PATH = \>> versions.vc] \
-    && [nmakehlp -Q "$(OUT_DIR)" >> versions.vc]
-!endif
-!include versions.vc
-
-#----------------------------------------------------------
-# Display stats being used.
-#----------------------------------------------------------
-
-!message *** Intermediate directory will be '$(TMP_DIR)'
-!message *** Output directory will be '$(OUT_DIR)'
-!message *** Suffix for binaries will be '$(SUFX)'
-!message *** Optional defines are '$(OPTDEFINES)'
-!message *** Compiler version $(VCVER). Target machine is $(MACHINE)
-!message *** Host architecture is $(NATIVE_ARCH)
-!message *** Compiler options '$(COMPILERFLAGS) $(OPTIMIZATIONS) $(DEBUGFLAGS) $(WARNINGS)'
-!message *** Link options '$(LINKERFLAGS)'
-
-!endif
similarity index 98%
rename from pkgs/tdbc1.0.5/Makefile.in
rename to pkgs/tdbc1.0.6/Makefile.in
index 46bb7d5..c66ff8f 100644 (file)
@@ -61,7 +61,7 @@ PKG_LIB_FILE  = @PKG_LIB_FILE@
 PKG_STUB_LIB_FILE = @PKG_STUB_LIB_FILE@
 
 lib_BINARIES   = $(PKG_LIB_FILE) $(PKG_STUB_LIB_FILE)
-BINARIES       = $(lib_BINARIES)
+BINARIES       = $(lib_BINARIES) tdbc.tcl
 
 SHELL          = @SHELL@
 
@@ -159,7 +159,7 @@ PKG_CFLAGS  = @PKG_CFLAGS@
 DEFS           = @DEFS@ $(PKG_CFLAGS)
 
 # Move pkgIndex.tcl to 'BINARIES' var if it is generated in the Makefile
-CONFIG_CLEAN_FILES = Makefile pkgIndex.tcl
+CONFIG_CLEAN_FILES = Makefile pkgIndex.tcl tdbcConfig.sh
 CLEANFILES     = @CLEANFILES@
 
 CPPFLAGS       = @CPPFLAGS@
@@ -192,7 +192,6 @@ all: binaries libraries doc
 #========================================================================
 
 binaries: $(BINARIES)
-       cp -p $(srcdir)/library/tdbc.tcl $(top_builddir)
 
 libraries:
 
@@ -282,6 +281,13 @@ $(PKG_STUB_LIB_FILE): $(PKG_STUB_OBJECTS)
        $(RANLIB_STUB) $(PKG_STUB_LIB_FILE)
 
 #========================================================================
+# Tcl sources.
+#========================================================================
+
+tdbc.tcl:
+       cp $(srcdir)/library/tdbc.tcl .
+
+#========================================================================
 # We need to enumerate the list of .c to .o lines here.
 #
 # In the following lines, $(srcdir) refers to the toplevel directory
@@ -368,6 +374,7 @@ dist: dist-clean
 
        mkdir $(DIST_DIR)/win
        cp -p $(srcdir)/win/makefile.vc $(srcdir)/win/nmakehlp.c \
+               $(srcdir)/win/rules-ext.vc $(srcdir)/win/targets.vc \
                $(srcdir)/win/rules.vc $(srcdir)/win/tdbc.rc \
                $(DIST_DIR)/win/
 
similarity index 98%
rename from pkgs/tdbc1.0.5/README
rename to pkgs/tdbc1.0.6/README
index a56bf1b..cd99e42 100644 (file)
@@ -1,6 +1,6 @@
 README: tdbc
 
-    This is the 1.0.5 source distribution of Tcl Database Connectivity
+    This is the 1.0.6 source distribution of Tcl Database Connectivity
     (TDBC). TDBC is available from a Fossil version control repository
     at http://tdbc.tcl.tk/ .
 
similarity index 99%
rename from pkgs/tdbc1.0.5/configure
rename to pkgs/tdbc1.0.6/configure
index ffd9346..a791fc3 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for tdbc 1.0.5.
+# Generated by GNU Autoconf 2.69 for tdbc 1.0.6.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='tdbc'
 PACKAGE_TARNAME='tdbc'
-PACKAGE_VERSION='1.0.5'
-PACKAGE_STRING='tdbc 1.0.5'
+PACKAGE_VERSION='1.0.6'
+PACKAGE_STRING='tdbc 1.0.6'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1320,7 +1320,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures tdbc 1.0.5 to adapt to many kinds of systems.
+\`configure' configures tdbc 1.0.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1381,7 +1381,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of tdbc 1.0.5:";;
+     short | recursive ) echo "Configuration of tdbc 1.0.6:";;
    esac
   cat <<\_ACEOF
 
@@ -1389,7 +1389,7 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-threads        build with threads
+  --enable-threads        build with threads (default: on)
   --enable-shared         build and link with shared libraries (default: on)
   --enable-stubs          build and link with stub libraries. Always true for
                           shared builds (default: on)
@@ -1484,7 +1484,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-tdbc configure 1.0.5
+tdbc configure 1.0.6
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1849,7 +1849,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by tdbc $as_me 1.0.5, which was
+It was created by tdbc $as_me 1.0.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2460,8 +2460,9 @@ $as_echo "$as_me: WARNING: --with-tcl argument should refer to directory contain
                for i in `ls -d ${libdir} 2>/dev/null` \
                        `ls -d ${exec_prefix}/lib 2>/dev/null` \
                        `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
                        `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/pkg/lib 2>/dev/null` \
                        `ls -d /usr/lib 2>/dev/null` \
                        `ls -d /usr/lib64 2>/dev/null` \
                        `ls -d /usr/lib/tcl8.6 2>/dev/null` \
@@ -5448,16 +5449,6 @@ $as_echo "#define NO_ERRNO_H 1" >>confdefs.h
 fi
 
 
-    ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
-if test "x$ac_cv_header_float_h" = xyes; then :
-
-else
-
-$as_echo "#define NO_FLOAT_H 1" >>confdefs.h
-
-fi
-
-
     ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default"
 if test "x$ac_cv_header_values_h" = xyes; then :
 
@@ -5788,7 +5779,7 @@ fi
 # TEA_ADD_* any platform specific compiler/build info here.
 #--------------------------------------------------------------------
 
-#CLEANFILES="$CLEANFILES pkgIndex.tcl"
+CLEANFILES="$CLEANFILES tdbc.tcl"
 
 #--------------------------------------------------------------------
 # Choose which headers you need.  Extension authors should try very
@@ -7235,7 +7226,7 @@ fi
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5
 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; }
 if ${ac_cv_lib_network_inet_ntoa+:} false; then :
@@ -7462,7 +7453,7 @@ fi
            CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
 
            # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            if test $doRpath = yes; then :
 
@@ -7538,39 +7529,23 @@ fi
        OpenBSD-*)
            arch=`arch -s`
            case "$arch" in
-           vax)
-               SHLIB_SUFFIX=""
-               SHARED_LIB_SUFFIX=""
-               LDFLAGS=""
+           alpha|sparc64)
+               SHLIB_CFLAGS="-fPIC"
                ;;
            *)
-               case "$arch" in
-               alpha|sparc64)
-                   SHLIB_CFLAGS="-fPIC"
-                   ;;
-               *)
-                   SHLIB_CFLAGS="-fpic"
-                   ;;
-               esac
-               SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-               SHLIB_SUFFIX=".so"
-               if test $doRpath = yes; then :
-
-                   CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-fi
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
-               LDFLAGS="-Wl,-export-dynamic"
-               ;;
-           esac
-           case "$arch" in
-           vax)
-               CFLAGS_OPTIMIZE="-O1"
-               ;;
-           *)
-               CFLAGS_OPTIMIZE="-O2"
+               SHLIB_CFLAGS="-fpic"
                ;;
            esac
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           if test $doRpath = yes; then :
+
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+fi
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
+           LDFLAGS="-Wl,-export-dynamic"
+           CFLAGS_OPTIMIZE="-O2"
            if test "${TCL_THREADS}" = "1"; then :
 
                # On OpenBSD:   Compile with -pthread
@@ -7586,7 +7561,7 @@ fi
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            LDFLAGS="$LDFLAGS -export-dynamic"
            if test $doRpath = yes; then :
@@ -9634,7 +9609,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by tdbc $as_me 1.0.5, which was
+This file was extended by tdbc $as_me 1.0.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -9687,7 +9662,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-tdbc config.status 1.0.5
+tdbc config.status 1.0.6
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
similarity index 99%
rename from pkgs/tdbc1.0.5/configure.ac
rename to pkgs/tdbc1.0.6/configure.ac
index ab0510a..e411c4c 100755 (executable)
@@ -11,7 +11,7 @@ dnl   to configure the system for the local environment.
 # so you can encode the package version directly into the source files.
 #-----------------------------------------------------------------------
 
-AC_INIT([tdbc], [1.0.5])
+AC_INIT([tdbc], [1.0.6])
 
 #--------------------------------------------------------------------
 # Call TEA_INIT as the first TEA_ macro to set up initial vars.
@@ -112,7 +112,7 @@ TEA_ADD_TCL_SOURCES([library/tdbc.tcl])
 # TEA_ADD_* any platform specific compiler/build info here.
 #--------------------------------------------------------------------
 
-#CLEANFILES="$CLEANFILES pkgIndex.tcl"
+CLEANFILES="$CLEANFILES tdbc.tcl"
 
 #--------------------------------------------------------------------
 # Choose which headers you need.  Extension authors should try very
similarity index 96%
rename from pkgs/tdbc1.0.5/generic/tdbc.h
rename to pkgs/tdbc1.0.6/generic/tdbc.h
index 3092db0..9e52f32 100644 (file)
@@ -59,8 +59,8 @@ DLLIMPORT int         Tdbc_Init(Tcl_Interp* interp);
  * appear near the top of configure.ac.
  */
 
-#define        TDBC_VERSION    "1.0.5"
-#define TDBC_PATCHLEVEL "1.0.5"
+#define        TDBC_VERSION    "1.0.6"
+#define TDBC_PATCHLEVEL "1.0.6"
 
 /*
  * Include the Stubs declarations for the public API, generated from
similarity index 99%
rename from pkgs/tdbc1.0.5/library/tdbc.tcl
rename to pkgs/tdbc1.0.6/library/tdbc.tcl
index 7f9b3c7..2a167cb 100644 (file)
@@ -429,6 +429,7 @@ oo::class create ::tdbc::connection {
              WHERE 1=1
                  $clause1
                  $clause2
+             ORDER BY \"foreignConstraintCatalog\", \"foreignConstraintSchema\", \"foreignConstraintName\", \"ordinalPosition\"
 "]
                dict set foreignKeysStatement $exists1 $exists2 $stmt
            }
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from pkgs/tdbcpostgres1.0.5/tclconfig/install-sh
rename to pkgs/tdbc1.0.6/tclconfig/install-sh
similarity index 97%
rename from pkgs/tdbc1.0.5/tclconfig/tcl.m4
rename to pkgs/tdbc1.0.6/tclconfig/tcl.m4
index 203a05d..e8234a2 100644 (file)
@@ -135,8 +135,9 @@ AC_DEFUN([TEA_PATH_TCLCONFIG], [
                for i in `ls -d ${libdir} 2>/dev/null` \
                        `ls -d ${exec_prefix}/lib 2>/dev/null` \
                        `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
                        `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/pkg/lib 2>/dev/null` \
                        `ls -d /usr/lib 2>/dev/null` \
                        `ls -d /usr/lib64 2>/dev/null` \
                        `ls -d /usr/lib/tcl8.6 2>/dev/null` \
@@ -349,6 +350,8 @@ AC_DEFUN([TEA_PATH_TKCONFIG], [
 #              TCL_BIN_DIR
 #              TCL_SRC_DIR
 #              TCL_LIB_FILE
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
 #------------------------------------------------------------------------
 
 AC_DEFUN([TEA_LOAD_TCLCONFIG], [
@@ -783,7 +786,7 @@ AC_DEFUN([TEA_ENABLE_SHARED], [
 AC_DEFUN([TEA_ENABLE_THREADS], [
     AC_ARG_ENABLE(threads,
        AC_HELP_STRING([--enable-threads],
-           [build with threads]),
+           [build with threads (default: on)]),
        [tcl_ok=$enableval], [tcl_ok=yes])
 
     if test "${enable_threads+set}" = set; then
@@ -1499,7 +1502,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
            ;;
        HP-UX-*.11.*)
@@ -1610,7 +1613,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
            CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
 
            # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            AS_IF([test $doRpath = yes], [
                CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
@@ -1649,37 +1652,21 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
        OpenBSD-*)
            arch=`arch -s`
            case "$arch" in
-           vax)
-               SHLIB_SUFFIX=""
-               SHARED_LIB_SUFFIX=""
-               LDFLAGS=""
+           alpha|sparc64)
+               SHLIB_CFLAGS="-fPIC"
                ;;
            *)
-               case "$arch" in
-               alpha|sparc64)
-                   SHLIB_CFLAGS="-fPIC"
-                   ;;
-               *)
-                   SHLIB_CFLAGS="-fpic"
-                   ;;
-               esac
-               SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-               SHLIB_SUFFIX=".so"
-               AS_IF([test $doRpath = yes], [
-                   CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
-               LDFLAGS="-Wl,-export-dynamic"
-               ;;
-           esac
-           case "$arch" in
-           vax)
-               CFLAGS_OPTIMIZE="-O1"
-               ;;
-           *)
-               CFLAGS_OPTIMIZE="-O2"
+               SHLIB_CFLAGS="-fpic"
                ;;
            esac
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
+           LDFLAGS="-Wl,-export-dynamic"
+           CFLAGS_OPTIMIZE="-O2"
            AS_IF([test "${TCL_THREADS}" = "1"], [
                # On OpenBSD:   Compile with -pthread
                #               Don't link with -lpthread
@@ -1693,7 +1680,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            LDFLAGS="$LDFLAGS -export-dynamic"
            AS_IF([test $doRpath = yes], [
@@ -2378,7 +2365,6 @@ closedir(d);
 
     # TEA specific:
     AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have <errno.h>?])])
-    AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have <float.h>?])])
     AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have <values.h>?])])
     AC_CHECK_HEADER(limits.h,
        [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have <limits.h>?])],
@@ -4236,6 +4222,114 @@ AC_DEFUN([TEA_PATH_CELIB], [
        fi
     fi
 ])
+
+###
+# Tip 430 - ZipFS Modifications
+###
+#------------------------------------------------------------------------
+# SC_ZIPFS_SUPPORT
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
+#              TCL_ZIPFS_FLAG
+#              ZIP_PROG
+#------------------------------------------------------------------------
+
+#------------------------------------------------------------------------
+# SC_PROG_ZIP
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              ZIP_PROG
+#       ZIP_PROG_OPTIONS
+#       ZIP_PROG_VFSSEARCH
+#       ZIP_INSTALL_OBJS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ZIPFS_SUPPORT], [
+    AC_MSG_CHECKING([for zipfs support])
+    ZIP_PROG=""
+    ZIP_PROG_OPTIONS=""
+    ZIP_PROG_VFSSEARCH=""
+    INSTALL_MSGS=""
+    # If our native tclsh processes the "install" command line option
+    # we can use it to mint zip files
+    AS_IF([$TCLSH_PROG install],[
+      ZIP_PROG=${TCLSH_PROG}
+      ZIP_PROG_OPTIONS="install mkzip"
+      ZIP_PROG_VFSSEARCH="."
+      AC_MSG_RESULT([Can use Native Tclsh for Zip encoding])
+    ])
+    if test "x$ZIP_PROG" = "x" ; then
+        AC_CACHE_VAL(ac_cv_path_zip, [
+        search_path=`echo ${PATH} | sed -e 's/:/ /g'`
+        for dir in $search_path ; do
+            for j in `ls -r $dir/zip 2> /dev/null` \
+                `ls -r $dir/zip 2> /dev/null` ; do
+            if test x"$ac_cv_path_zip" = x ; then
+                if test -f "$j" ; then
+                ac_cv_path_zip=$j
+                break
+                fi
+            fi
+            done
+        done
+        ])
+        if test -f "$ac_cv_path_zip" ; then
+            ZIP_PROG="$ac_cv_path_zip "
+            AC_MSG_RESULT([$ZIP_PROG])
+            ZIP_PROG_OPTIONS="-rq"
+            ZIP_PROG_VFSSEARCH="."
+            AC_MSG_RESULT([Found INFO Zip in environment])
+            # Use standard arguments for zip
+        fi
+    fi
+    if test "x$ZIP_PROG" = "x" ; then
+           # It is not an error if an installed version of Zip can't be located.
+        ZIP_PROG=""
+        ZIP_PROG_OPTIONS=""
+        ZIP_PROG_VFSSEARCH=""
+        TCL_ZIPFS_SUPPORT=0
+        TCL_ZIPFS_FLAG=
+    else
+        # ZIPFS Support
+       eval "TCL_ZIP_FILE=\"${TCL_ZIP_FILE}\""
+       if test ${TCL_ZIP_FILE} = "" ; then
+          TCL_ZIPFS_SUPPORT=0
+          TCL_ZIPFS_FLAG=
+          INSTALL_LIBRARIES=install-libraries
+          INSTALL_MSGS=install-msgs
+       else
+           if test ${SHARED_BUILD} = 1 ; then
+              TCL_ZIPFS_SUPPORT=1
+              INSTALL_LIBRARIES=install-libraries-zipfs-shared
+           else
+              TCL_ZIPFS_SUPPORT=2
+              INSTALL_LIBRARIES=install-libraries-zipfs-static
+           fi
+          TCL_ZIPFS_FLAG=-DTCL_ZIPFS_SUPPORT
+       fi
+    fi
+
+    AC_SUBST(TCL_ZIP_FILE)
+    AC_SUBST(TCL_ZIPFS_SUPPORT)
+    AC_SUBST(TCL_ZIPFS_FLAG)
+    AC_SUBST(ZIP_PROG)
+    AC_SUBST(ZIP_PROG_OPTIONS)
+    AC_SUBST(ZIP_PROG_VFSSEARCH)
+    AC_SUBST(INSTALL_LIBRARIES)
+    AC_SUBST(INSTALL_MSGS)
+])
+
 # Local Variables:
 # mode: autoconf
 # End:
diff --git a/pkgs/tdbc1.0.6/win/makefile.vc b/pkgs/tdbc1.0.6/win/makefile.vc
new file mode 100644 (file)
index 0000000..efb5c30
--- /dev/null
@@ -0,0 +1,103 @@
+#------------------------------------------------------------- -*- makefile -*-
+#
+# Makefile for TBDC Core
+#
+# Basic build, test and install
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir
+#
+# For other build options (debug, static etc.)
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+# 
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+#------------------------------------------------------------------------------
+
+PROJECT         = tdbc
+RCFILE      = tdbc.rc
+# Tcl 8.6 etc. compile with /DUNICODE. TDBC pre-nmake reform compiled
+# without -DUNICODE using explicit W suffixes on wide character calls.
+# Keep that behaviour for now.
+USE_WIDECHAR_API  = 0
+
+!include "rules-ext.vc"
+
+!if [echo REM = This file is generated from Makefile.vc > versions.vc]
+!endif
+!if [echo TCL_VERSION_REQ = \>> versions.vc] \
+   && [nmakehlp -V ..\configure.ac TCL_VERSION_REQ >> versions.vc]
+!endif
+!if [echo TCL_VERSION_DESIRED = \>> versions.vc] \
+   && [nmakehlp -V ..\configure.ac TCL_VERSION_DESIRED >> versions.vc]
+!endif
+!if [echo TCLOO_VERSION_REQ = \>> versions.vc] \
+   && [nmakehlp -V ..\configure.ac TCLOO_VERSION_REQ >> versions.vc]
+!endif
+
+!include "versions.vc"
+
+PRJ_OBJS = \
+       $(TMP_DIR)\tdbc.obj \
+       $(TMP_DIR)\tdbcStubInit.obj \
+       $(TMP_DIR)\tdbcTokenize.obj 
+
+PRJ_STUBOBJS = \
+       $(TMP_DIR)\tdbcStubLib.obj
+
+PRJ_HEADERS_PUBLIC = \
+       $(GENERICDIR)\tdbc.h \
+       $(GENERICDIR)\tdbcDecls.h
+
+PRJ_HEADERS = \
+       $(PRJ_HEADERS_PUBLIC) \
+        $(GENERICDIR)\tdbcInt.h
+
+# Define the standard targets including install, test, shell
+!include "$(_RULESDIR)\targets.vc"
+
+# The TIP 477 generation of pkgIndex.tcl from pkgIndex.tcl.in does not include
+# all replacements below so define our own it.
+pkgindex:   $(OUT_DIR)\pkgIndex.tcl
+$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in
+       @nmakehlp -s << $** > $@
+@PACKAGE_NAME@        $(PROJECT)
+@PACKAGE_VERSION@     $(DOTVERSION)
+@TCL_VERSION_REQ@     $(TCL_VERSION_REQ)
+@TCL_VERSION_DESIRED@ $(TCL_VERSION_DESIRED)
+@TCLOO_VERSION_REQ@   $(TCLOO_VERSION_REQ)
+@PKG_LIB_FILE@        $(PRJLIBNAME)
+@TCL_VERSION@         $(TCL_DOTVERSION)
+<<
+
+.PHONY: $(OUT_DIR)\tdbcConfig.sh
+
+# TBD - this (meaning using nmake builds for autoconf) does not really work
+# and never has. Perhaps it should be removed.
+$(OUT_DIR)\tdbcConfig.sh: $(ROOT)\tdbcConfig.sh.in
+       nmakehlp -s << $** > $@
+@PACKAGE_VERSION@            $(DOTVERSION)
+@PKG_LIB_FILE@               $(PRJLIBNAME)
+@tdbc_LIB_SPEC@              $(LIB_INSTALL_DIR)\$(PRJLIBNAME)
+@PKG_STUB_LIB_FILE@          $(PRJSTUBLIBNAME)
+@tdbc_BUILD_STUB_LIB_SPEC@   $(PRJSTUBLIB)
+@tdbc_STUB_LIB_SPEC@         $(LIB_INSTALL_DIR)\$(PRJSTUBLIBNAME)
+@tdbc_BUILD_STUB_LIB_PATH@   $(PRJSTUBLIB)
+@tdbc_STUB_LIB_PATH@         $(LIB_INSTALL_DIR)\$(PRJSTUBLIBNAME)
+@tdbc_SRC_DIR@               $(ROOT)
+@tdbc_INCLUDE_SPEC@          -I$(INCLUDE_INSTALL_DIR)
+@tdbc_BUILD_INCLUDE_SPEC@    -I$(GENERICDIR)
+@tdbc_LIB_DIR@               $(LIB_INSTALL_DIR)
+<<
+
+# TDBC has additional installation in addition to that provided by
+# the default installation targets.
+install: default-install-docs-n
+default-install-libraries: install-tdbc-extras
+
+install-tdbc-extras: $(OUT_DIR)\tdbcConfig.sh
+       @$(CPY) $(OUT_DIR)\tdbcConfig.sh "$(LIB_INSTALL_DIR)"
+
+
similarity index 80%
rename from pkgs/itcl4.1.0/win/nmakehlp.c
rename to pkgs/tdbc1.0.6/win/nmakehlp.c
index b1a1517..025bb99 100644 (file)
 #endif
 
 
-
 /* protos */
 
 static int CheckForCompilerFeature(const char *option);
-static int CheckForLinkerFeature(const char *option);
+static int CheckForLinkerFeature(const char **options, int count);
 static int IsIn(const char *string, const char *substring);
 static int SubstituteFile(const char *substs, const char *filename);
 static int QualifyPath(const char *path);
+static int LocateDependency(const char *keyfile);
 static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
 static DWORD WINAPI ReadFromPipe(LPVOID args);
 
@@ -74,6 +74,7 @@ main(
     char msg[300];
     DWORD dwWritten;
     int chars;
+    char *s;
 
     /*
      * Make sure children (cl.exe and link.exe) are kept quiet.
@@ -102,16 +103,16 @@ main(
            }
            return CheckForCompilerFeature(argv[2]);
        case 'l':
-           if (argc != 3) {
+           if (argc < 3) {
                chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -l <linker option>\n"
+                       "usage: %s -l <linker option> ?<mandatory option> ...?\n"
                        "Tests for whether link.exe supports an option\n"
                        "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
                WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
                        &dwWritten, NULL);
                return 2;
            }
-           return CheckForLinkerFeature(argv[2]);
+           return CheckForLinkerFeature(&argv[2], argc-2);
        case 'f':
            if (argc == 2) {
                chars = snprintf(msg, sizeof(msg) - 1,
@@ -153,8 +154,13 @@ main(
                    &dwWritten, NULL);
                return 0;
            }
-           printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'));
-           return 0;
+           s = GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0');
+           if (s && *s) {
+               printf("%s\n", s);
+               return 0;
+           } else
+               return 1; /* Version not found. Return non-0 exit code */
+
        case 'Q':
            if (argc != 3) {
                chars = snprintf(msg, sizeof(msg) - 1,
@@ -166,6 +172,18 @@ main(
                return 2;
            }
            return QualifyPath(argv[2]);
+
+       case 'L':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -L keypath\n"
+                   "Emit the fully qualified path of directory containing keypath\n"
+                   "exitcodes: 0 == success, 1 == not found, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return LocateDependency(argv[2]);
        }
     }
     chars = snprintf(msg, sizeof(msg) - 1,
@@ -313,7 +331,8 @@ CheckForCompilerFeature(
 \f
 static int
 CheckForLinkerFeature(
-    const char *option)
+    const char **options,
+    int count)
 {
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
@@ -322,7 +341,8 @@ CheckForLinkerFeature(
     char msg[300];
     BOOL ok;
     HANDLE hProcess, h, pipeThreads[2];
-    char cmdline[100];
+    int i;
+    char cmdline[255];
 
     hProcess = GetCurrentProcess();
 
@@ -368,7 +388,11 @@ CheckForLinkerFeature(
      * Append our option for testing.
      */
 
-    lstrcat(cmdline, option);
+    for (i = 0; i < count; i++) {
+       lstrcat(cmdline, " \"");
+       lstrcat(cmdline, options[i]);
+       lstrcat(cmdline, "\"");
+    }
 
     ok = CreateProcess(
            NULL,           /* Module name. */
@@ -433,7 +457,9 @@ CheckForLinkerFeature(
     return !(strstr(Out.buffer, "LNK1117") != NULL ||
            strstr(Err.buffer, "LNK1117") != NULL ||
            strstr(Out.buffer, "LNK4044") != NULL ||
-           strstr(Err.buffer, "LNK4044") != NULL);
+           strstr(Err.buffer, "LNK4044") != NULL ||
+           strstr(Out.buffer, "LNK4224") != NULL ||
+           strstr(Err.buffer, "LNK4224") != NULL);
 }
 \f
 static DWORD WINAPI
@@ -606,8 +632,8 @@ SubstituteFile(
        sp = fopen(substitutions, "rt");
        if (sp != NULL) {
            while (fgets(szBuffer, cbBuffer, sp) != NULL) {
-               char *ks, *ke, *vs, *ve;
-               ks = szBuffer;
+               unsigned char *ks, *ke, *vs, *ve;
+               ks = (unsigned char*)szBuffer;
                while (ks && *ks && isspace(*ks)) ++ks;
                ke = ks;
                while (ke && *ke && !isspace(*ke)) ++ke;
@@ -616,7 +642,7 @@ SubstituteFile(
                ve = vs;
                while (ve && *ve && !(*ve == '\r' || *ve == '\n')) ++ve;
                *ke = 0, *ve = 0;
-               list_insert(&substPtr, ks, vs);
+               list_insert(&substPtr, (char*)ks, (char*)vs);
            }
            fclose(sp);
        }
@@ -687,6 +713,97 @@ QualifyPath(
 }
 
 /*
+ * Implements LocateDependency for a single directory. See that command
+ * for an explanation.
+ * Returns 0 if found after printing the directory.
+ * Returns 1 if not found but no errors.
+ * Returns 2 on any kind of error
+ * Basically, these are used as exit codes for the process.
+ */
+static int LocateDependencyHelper(const char *dir, const char *keypath)
+{
+    HANDLE hSearch;
+    char path[MAX_PATH+1];
+    int dirlen, keylen, ret;
+    WIN32_FIND_DATA finfo;
+
+    if (dir == NULL || keypath == NULL)
+       return 2; /* Have no real error reporting mechanism into nmake */
+    dirlen = strlen(dir);
+    if ((dirlen + 3) > sizeof(path))
+       return 2;
+    strncpy(path, dir, dirlen);
+    strncpy(path+dirlen, "\\*", 3);    /* Including terminating \0 */
+    keylen = strlen(keypath);
+
+#if 0 /* This function is not available in Visual C++ 6 */
+    /*
+     * Use numerics 0 -> FindExInfoStandard,
+     * 1 -> FindExSearchLimitToDirectories, 
+     * as these are not defined in Visual C++ 6
+     */
+    hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0);
+#else
+    hSearch = FindFirstFile(path, &finfo);
+#endif
+    if (hSearch == INVALID_HANDLE_VALUE)
+       return 1; /* Not found */
+
+    /* Loop through all subdirs checking if the keypath is under there */
+    ret = 1; /* Assume not found */
+    do {
+       int sublen;
+       /*
+        * We need to check it is a directory despite the 
+        * FindExSearchLimitToDirectories in the above call. See SDK docs
+        */
+       if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
+           continue;
+       sublen = strlen(finfo.cFileName);
+       if ((dirlen+1+sublen+1+keylen+1) > sizeof(path))
+           continue;           /* Path does not fit, assume not matched */
+       strncpy(path+dirlen+1, finfo.cFileName, sublen);
+       path[dirlen+1+sublen] = '\\';
+       strncpy(path+dirlen+1+sublen+1, keypath, keylen+1);
+       if (PathFileExists(path)) {
+           /* Found a match, print to stdout */
+           path[dirlen+1+sublen] = '\0';
+           QualifyPath(path);
+           ret = 0;
+           break;
+       }
+    } while (FindNextFile(hSearch, &finfo));
+    FindClose(hSearch);
+    return ret;
+}
+
+/*
+ * LocateDependency --
+ *
+ *     Locates a dependency for a package.
+ *        keypath - a relative path within the package directory
+ *          that is used to confirm it is the correct directory.
+ *     The search path for the package directory is currently only
+ *      the parent and grandparent of the current working directory.
+ *      If found, the command prints 
+ *         name_DIRPATH=<full path of located directory>
+ *      and returns 0. If not found, does not print anything and returns 1.
+ */
+static int LocateDependency(const char *keypath)
+{
+    int i, ret;
+    static char *paths[] = {"..", "..\\..", "..\\..\\.."};
+    
+    for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) {
+       ret = LocateDependencyHelper(paths[i], keypath);
+       if (ret == 0)
+           return ret;
+    }
+    return ret;
+}
+
+
+/*
  * Local variables:
  *   mode: c
  *   c-basic-offset: 4
diff --git a/pkgs/tdbc1.0.6/win/rules-ext.vc b/pkgs/tdbc1.0.6/win/rules-ext.vc
new file mode 100644 (file)
index 0000000..ab86876
--- /dev/null
@@ -0,0 +1,118 @@
+# This file should only be included in makefiles for Tcl extensions,
+# NOT in the makefile for Tcl itself.
+
+!ifndef _RULES_EXT_VC
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+!if "$(PROJECT)" == "tcl"
+!error The rules-ext.vc file is not intended for Tcl itself.
+!endif
+
+# We extract version numbers using the nmakehlp program. For now use
+# the local copy of nmakehlp. Once we locate Tcl, we will use that
+# one if it is newer.
+!if [$(CC) -nologo "nmakehlp.c" -link -subsystem:console > nul]
+!endif
+
+# First locate the Tcl directory that we are working with.
+!ifdef TCLDIR
+
+_RULESDIR = $(TCLDIR:/=\)
+
+!else
+
+# If an installation path is specified, that is also the Tcl directory.
+# Also Tk never builds against an installed Tcl, it needs Tcl sources
+!if defined(INSTALLDIR) && "$(PROJECT)" != "tk"
+_RULESDIR=$(INSTALLDIR:/=\)
+!else
+# Locate Tcl sources
+!if [echo _RULESDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+_RULESDIR = ..\..\tcl
+!else
+!include nmakehlp.out
+!endif
+
+!endif # defined(INSTALLDIR)....
+
+!endif # ifndef TCLDIR
+
+# Now look for the targets.vc file under the Tcl root. Note we check this
+# file and not rules.vc because the latter also exists on older systems.
+!if exist("$(_RULESDIR)\lib\nmake\targets.vc") # Building against installed Tcl
+_RULESDIR = $(_RULESDIR)\lib\nmake
+!elseif exist("$(_RULESDIR)\win\targets.vc")   # Building against Tcl sources
+_RULESDIR = $(_RULESDIR)\win
+!else
+# If we have not located Tcl's targets file, most likely we are compiling
+# against an older version of Tcl and so must use our own support files.
+_RULESDIR = .
+!endif
+
+!if "$(_RULESDIR)" != "."
+# Potentially using Tcl's support files. If this extension has its own
+# nmake support files, need to compare the versions and pick newer.
+
+!if exist("rules.vc") # The extension has its own copy
+
+!if [echo TCL_RULES_MAJOR = \> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo TCL_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+
+!if [echo OUR_RULES_MAJOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo OUR_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+!include versions.vc
+# We have a newer version of the support files, use them
+!if ($(TCL_RULES_MAJOR) != $(OUR_RULES_MAJOR)) || ($(TCL_RULES_MINOR) < $(OUR_RULES_MINOR))
+_RULESDIR = .
+!endif
+
+!endif # if exist("rules.vc")
+
+!endif # if $(_RULESDIR) != "."
+
+# Let rules.vc know what copy of nmakehlp.c to use.
+NMAKEHLPC = $(_RULESDIR)\nmakehlp.c
+
+# Get rid of our internal defines before calling rules.vc
+!undef TCL_RULES_MAJOR
+!undef TCL_RULES_MINOR
+!undef OUR_RULES_MAJOR
+!undef OUR_RULES_MINOR
+
+!if exist("$(_RULESDIR)\rules.vc")
+!message *** Using $(_RULESDIR)\rules.vc
+!include "$(_RULESDIR)\rules.vc"
+!else
+!error *** Could not locate rules.vc in $(_RULESDIR)
+!endif
+
+!endif # _RULES_EXT_VC
\ No newline at end of file
diff --git a/pkgs/tdbc1.0.6/win/rules.vc b/pkgs/tdbc1.0.6/win/rules.vc
new file mode 100644 (file)
index 0000000..bbb412d
--- /dev/null
@@ -0,0 +1,1723 @@
+#------------------------------------------------------------- -*- makefile -*-
+# rules.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file does all the hard work in terms of parsing build options,
+# compiler switches, defining common targets and macros. The Tcl makefile
+# directly includes this. Extensions include it via "rules-ext.vc".
+#
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# Copyright (c) 2001-2003 David Gravereaux.
+# Copyright (c) 2003-2008 Patrick Thoyts
+# Copyright (c) 2017      Ashok P. Nadkarni
+#------------------------------------------------------------------------------
+
+!ifndef _RULES_VC
+_RULES_VC = 1
+
+# The following macros define the version of the rules.vc nmake build system
+# For modifications that are not backward-compatible, you *must* change
+# the major version.
+RULES_VERSION_MAJOR = 1
+RULES_VERSION_MINOR = 0
+
+# The PROJECT macro must be defined by parent makefile.
+!if "$(PROJECT)" == ""
+!error *** Error: Macro PROJECT not defined! Please define it before including rules.vc
+!endif
+
+!if "$(PRJ_PACKAGE_TCLNAME)" == ""
+PRJ_PACKAGE_TCLNAME = $(PROJECT)
+!endif
+
+# Also special case Tcl and Tk to save some typing later
+DOING_TCL = 0
+DOING_TK  = 0
+!if "$(PROJECT)" == "tcl"
+DOING_TCL = 1
+!elseif "$(PROJECT)" == "tk"
+DOING_TK = 1
+!endif
+
+!ifndef NEED_TK
+# Backwards compatibility
+!ifdef PROJECT_REQUIRES_TK
+NEED_TK = $(PROJECT_REQUIRES_TK)
+!else
+NEED_TK = 0
+!endif
+!endif
+
+!ifndef NEED_TCL_SOURCE
+NEED_TCL_SOURCE = 0
+!endif
+
+!ifdef NEED_TK_SOURCE
+!if $(NEED_TK_SOURCE)
+NEED_TK = 1
+!endif
+!else
+NEED_TK_SOURCE = 0
+!endif
+
+################################################################
+# Nmake is a pretty weak environment in syntax and capabilities
+# so this file is necessarily verbose. It's broken down into
+# the following parts.
+#
+# 0. Sanity check that compiler environment is set up and initialize
+#    any built-in settings from the parent makefile
+# 1. First define the external tools used for compiling, copying etc.
+#    as this is independent of everything else.
+# 2. Figure out our build structure in terms of the directory, whether
+#    we are building Tcl or an extension, etc.
+# 3. Determine the compiler and linker versions
+# 4. Build the nmakehlp helper application
+# 5. Determine the supported compiler options and features
+# 6. Parse the OPTS macro value for user-specified build configuration
+# 7. Parse the STATS macro value for statistics instrumentation
+# 8. Parse the CHECKS macro for additional compilation checks
+# 9. Extract Tcl, and possibly Tk, version numbers from the headers
+# 10. Based on this selected configuration, construct the output
+#     directory and file paths
+# 11. Construct the paths where the package is to be installed
+# 12. Set up the actual options passed to compiler and linker based
+#     on the information gathered above.
+# 13. Define some standard build targets and implicit rules. These may
+#     be optionally disabled by the parent makefile.
+# 14. (For extensions only.) Compare the configuration of the target
+#     Tcl and the extensions and warn against discrepancies.
+#
+# One final note about the macro names used. They are as they are
+# for historical reasons. We would like legacy extensions to
+# continue to work with this make include file so be wary of
+# changing them for consistency or clarity.
+
+# 0. Sanity check compiler environment
+
+# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
+# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
+
+!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)
+MSG = ^
+Visual C++ compiler environment not initialized.
+!error $(MSG)
+!endif
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+
+################################################################
+# 1. Define external programs being used
+
+#----------------------------------------------------------
+# Set the proper copy method to avoid overwrite questions
+# to the user when copying files and selecting the right
+# "delete all" method.
+#----------------------------------------------------------
+
+RMDIR  = rmdir /S /Q
+CPY    = xcopy /i /y >NUL
+CPYDIR  = xcopy /e /i /y >NUL
+COPY   = copy /y >NUL
+MKDIR   = mkdir
+
+######################################################################
+# 2. Figure out our build environment in terms of what we're building.
+#
+# (a) Tcl itself
+# (b) Tk
+# (c) a Tcl extension using libraries/includes from an *installed* Tcl
+# (d) a Tcl extension using libraries/includes from Tcl source directory
+#
+# This last is needed because some extensions still need
+# some Tcl interfaces that are not publicly exposed.
+#
+# The fragment will set the following macros:
+# ROOT - root of this module sources
+# COMPATDIR - source directory that holds compatibility sources
+# DOCDIR - source directory containing documentation files
+# GENERICDIR - platform-independent source directory
+# WINDIR - Windows-specific source directory
+# TESTDIR - directory containing test files
+# TOOLSDIR - directory containing build tools
+# _TCLDIR - root of the Tcl installation OR the Tcl sources. Not set
+#    when building Tcl itself.
+# _INSTALLDIR - native form of the installation path. For Tcl
+#    this will be the root of the Tcl installation. For extensions
+#    this will be the lib directory under the root.
+# TCLINSTALL  - set to 1 if _TCLDIR refers to
+#    headers and libraries from an installed Tcl, and 0 if built against
+#    Tcl sources. Not set when building Tcl itself. Yes, not very well
+#    named.
+# _TCL_H - native path to the tcl.h file
+#
+# If Tk is involved, also sets the following
+# _TKDIR - native form Tk installation OR Tk source. Not set if building
+#    Tk itself.
+# TKINSTALL - set 1 if _TKDIR refers to installed Tk and 0 if Tk sources
+# _TK_H - native path to the tk.h file
+
+# Root directory for sources and assumed subdirectories
+ROOT = $(MAKEDIR)\..
+# The following paths CANNOT have spaces in them as they appear on the
+# left side of implicit rules.
+!ifndef COMPATDIR
+COMPATDIR      = $(ROOT)\compat
+!endif
+!ifndef DOCDIR
+DOCDIR         = $(ROOT)\doc
+!endif
+!ifndef GENERICDIR
+GENERICDIR     = $(ROOT)\generic
+!endif
+!ifndef TOOLSDIR
+TOOLSDIR       = $(ROOT)\tools
+!endif
+!ifndef TESTDIR
+TESTDIR        = $(ROOT)\tests
+!endif
+!ifndef LIBDIR
+!if exist("$(ROOT)\library")
+LIBDIR          = $(ROOT)\library
+!else
+LIBDIR          = $(ROOT)\lib
+!endif
+!endif
+!ifndef DEMODIR
+!if exist("$(LIBDIR)\demos")
+DEMODIR                = $(LIBDIR)\demos
+!else
+DEMODIR                = $(ROOT)\demos
+!endif
+!endif # ifndef DEMODIR
+# Do NOT enclose WINDIR in a !ifndef because Windows always defines
+# WINDIR env var to point to c:\windows!
+# TBD - This is a potentially dangerous conflict, rename WINDIR to
+# something else
+WINDIR         = $(ROOT)\win
+
+!ifndef RCDIR
+!if exist("$(WINDIR)\rc")
+RCDIR           = $(WINDIR)\rc
+!else
+RCDIR           = $(WINDIR)
+!endif
+!endif
+RCDIR = $(RCDIR:/=\)
+
+# The target directory where the built packages and binaries will be installed.
+# INSTALLDIR is the (optional) path specified by the user.
+# _INSTALLDIR is INSTALLDIR using the backslash separator syntax
+!ifdef INSTALLDIR
+### Fix the path separators.
+_INSTALLDIR    = $(INSTALLDIR:/=\)
+!else
+### Assume the normal default.
+_INSTALLDIR    = $(HOMEDRIVE)\Tcl
+!endif
+
+!if $(DOING_TCL)
+
+# BEGIN Case 2(a) - Building Tcl itself
+
+# Only need to define _TCL_H
+_TCL_H = ..\generic\tcl.h
+
+# END Case 2(a) - Building Tcl itself
+
+!elseif $(DOING_TK)
+
+# BEGIN Case 2(b) - Building Tk
+
+TCLINSTALL = 0 # Tk always builds against Tcl source, not an installed Tcl
+!if "$(TCLDIR)" == ""
+!if [echo TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+!endif # TCLDIR == ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+_TCL_H  = $(_TCLDIR)\generic\tcl.h
+!if !exist("$(_TCL_H)")
+!error Could not locate tcl.h. Please set the TCLDIR macro to point to the Tcl *source* directory.
+!endif
+
+_TK_H = ..\generic\tk.h
+
+# END Case 2(b) - Building Tk
+
+!else
+
+# BEGIN Case 2(c) or (d) - Building an extension other than Tk
+
+# If command line has specified Tcl location through TCLDIR, use it
+# else default to the INSTALLDIR setting
+!if "$(TCLDIR)" != ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+!if exist("$(_TCLDIR)\include\tcl.h") # Case 2(c) with TCLDIR defined
+TCLINSTALL     = 1
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+!elseif exist("$(_TCLDIR)\generic\tcl.h") # Case 2(d) with TCLDIR defined
+TCLINSTALL     = 0
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+!endif
+
+!else  #  # Case 2(c) for extensions with TCLDIR undefined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tcl.h") && !$(NEED_TCL_SOURCE)
+
+TCLINSTALL     = 1
+TCLDIR          = $(_INSTALLDIR)\..
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TCLDIR                = $(_INSTALLDIR)\..
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+
+!else # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!if [echo _TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+TCLINSTALL      = 0
+TCLDIR         = $(_TCLDIR)
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+
+!endif # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!endif # TCLDIR
+
+!ifndef _TCL_H
+MSG =^
+Failed to find tcl.h. The TCLDIR macro is set incorrectly or is not set and default path does not contain tcl.h.
+!error $(MSG)
+!endif
+
+# Now do the same to locate Tk headers and libs if project requires Tk
+!if $(NEED_TK)
+
+!if "$(TKDIR)" != ""
+
+_TKDIR = $(TKDIR:/=\)
+!if exist("$(_TKDIR)\include\tk.h")
+TKINSTALL      = 1
+_TK_H          = $(_TKDIR)\include\tk.h
+!elseif exist("$(_TKDIR)\generic\tk.h")
+TKINSTALL      = 0
+_TK_H          = $(_TKDIR)\generic\tk.h
+!endif
+
+!else # TKDIR not defined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+TKINSTALL      = 1
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TKDIR         = $(_INSTALLDIR)\..
+_TK_H          = $(_TKDIR)\include\tk.h
+TKDIR          = $(_TKDIR)
+
+!else # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!if [echo _TKDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tk.h >> nmakehlp.out]
+!error *** Could not locate Tk source directory.
+!endif
+!include nmakehlp.out
+TKINSTALL      = 0
+TKDIR          = $(_TKDIR)
+_TK_H          = $(_TKDIR)\generic\tk.h
+
+!endif # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!endif # TKDIR
+
+!ifndef _TK_H
+MSG =^
+Failed to find tk.h. The TKDIR macro is set incorrectly or is not set and default path does not contain tk.h.
+!error $(MSG)
+!endif
+
+!endif # NEED_TK
+
+!if $(NEED_TCL_SOURCE) && $(TCLINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tcl.^
+*** Please set the TCLDIR macro to point to the Tcl sources.
+!error $(MSG)
+!endif
+
+!if $(NEED_TK_SOURCE)
+!if $(TKINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tk.^
+*** Please set the TKDIR macro to point to the Tk sources.
+!error $(MSG)
+!endif
+!endif
+
+
+# If INSTALLDIR set to tcl installation root dir then reset to the
+# lib dir for installing extensions 
+!if exist("$(_INSTALLDIR)\include\tcl.h")
+_INSTALLDIR=$(_INSTALLDIR)\lib
+!endif
+
+# END Case 2(c) or (d) - Building an extension
+!endif # if $(DOING_TCL)
+
+################################################################
+# 3. Determine compiler version and architecture
+# In this section, we figure out the compiler version and the
+# architecture for which we are building. This sets the
+# following macros:
+# VCVERSION - the internal compiler version as 1200, 1400, 1910 etc.
+#     This is also printed by the compiler in dotted form 19.10 etc.
+# VCVER - the "marketing version", for example Visual C++ 6 for internal
+#     compiler version 1200. This is kept only for legacy reasons as it
+#     does not make sense for recent Microsoft compilers. Only used for
+#     output directory names.
+# ARCH - set to IX86 or AMD64 depending on 32- or 64-bit target
+# NATIVE_ARCH - set to IX86 or AMD64 for the host machine
+# MACHINE - same as $(ARCH) - legacy
+# _VC_MANIFEST_EMBED_{DLL,EXE} - commands for embedding a manifest if needed
+# CFG_ENCODING - set to an character encoding.
+#   TBD - this is passed to compiler as TCL_CFGVAL_ENCODING but can't
+#   see where it is used
+
+cc32           = $(CC)   # built-in default.
+link32         = link
+lib32          = lib
+rc32           = $(RC)   # built-in default.
+
+#----------------------------------------------------------------
+# Figure out the compiler architecture and version by writing
+# the C macros to a file, preprocessing them with the C
+# preprocessor and reading back the created file
+
+_HASH=^#
+_VC_MANIFEST_EMBED_EXE=
+_VC_MANIFEST_EMBED_DLL=
+VCVER=0
+!if ![echo VCVERSION=_MSC_VER > vercl.x] \
+    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
+    && ![echo ARCH=IX86 >> vercl.x] \
+    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
+    && ![echo ARCH=AMD64 >> vercl.x] \
+    && ![echo $(_HASH)endif >> vercl.x] \
+    && ![$(cc32) -nologo -TC -P vercl.x 2>NUL]
+!include vercl.i
+!if $(VCVERSION) < 1900
+!if ![echo VCVER= ^\> vercl.vc] \
+    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
+!include vercl.vc
+!endif
+!else
+# The simple calculation above does not apply to new Visual Studio releases
+# Keep the compiler version in its native form.
+VCVER = $(VCVERSION)
+!endif
+!endif
+
+!if ![del 2>NUL /q/f vercl.x vercl.i vercl.vc]
+!endif
+
+#----------------------------------------------------------------
+# The MACHINE macro is used by legacy makefiles so set it as well
+!ifdef MACHINE
+!if "$(MACHINE)" == "x86"
+!undef MACHINE
+MACHINE = IX86
+!elseif "$(MACHINE)" == "x64"
+!undef MACHINE
+MACHINE = AMD64
+!endif
+!if "$(MACHINE)" != "$(ARCH)"
+!error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH).
+!endif
+!else
+MACHINE=$(ARCH)
+!endif
+
+#------------------------------------------------------------
+# Figure out the *host* architecture by reading the registry
+
+!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]
+NATIVE_ARCH=IX86
+!else
+NATIVE_ARCH=AMD64
+!endif
+
+# Since MSVC8 we must deal with manifest resources.
+!if $(VCVERSION) >= 1400
+_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1
+_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2
+!endif
+
+!ifndef CFG_ENCODING
+CFG_ENCODING   = \"cp1252\"
+!endif
+
+################################################################
+# 4. Build the nmakehlp program
+# This is a helper app we need to overcome nmake's limiting
+# environment. We will call out to it to get various bits of
+# information about supported compiler options etc.
+#
+# Tcl itself will always use the nmakehlp.c program which is
+# in its own source. This is the "master" copy and kept updated.
+#
+# Extensions built against an installed Tcl will use the installed
+# copy of Tcl's nmakehlp.c if there is one and their own version
+# otherwise. In the latter case, they would also be using their own
+# rules.vc. Note that older versions of Tcl do not install nmakehlp.c
+# or rules.vc.
+#
+# Extensions built against Tcl sources will use the one from the Tcl source.
+#
+# When building an extension using a sufficiently new version of Tcl,
+# rules-ext.vc will define NMAKEHLPC appropriately to point to the
+# copy of nmakehlp.c to be used.
+
+!ifndef NMAKEHLPC
+# Default to the one in the current directory (the extension's own nmakehlp.c)
+NMAKEHLPC = nmakehlp.c
+
+!if !$(DOING_TCL)
+!if $(TCLINSTALL)
+!if exist("$(_TCLDIR)\lib\nmake\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\lib\nmake\nmakehlp.c
+!endif
+!else # ! $(TCLINSTALL)
+!if exist("$(_TCLDIR)\win\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\win\nmakehlp.c
+!endif
+!endif # $(TCLINSTALL)
+!endif # !$(DOING_TCL)
+
+!endif # NMAKEHLPC
+
+# We always build nmakehlp even if it exists since we do not know
+# what source it was built from.
+!message *** Using $(NMAKEHLPC)
+!if [$(cc32) -nologo "$(NMAKEHLPC)" -link -subsystem:console > nul]
+!endif
+
+################################################################
+# 5. Test for compiler features
+# Visual C++ compiler options have changed over the years. Check
+# which options are supported by the compiler in use.
+#
+# The following macros are set:
+# OPTIMIZATIONS - the compiler flags to be used for optimized builds
+# DEBUGFLAGS - the compiler flags to be used for debug builds
+# LINKERFLAGS - Flags passed to the linker 
+#
+# Note that these are the compiler settings *available*, not those
+# that will be *used*. The latter depends on the OPTS macro settings
+# which we have not yet parsed.
+#
+# Also note that some of the flags in OPTIMIZATIONS are not really
+# related to optimization. They are placed there only for legacy reasons
+# as some extensions expect them to be included in that macro.
+
+# -Op improves float consistency. Note only needed for older compilers
+# Newer compilers do not need or support this option.
+!if [nmakehlp -c -Op]
+FPOPTS  = -Op
+!endif
+
+# Strict floating point semantics - present in newer compilers in lieu of -Op
+!if [nmakehlp -c -fp:strict]
+FPOPTS  = $(FPOPTS) -fp:strict
+!endif
+
+!if "$(MACHINE)" == "IX86"
+### test for pentium errata
+!if [nmakehlp -c -QI0f]
+!message *** Compiler has 'Pentium 0x0f fix'
+FPOPTS  = $(FPOPTS) -QI0f
+!else
+!message *** Compiler does not have 'Pentium 0x0f fix'
+!endif
+!endif
+
+### test for optimizations
+# /O2 optimization includes /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy as per
+# documentation. Note we do NOT want /Gs as that inserts a _chkstk
+# stack probe at *every* function entry, not just those with more than
+# a page of stack allocation resulting in a performance hit.  However,
+# /O2 documentation is misleading as its stack probes are simply the
+# default page size locals allocation probes and not what is implied
+# by an explicit /Gs option.
+
+OPTIMIZATIONS = $(FPOPTS)
+
+!if [nmakehlp -c -O2]
+!message *** Compiler has 'Optimizations'
+OPTIMIZING = 1
+OPTIMIZATIONS   = $(OPTIMIZATIONS) -O2
+!else
+# Legacy, really. All modern compilers support this
+!message *** Compiler does not have 'Optimizations'
+OPTIMIZING = 0
+!endif
+
+# Checks for buffer overflows in local arrays
+!if [nmakehlp -c -GS]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS
+!endif
+
+# Link time optimization. Note that this option (potentially) makes
+# generated libraries only usable by the specific VC++ version that
+# created it. Requires /LTCG linker option
+!if [nmakehlp -c -GL]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL
+CC_GL_OPT_ENABLED = 1
+!else
+# In newer compilers -GL and -YX are incompatible.
+!if [nmakehlp -c -YX]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX
+!endif
+!endif # [nmakehlp -c -GL]
+
+DEBUGFLAGS     = $(FPOPTS)
+
+# Run time error checks. Not available or valid in a release, non-debug build
+# RTC is for modern compilers, -GZ is legacy
+!if [nmakehlp -c -RTC1]
+DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1
+!elseif [nmakehlp -c -GZ]
+DEBUGFLAGS     = $(DEBUGFLAGS) -GZ
+!endif
+
+#----------------------------------------------------------------
+# Linker flags
+
+# LINKER_TESTFLAGS are for internal use when we call nmakehlp to test
+# if the linker supports a specific option. Without these flags link will
+# return "LNK1561: entry point must be defined" error compiling from VS-IDE:
+# They are not passed through to the actual application / extension
+# link rules.
+!ifndef LINKER_TESTFLAGS
+LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmakehlp.out
+!endif
+
+LINKERFLAGS     =
+
+# If compiler has enabled link time optimization, linker must too with -ltcg
+!ifdef CC_GL_OPT_ENABLED
+!if [nmakehlp -l -ltcg $(LINKER_TESTFLAGS)]
+LINKERFLAGS     = $(LINKERFLAGS) -ltcg
+!endif
+!endif
+
+########################################################################
+# 6. Parse the OPTS macro to work out the requested build configuration.
+# Based on this, we will construct the actual switches to be passed to the
+# compiler and linker using the macros defined in the previous section.
+# The following macros are defined by this section based on OPTS
+# STATIC_BUILD - 0 -> Tcl is to be built as a shared library
+#                1 -> build as a static library and shell
+# TCL_THREADS - legacy but always 1 on Windows since winsock requires it.
+# DEBUG - 1 -> debug build, 0 -> release builds
+# SYMBOLS - 1 -> generate PDB's, 0 -> no PDB's
+# PROFILE - 1 -> generate profiling info, 0 -> no profiling
+# PGO     - 1 -> profile based optimization, 0 -> no
+# MSVCRT  - 1 -> link to dynamic C runtime even when building static Tcl build
+#           0 -> link to static C runtime for static Tcl build.
+#           Does not impact shared Tcl builds (STATIC_BUILD == 0)
+# TCL_USE_STATIC_PACKAGES - 1 -> statically link the registry and dde extensions
+#           in the Tcl shell. 0 -> keep them as shared libraries
+#           Does not impact shared Tcl builds.
+# USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation.
+#           0 -> Use the non-thread allocator.
+# UNCHECKED - 1 -> when doing a debug build with symbols, use the release
+#           C runtime, 0 -> use the debug C runtime.
+# USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking
+# CONFIG_CHECK - 1 -> check current build configuration against Tcl
+#           configuration (ignored for Tcl itself)
+# Further, LINKERFLAGS are modified based on above.
+
+# Default values for all the above
+STATIC_BUILD   = 0
+TCL_THREADS    = 1
+DEBUG          = 0
+SYMBOLS                = 0
+PROFILE                = 0
+PGO            = 0
+MSVCRT         = 1
+TCL_USE_STATIC_PACKAGES        = 0
+USE_THREAD_ALLOC = 1
+UNCHECKED      = 0
+CONFIG_CHECK    = 1
+!if $(DOING_TCL)
+USE_STUBS       = 0
+!else
+USE_STUBS       = 1
+!endif
+
+# If OPTS is not empty AND does not contain "none" which turns off all OPTS
+# set the above macros based on OPTS content
+!if "$(OPTS)" != "" && ![nmakehlp -f "$(OPTS)" "none"]
+
+# OPTS are specified, parse them
+
+!if [nmakehlp -f $(OPTS) "static"]
+!message *** Doing static
+STATIC_BUILD   = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "nostubs"]
+!message *** Not using stubs
+USE_STUBS      = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nomsvcrt"]
+!message *** Doing nomsvcrt
+MSVCRT         = 0
+!else
+!if [nmakehlp -f $(OPTS) "msvcrt"]
+!message *** Doing msvcrt
+MSVCRT         = 1
+!else
+!if !$(STATIC_BUILD)
+MSVCRT         = 1
+!else
+MSVCRT         = 0
+!endif
+!endif
+!endif # [nmakehlp -f $(OPTS) "nomsvcrt"]
+
+!if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD)
+!message *** Doing staticpkg
+TCL_USE_STATIC_PACKAGES        = 1
+!else
+TCL_USE_STATIC_PACKAGES        = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nothreads"]
+!message *** Compile explicitly for non-threaded tcl
+TCL_THREADS    = 0
+USE_THREAD_ALLOC= 0
+!else
+TCL_THREADS    = 1
+USE_THREAD_ALLOC= 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "symbols"]
+!message *** Doing symbols
+DEBUG          = 1
+!else
+DEBUG          = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pdbs"]
+!message *** Doing pdbs
+SYMBOLS                = 1
+!else
+SYMBOLS                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "profile"]
+!message *** Doing profile
+PROFILE                = 1
+!else
+PROFILE                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pgi"]
+!message *** Doing profile guided optimization instrumentation
+PGO            = 1
+!elseif [nmakehlp -f $(OPTS) "pgo"]
+!message *** Doing profile guided optimization
+PGO            = 2
+!else
+PGO            = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "loimpact"]
+!message *** Warning: ignoring option "loimpact" - deprecated on modern Windows.
+!endif
+
+# TBD - should get rid of this option
+!if [nmakehlp -f $(OPTS) "thrdalloc"]
+!message *** Doing thrdalloc
+USE_THREAD_ALLOC = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "tclalloc"]
+USE_THREAD_ALLOC = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "unchecked"]
+!message *** Doing unchecked
+UNCHECKED = 1
+!else
+UNCHECKED = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "noconfigcheck"]
+CONFIG_CHECK = 1
+!else
+CONFIG_CHECK = 0
+!endif
+
+!endif # "$(OPTS)" != ""  && ... parsing of OPTS
+
+# Set linker flags based on above
+
+!if $(PGO) > 1
+!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!elseif $(PGO) > 0
+!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!endif
+
+################################################################
+# 7. Parse the STATS macro to configure code instrumentation
+# The following macros are set by this section:
+# TCL_MEM_DEBUG - 1 -> enables memory allocation instrumentation
+#                 0 -> disables
+# TCL_COMPILE_DEBUG - 1 -> enables byte compiler logging
+#                     0 -> disables
+
+# Default both are off
+TCL_MEM_DEBUG      = 0
+TCL_COMPILE_DEBUG   = 0
+
+!if "$(STATS)" != "" && ![nmakehlp -f "$(STATS)" "none"]
+
+!if [nmakehlp -f $(STATS) "memdbg"]
+!message *** Doing memdbg
+TCL_MEM_DEBUG      = 1
+!else
+TCL_MEM_DEBUG      = 0
+!endif
+
+!if [nmakehlp -f $(STATS) "compdbg"]
+!message *** Doing compdbg
+TCL_COMPILE_DEBUG   = 1
+!else
+TCL_COMPILE_DEBUG   = 0
+!endif
+
+!endif
+
+####################################################################
+# 8. Parse the CHECKS macro to configure additional compiler checks
+# The following macros are set by this section:
+# WARNINGS - compiler switches that control the warnings level
+# TCL_NO_DEPRECATED - 1 -> disable support for deprecated functions
+#                     0 -> enable deprecated functions
+
+# Defaults - Permit deprecated functions and warning level 3
+TCL_NO_DEPRECATED          = 0
+WARNINGS                   = -W3
+
+!if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"]
+
+!if [nmakehlp -f $(CHECKS) "nodep"]
+!message *** Doing nodep check
+TCL_NO_DEPRECATED          = 1
+!endif
+
+!if [nmakehlp -f $(CHECKS) "fullwarn"]
+!message *** Doing full warnings check
+WARNINGS                   = -W4
+!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)]
+LINKERFLAGS                = $(LINKERFLAGS) -warn:3
+!endif
+!endif
+
+!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]
+!message *** Doing 64bit portability warnings
+WARNINGS                   = $(WARNINGS) -Wp64
+!endif
+
+!endif
+
+################################################################
+# 9. Extract various version numbers
+# For Tcl and Tk, version numbers are extracted from tcl.h and tk.h
+# respectively. For extensions, versions are extracted from the
+# configure.in or configure.ac from the TEA configuration if it
+# exists, and unset otherwise.
+# Sets the following macros:
+# TCL_MAJOR_VERSION
+# TCL_MINOR_VERSION
+# TCL_PATCH_LEVEL
+# TCL_VERSION
+# TK_MAJOR_VERSION
+# TK_MINOR_VERSION
+# TK_PATCH_LEVEL
+# TK_VERSION
+# DOTVERSION - set as (for example) 2.5
+# VERSION - set as (for example 25)
+#--------------------------------------------------------------
+
+!if [echo REM = This file is generated from rules.vc > versions.vc]
+!endif
+!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]
+!endif
+
+!if defined(_TK_H)
+!if [echo TK_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]
+!endif
+!endif # _TK_H
+
+!include versions.vc
+
+TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)
+TCL_DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!if defined(_TK_H)
+TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)
+TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+
+# Set DOTVERSION and VERSION
+!if $(DOING_TCL)
+
+DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+VERSION = $(TCL_VERSION)
+
+!elseif $(DOING_TK)
+
+DOTVERSION = $(TK_DOTVERSION)
+VERSION = $(TK_VERSION)
+
+!else # Doing a non-Tk extension
+
+# If parent makefile has not defined DOTVERSION, try to get it from TEA
+# first from a configure.in file, and then from configure.ac
+!ifndef DOTVERSION
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.in ^[$(PROJECT)^] >> versions.vc]
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.ac ^[$(PROJECT)^] >> versions.vc]
+!error *** Could not figure out extension version. Please define DOTVERSION in parent makefile before including rules.vc.
+!endif
+!endif
+!include versions.vc
+!endif # DOTVERSION
+VERSION         = $(DOTVERSION:.=)
+
+!endif # $(DOING_TCL) ... etc.
+
+################################################################
+# 10. Construct output directory and file paths
+# Figure-out how to name our intermediate and output directories.
+# In order to avoid inadvertent mixing of object files built using
+# different compilers, build configurations etc.,
+#
+# Naming convention (suffixes):
+#   t = full thread support.
+#   s = static library (as opposed to an import library)
+#   g = linked to the debug enabled C run-time.
+#   x = special static build when it links to the dynamic C run-time.
+#
+# The following macros are set in this section:
+# SUFX - the suffix to use for binaries based on above naming convention
+# BUILDDIRTOP - the toplevel default output directory
+#      is of the form {Release,Debug}[_AMD64][_COMPILERVERSION]
+# TMP_DIR - directory where object files are created
+# OUT_DIR - directory where output executables are created
+# Both TMP_DIR and OUT_DIR are defaulted only if not defined by the
+# parent makefile (or command line). The default values are
+# based on BUILDDIRTOP.
+# STUBPREFIX - name of the stubs library for this project
+# PRJIMPLIB - output path of the generated project import library
+# PRJLIBNAME - name of generated project library
+# PRJLIB     - output path of generated project library
+# PRJSTUBLIBNAME - name of the generated project stubs library
+# PRJSTUBLIB - output path of the generated project stubs library
+# RESFILE - output resource file (only if not static build)
+
+SUFX       = tsgx
+
+!if $(DEBUG)
+BUILDDIRTOP = Debug
+!else
+BUILDDIRTOP = Release
+!endif
+
+!if "$(MACHINE)" != "IX86"
+BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)
+!endif
+!if $(VCVER) > 6
+BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)
+!endif
+
+!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)
+SUFX       = $(SUFX:g=)
+!endif
+
+TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
+
+!if !$(STATIC_BUILD)
+TMP_DIRFULL = $(TMP_DIRFULL:Static=)
+SUFX       = $(SUFX:s=)
+EXT        = dll
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!else
+TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
+EXT        = lib
+!if !$(MSVCRT)
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!endif
+!endif
+
+!if !$(TCL_THREADS)
+TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)
+SUFX       = $(SUFX:t=)
+!endif
+
+!ifndef TMP_DIR
+TMP_DIR            = $(TMP_DIRFULL)
+!ifndef OUT_DIR
+OUT_DIR            = .\$(BUILDDIRTOP)
+!endif
+!else
+!ifndef OUT_DIR
+OUT_DIR            = $(TMP_DIR)
+!endif
+!endif
+
+# Relative paths -> absolute
+!if [echo OUT_DIR = \> nmakehlp.out] \
+   || [nmakehlp -Q "$(OUT_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path OUT_DIR=$(OUT_DIR)
+!endif
+!if [echo TMP_DIR = \>> nmakehlp.out] \
+   || [nmakehlp -Q "$(TMP_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path TMP_DIR=$(TMP_DIR)
+!endif
+!include nmakehlp.out
+
+# The name of the stubs library for the project being built
+STUBPREFIX      = $(PROJECT)stub
+
+# Set up paths to various Tcl executables and libraries needed by extensions
+!if $(DOING_TCL)
+
+TCLSHNAME       = $(PROJECT)sh$(TCL_VERSION)$(SUFX).exe
+TCLSH          = $(OUT_DIR)\$(TCLSHNAME)
+TCLIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+TCLLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+TCLLIB         = $(OUT_DIR)\$(TCLLIBNAME)
+
+TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+TCLSTUBLIB     = $(OUT_DIR)\$(TCLSTUBLIBNAME)
+TCL_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+
+TCLSH          = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist("$(TCLSH)") && $(TCL_THREADS)
+TCLSH           = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\lib
+TCLREGLIB      = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target
+TCL_INCLUDES    = -I"$(_TCLDIR)\include"
+
+!else # Building against Tcl sources
+
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist($(TCLSH)) && $(TCL_THREADS)
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\library
+TCLREGLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = $(_TCLDIR)\tools
+TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"
+
+!endif # TCLINSTALL
+
+tcllibs = "$(TCLSTUBLIB)" "$(TCLIMPLIB)"
+
+!endif # $(DOING_TCL)
+
+# We need a tclsh that will run on the host machine as part of the build.
+# IX86 runs on all architectures.
+!ifndef TCLSH_NATIVE
+!if "$(MACHINE)" == "IX86" || "$(MACHINE)" == "$(NATIVE_ARCH)"
+TCLSH_NATIVE   = $(TCLSH)
+!else
+!error You must explicitly set TCLSH_NATIVE for cross-compilation
+!endif
+!endif
+
+# Do the same for Tk and Tk extensions that require the Tk libraries
+!if $(DOING_TK) || $(NEED_TK)
+WISHNAMEPREFIX = wish
+WISHNAME = $(WISHNAMEPREFIX)$(TK_VERSION)$(SUFX).exe
+TKLIBNAME      = $(PROJECT)$(TK_VERSION)$(SUFX).$(EXT)
+TKSTUBLIBNAME  = tkstub$(TK_VERSION).lib
+TKIMPLIBNAME   = tk$(TK_VERSION)$(SUFX).lib
+
+!if $(DOING_TK)
+WISH           = $(OUT_DIR)\$(WISHNAME)
+TKSTUBLIB      = $(OUT_DIR)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(OUT_DIR)\$(TKIMPLIBNAME)
+TKLIB          = $(OUT_DIR)\$(TKLIBNAME)
+TK_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # effectively NEED_TK
+
+!if $(TKINSTALL) # Building against installed Tk
+WISH           = $(_TKDIR)\bin\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\lib\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\lib\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\include"
+!else # Building against Tk sources
+WISH           = $(_TKDIR)\win\$(BUILDDIRTOP)\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
+!endif # TKINSTALL
+tklibs = "$(TKSTUBLIB)" "$(TKIMPLIB)"
+
+!endif # $(DOING_TK)
+!endif # $(DOING_TK) || $(NEED_TK)
+
+# Various output paths
+PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)
+
+PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)
+
+# If extension parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+!if !$(DOING_TCL) && !$(DOING_TK) && !$(STATIC_BUILD)
+!ifdef RCFILE
+RESFILE = $(TMP_DIR)\$(RCFILE:.rc=.res)
+!else
+RESFILE = $(TMP_DIR)\$(PROJECT).res
+!endif
+!endif
+
+###################################################################
+# 11. Construct the paths for the installation directories
+# The following macros get defined in this section:
+# LIB_INSTALL_DIR - where libraries should be installed
+# BIN_INSTALL_DIR - where the executables should be installed
+# DOC_INSTALL_DIR - where documentation should be installed
+# SCRIPT_INSTALL_DIR - where scripts should be installed
+# INCLUDE_INSTALL_DIR - where C include files should be installed
+# DEMO_INSTALL_DIR - where demos should be installed
+# PRJ_INSTALL_DIR - where package will be installed (not set for tcl and tk)
+
+!if $(DOING_TCL) || $(DOING_TK)
+LIB_INSTALL_DIR                = $(_INSTALLDIR)\lib
+BIN_INSTALL_DIR                = $(_INSTALLDIR)\bin
+DOC_INSTALL_DIR                = $(_INSTALLDIR)\doc
+!if $(DOING_TCL)
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!else # DOING_TK
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+DEMO_INSTALL_DIR       = $(SCRIPT_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\include
+
+!else # extension other than Tk
+
+PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)
+LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)
+DEMO_INSTALL_DIR       = $(PRJ_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include
+
+!endif
+
+###################################################################
+# 12. Set up actual options to be passed to the compiler and linker
+# Now we have all the information we need, set up the actual flags and
+# options that we will pass to the compiler and linker. The main
+# makefile should use these in combination with whatever other flags
+# and switches are specific to it.
+# The following macros are defined, names are for historical compatibility:
+# OPTDEFINES - /Dxxx C macro flags based on user-specified OPTS
+# COMPILERFLAGS - /Dxxx C macro flags independent of any configuration opttions
+# crt - Compiler switch that selects the appropriate C runtime
+# cdebug - Compiler switches related to debug AND optimizations
+# cwarn - Compiler switches that set warning levels
+# cflags - complete compiler switches (subsumes cdebug and cwarn)
+# ldebug - Linker switches controlling debug information and optimization
+# lflags - complete linker switches (subsumes ldebug) except subsystem type
+# dlllflags - complete linker switches to build DLLs (subsumes lflags)
+# conlflags - complete linker switches for console program (subsumes lflags)
+# guilflags - complete linker switches for GUI program (subsumes lflags)
+# baselibs - minimum Windows libraries required. Parent makefile can
+#    define PRJ_LIBS before including rules.rc if additional libs are needed
+
+OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS
+
+!if $(TCL_MEM_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG
+!endif
+!if $(TCL_COMPILE_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
+!endif
+!if $(TCL_THREADS)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1
+!if $(USE_THREAD_ALLOC)
+OPTDEFINES     = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1
+!endif
+!endif
+!if $(STATIC_BUILD)
+OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD
+!endif
+!if $(TCL_NO_DEPRECATED)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED
+!endif
+
+!if $(USE_STUBS)
+# Note we do not define USE_TCL_STUBS even when building tk since some
+# test targets in tk do not use stubs
+!if ! $(DOING_TCL)
+USE_STUBS_DEFS  = -DUSE_TCL_STUBS -DUSE_TCLOO_STUBS
+!if $(NEED_TK)
+USE_STUBS_DEFS  = $(USE_STUBS_DEFS) -DUSE_TK_STUBS
+!endif
+!endif
+!endif # USE_STUBS
+
+!if !$(DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DNDEBUG
+!if $(OPTIMIZING)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
+!endif
+!endif
+!if $(PROFILE)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED
+!endif
+!if "$(MACHINE)" == "AMD64"
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT
+!endif
+!if $(VCVERSION) < 1300
+OPTDEFINES     = $(OPTDEFINES) -DNO_STRTOI64
+!endif
+
+# _ATL_XP_TARGETING - Newer SDK's need this to build for XP
+COMPILERFLAGS  = /D_ATL_XP_TARGETING
+
+# Following is primarily for the benefit of extensions. Tcl 8.5 builds
+# Tcl without /DUNICODE, while 8.6 builds with it defined. When building
+# an extension, it is advisable (but not mandated) to use the same Windows
+# API as the Tcl build. This is accordingly defaulted below. A particular
+# extension can override this by pre-definining USE_WIDECHAR_API.
+!ifndef USE_WIDECHAR_API
+!if $(TCL_VERSION) > 85
+USE_WIDECHAR_API = 1
+!else
+USE_WIDECHAR_API = 0
+!endif
+!endif
+
+!if $(USE_WIDECHAR_API)
+COMPILERFLAGS = $(COMPILERFLAGS) /DUNICODE /D_UNICODE 
+!endif
+
+# Like the TEA system only set this non empty for non-Tk extensions
+# Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME
+# so we pass both
+!if !$(DOING_TCL) && !$(DOING_TK)
+PKGNAMEFLAGS = -DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_TCLNAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \
+               -DMODULE_SCOPE=extern 
+!endif
+
+# crt picks the C run time based on selected OPTS
+!if $(MSVCRT)
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MDd
+!else
+crt = -MD
+!endif
+!else
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MTd
+!else
+crt = -MT
+!endif
+!endif
+
+# cdebug includes compiler options for debugging as well as optimization.
+!if $(DEBUG)
+
+# In debugging mode, optimizations need to be disabled
+cdebug = -Zi -Od $(DEBUGFLAGS)
+
+!else
+
+cdebug = $(OPTIMIZATIONS)
+!if $(SYMBOLS)
+cdebug = $(cdebug) -Zi
+!endif
+
+!endif # $(DEBUG)
+
+# cwarn includes default warning levels.
+cwarn = $(WARNINGS)
+
+!if "$(MACHINE)" == "AMD64"
+# Disable pointer<->int warnings related to cast between different sizes
+# There are a gadzillion of these due to use of ClientData and
+# clutter up compiler
+# output increasing chance of a real warning getting lost. So disable them.
+# Eventually some day, Tcl will be 64-bit clean.
+cwarn = $(cwarn) -wd4311 -wd4312
+!endif
+
+### Common compiler options that are architecture specific
+!if "$(MACHINE)" == "ARM"
+carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
+!else
+carch =
+!endif
+
+!if $(DEBUG)
+# Turn warnings into errors
+cwarn = $(cwarn) -WX
+!endif
+
+INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES)
+!if !$(DOING_TCL) && !$(DOING_TK)
+INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WINDIR)" -I"$(COMPATDIR)"
+!endif
+
+# These flags are defined roughly in the order of the pre-reform
+# rules.vc/makefile.vc to help visually compare that the pre- and
+# post-reform build logs
+
+# cflags contains generic flags used for building practically all object files
+cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\ $(cdebug)
+
+# appcflags contains $(cflags) and flags for building the application
+# object files (e.g. tclsh, or wish) pkgcflags contains $(cflags) plus
+# flags used for building shared object files The two differ in the
+# BUILD_$(PROJECT) macro which should be defined only for the shared
+# library *implementation* and not for its caller interface
+
+appcflags = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES) $(USE_STUBS_DEFS)
+appcflags_nostubs = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES)
+pkgcflags = $(appcflags) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+pkgcflags_nostubs = $(appcflags_nostubs) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+
+# stubscflags contains $(cflags) plus flags used for building a stubs
+# library for the package.  Note: -DSTATIC_BUILD is defined in
+# $(OPTDEFINES) only if the OPTS configuration indicates a static
+# library. However the stubs library is ALWAYS static hence included
+# here irrespective of the OPTS setting.
+#
+# TBD - tclvfs has a comment that stubs libs should not be compiled with -GL
+# without stating why. Tcl itself compiled stubs libs with this flag.
+# so we do not remove it from cflags. -GL may prevent extensions
+# compiled with one VC version to fail to link against stubs library
+# compiled with another VC version. Check for this and fix accordingly.
+stubscflags = $(cflags) $(PKGNAMEFLAGS) $(PRJ_DEFINES) $(OPTDEFINES) -Zl -DSTATIC_BUILD $(INCLUDES)
+
+# Link flags 
+
+!if $(DEBUG)
+ldebug = -debug -debugtype:cv
+!else
+ldebug = -release -opt:ref -opt:icf,3
+!if $(SYMBOLS)
+ldebug = $(ldebug) -debug -debugtype:cv
+!endif
+!endif
+
+# Note: Profiling is currently only possible with the Visual Studio Enterprise
+!if $(PROFILE)
+ldebug= $(ldebug) -profile
+!endif
+
+### Declarations common to all linker versions 
+lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+lflags = $(lflags) -nodefaultlib:libucrt.lib
+!endif
+
+# Old linkers (Visual C++ 6 in particular) will link for fast loading
+# on Win98. Since we do not support Win98 any more, we specify nowin98
+# as recommended for NT and later. However, this is only required by
+# IX86 on older compilers and only needed if we are not doing a static build.
+
+!if "$(MACHINE)" == "IX86" && !$(STATIC_BUILD)
+!if [nmakehlp -l -opt:nowin98 $(LINKER_TESTFLAGS)]
+# Align sections for PE size savings.
+lflags = $(lflags) -opt:nowin98
+!endif
+!endif
+
+dlllflags = $(lflags) -dll
+conlflags = $(lflags) -subsystem:console
+guilflags = $(lflags) -subsystem:windows
+
+# Libraries that are required for every image.
+# Extensions should define any additional libraries with $(PRJ_LIBS)
+winlibs   = kernel32.lib advapi32.lib
+
+!if $(NEED_TK)
+winlibs = $(winlibs) gdi32.lib user32.lib uxtheme.lib
+!endif
+
+# Avoid 'unresolved external symbol __security_cookie' errors.
+# c.f. http://support.microsoft.com/?id=894573
+!if "$(MACHINE)" == "AMD64"
+!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500
+winlibs   = $(winlibs) bufferoverflowU.lib
+!endif
+!endif
+
+baselibs = $(winlibs) $(PRJ_LIBS)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+baselibs   = $(baselibs) ucrt.lib
+!endif
+
+################################################################
+# 13. Define standard commands, common make targets and implicit rules
+
+CCPKGCMD = $(cc32) $(pkgcflags) -Fo$(TMP_DIR)^\
+CCAPPCMD = $(cc32) $(appcflags) -Fo$(TMP_DIR)^\
+CCSTUBSCMD = $(cc32) $(stubscflags) -Fo$(TMP_DIR)^\
+
+LIBCMD = $(lib32) -nologo $(LINKERFLAGS) -out:$@
+DLLCMD = $(link32) $(dlllflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+
+CONEXECMD = $(link32) $(conlflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+GUIEXECMD = $(link32) $(guilflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+RESCMD  = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \
+           $(TCL_INCLUDES) \
+           -DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \
+           -DCOMMAVERSION=$(DOTVERSION:.=,),0 \
+           -DDOTVERSION=\"$(DOTVERSION)\" \
+           -DVERSION=\"$(VERSION)\" \
+           -DSUFX=\"$(SUFX)\" \
+            -DPROJECT=\"$(PROJECT)\" \
+            -DPRJLIBNAME=\"$(PRJLIBNAME)\" 
+
+!ifndef DEFAULT_BUILD_TARGET
+DEFAULT_BUILD_TARGET = $(PROJECT)
+!endif
+
+default-target: $(DEFAULT_BUILD_TARGET)
+
+default-pkgindex:
+       @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \
+           [list load [file join $$dir $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl
+
+default-pkgindex-tea:
+       @if exist $(ROOT)\pkgIndex.tcl.in nmakehlp -s << $(ROOT)\pkgIndex.tcl.in > $(OUT_DIR)\pkgIndex.tcl
+@PACKAGE_VERSION@    $(DOTVERSION)
+@PACKAGE_NAME@       $(PRJ_PACKAGE_TCLNAME)
+@PACKAGE_TCLNAME@    $(PRJ_PACKAGE_TCLNAME)
+@PKG_LIB_FILE@       $(PRJLIBNAME)
+<<
+
+
+default-install: default-install-binaries default-install-libraries
+
+default-install-binaries: $(PRJLIB)
+       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-libraries: $(OUT_DIR)\pkgIndex.tcl
+       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
+       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
+       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
+       @$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)
+
+default-install-stubs:
+       @echo Installing stubs library to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJSTUBLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-docs-html:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.html" "$(DOCDIR)\*.css" "$(DOCDIR)\*.png") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-docs-n:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.n") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-demos:
+       @echo Installing demos to '$(DEMO_INSTALL_DIR)'
+       @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)"
+       @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)"
+
+default-clean:
+       @echo Cleaning $(TMP_DIR)\* ...
+       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)
+       @echo Cleaning $(WINDIR)\nmakehlp.obj, nmakehlp.exe ...
+       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj
+       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe
+       @if exist $(WINDIR)\nmakehlp.out del $(WINDIR)\nmakehlp.out
+       @echo Cleaning $(WINDIR)\nmhlp-out.txt ...
+       @if exist $(WINDIR)\nmhlp-out.txt del $(WINDIR)\nmhlp-out.txt
+       @echo Cleaning $(WINDIR)\_junk.pch ...
+       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch
+       @echo Cleaning $(WINDIR)\vercl.x, vercl.i ...
+       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x
+       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i
+       @echo Cleaning $(WINDIR)\versions.vc, version.vc ...
+       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc
+       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc
+
+default-hose: default-clean
+       @echo Hosing $(OUT_DIR)\* ...
+       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)
+
+# Only for backward compatibility
+default-distclean: default-hose
+
+default-setup:
+       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
+       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
+
+!if "$(TESTPAT)" != ""
+TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
+!endif
+
+default-test: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS)
+
+default-shell: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       $(DEBUGGER) $(TCLSH)
+
+# Generation of Windows version resource 
+!ifdef RCFILE
+
+# Note: don't use $** in below rule because there may be other dependencies
+# and only the "master" rc must be passed to the resource compiler
+$(TMP_DIR)\$(PROJECT).res: $(RCDIR)\$(PROJECT).rc
+       $(RESCMD) $(RCDIR)\$(PROJECT).rc
+
+!else
+
+# If parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+$(TMP_DIR)\$(PROJECT).res: $(TMP_DIR)\$(PROJECT).rc
+
+$(TMP_DIR)\$(PROJECT).rc:
+       @$(COPY) << $(TMP_DIR)\$(PROJECT).rc
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION   COMMAVERSION
+ PRODUCTVERSION        COMMAVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef DEBUG
+ FILEFLAGS     VS_FF_DEBUG
+#else
+ FILEFLAGS     0x0L
+#endif
+ FILEOS                VOS_NT_WINDOWS32
+ FILETYPE      VFT_DLL
+ FILESUBTYPE   0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "FileDescription",  "Tcl extension " PROJECT
+            VALUE "OriginalFilename", PRJLIBNAME
+            VALUE "FileVersion",      DOTVERSION
+            VALUE "ProductName",      "Package " PROJECT " for Tcl"
+            VALUE "ProductVersion",   DOTVERSION 
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+<<
+
+!endif # ifdef RCFILE
+
+!ifndef DISABLE_IMPLICIT_RULES
+DISABLE_IMPLICIT_RULES = 0
+!endif
+
+!if !$(DISABLE_IMPLICIT_RULES)
+# Implicit rule definitions - only for building library objects. For stubs and
+# main application, the master makefile should define explicit rules.
+
+{$(ROOT)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(WINDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(RCDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(WINDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(TMP_DIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+.SUFFIXES:
+.SUFFIXES:.c .rc
+
+!endif
+
+################################################################
+# 14. Sanity check selected options against Tcl build options
+# When building an extension, certain configuration options should
+# match the ones used when Tcl was built. Here we check and
+# warn on a mismatch.
+!if ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+!if exist("$(_TCLDIR)\lib\nmake\tcl.nmake")
+TCLNMAKECONFIG = "$(_TCLDIR)\lib\nmake\tcl.nmake"
+!endif
+!else # ! $(TCLINSTALL) - building against Tcl source
+!if exist("$(OUT_DIR)\tcl.nmake")
+TCLNMAKECONFIG = "$(OUT_DIR)\tcl.nmake"
+!endif
+!endif # TCLINSTALL
+
+!if $(CONFIG_CHECK)
+!ifdef TCLNMAKECONFIG
+!include $(TCLNMAKECONFIG)
+
+!if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)"
+!error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)).
+!endif
+!if defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC)
+!message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)).
+!endif
+!if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG)
+!message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)).
+!endif
+!endif
+
+!endif # TCLNMAKECONFIG
+
+!endif # ! $(DOING_TCL)
+
+
+#----------------------------------------------------------
+# Display stats being used.
+#----------------------------------------------------------
+
+!if !$(DOING_TCL)
+!message *** Building against Tcl at '$(_TCLDIR)'
+!endif
+!if !$(DOING_TK) && $(NEED_TK)
+!message *** Building against Tk at '$(_TKDIR)'
+!endif
+!message *** Intermediate directory will be '$(TMP_DIR)'
+!message *** Output directory will be '$(OUT_DIR)'
+!message *** Installation, if selected, will be in '$(_INSTALLDIR)'
+!message *** Suffix for binaries will be '$(SUFX)'
+!message *** Compiler version $(VCVER). Target machine is $(MACHINE)
+!message *** Host architecture is $(NATIVE_ARCH)
+
+!endif # ifdef _RULES_VC
diff --git a/pkgs/tdbc1.0.6/win/targets.vc b/pkgs/tdbc1.0.6/win/targets.vc
new file mode 100644 (file)
index 0000000..312022d
--- /dev/null
@@ -0,0 +1,98 @@
+#------------------------------------------------------------- -*- makefile -*-
+# targets.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file defines some standard targets for the convenience of extensions
+# and can be optionally included by the extension makefile.
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for docs.
+
+$(PROJECT): setup pkgindex $(PRJLIB)
+
+!ifdef PRJ_STUBOBJS
+$(PROJECT): $(PRJSTUBLIB)
+$(PRJSTUBLIB): $(PRJ_STUBOBJS)
+       $(LIBCMD) $**
+
+$(PRJ_STUBOBJS):
+       $(CCSTUBSCMD) %s
+!endif # PRJ_STUBOBJS
+
+!ifdef PRJ_MANIFEST
+$(PROJECT): $(PRJLIB).manifest
+$(PRJLIB).manifest: $(PRJ_MANIFEST)
+       @nmakehlp -s << $** >$@
+@MACHINE@        $(MACHINE:IX86=X86)
+<<
+!endif
+
+!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"
+$(PRJLIB): $(PRJ_OBJS) $(RESFILE)
+!if $(STATIC_BUILD)
+       $(LIBCMD) $**
+!else
+       $(DLLCMD) $**
+       $(_VC_MANIFEST_EMBED_DLL)
+!endif
+       -@del $*.exp
+!endif
+
+!if "$(PRJ_HEADERS)" != "" && "$(PRJ_OBJS)" != ""
+$(PRJ_OBJS): $(PRJ_HEADERS)
+!endif
+
+# If parent makefile has defined stub objects, add their installation
+# to the default install
+!if "$(PRJ_STUBOBJS)" != ""
+default-install: default-install-stubs
+!endif
+
+# Unlike the other default targets, these cannot be in rules.vc because
+# the executed command depends on existence of macro PRJ_HEADERS_PUBLIC
+# that the parent makefile will not define until after including rules-ext.vc
+!if "$(PRJ_HEADERS_PUBLIC)" != ""
+default-install: default-install-headers
+default-install-headers:
+       @echo Installing headers to '$(INCLUDE_INSTALL_DIR)'
+       @for %f in ($(PRJ_HEADERS_PUBLIC)) do @$(COPY) %f "$(INCLUDE_INSTALL_DIR)"
+!endif
+
+!if "$(DISABLE_STANDARD_TARGETS)" == ""
+DISABLE_STANDARD_TARGETS = 0
+!endif
+
+!if "$(DISABLE_TARGET_setup)" == ""
+DISABLE_TARGET_setup = 0
+!endif
+!if "$(DISABLE_TARGET_install)" == ""
+DISABLE_TARGET_install = 0
+!endif
+!if "$(DISABLE_TARGET_clean)" == ""
+DISABLE_TARGET_clean = 0
+!endif
+!if "$(DISABLE_TARGET_test)" == ""
+DISABLE_TARGET_test = 0
+!endif
+!if "$(DISABLE_TARGET_shell)" == ""
+DISABLE_TARGET_shell = 0
+!endif
+
+!if !$(DISABLE_STANDARD_TARGETS)
+!if !$(DISABLE_TARGET_setup)
+setup: default-setup
+!endif
+!if !$(DISABLE_TARGET_install)
+install: default-install
+!endif
+!if !$(DISABLE_TARGET_clean)
+clean: default-clean
+realclean: hose
+hose: default-hose
+distclean: realclean default-distclean
+!endif
+!if !$(DISABLE_TARGET_test)
+test: default-test
+!endif
+!if !$(DISABLE_TARGET_shell)
+shell: default-shell
+!endif
+!endif # DISABLE_STANDARD_TARGETS
similarity index 88%
rename from pkgs/tdbc1.0.5/win/tdbc.rc
rename to pkgs/tdbc1.0.6/win/tdbc.rc
index 4aecc7f..2f014e4 100644 (file)
@@ -1,38 +1,39 @@
-// tdbc.rc - Copyright (C) 2008 Pat Thoyts <patthoyts@users.sourceforge.net>\r
-//\r
-// There is no need to modify this file.\r
-//\r
-\r
-#include <winver.h>\r
-\r
-VS_VERSION_INFO VERSIONINFO\r
- FILEVERSION   COMMAVERSION\r
- PRODUCTVERSION        COMMAVERSION\r
- FILEFLAGSMASK 0x3fL\r
-#ifdef DEBUG\r
- FILEFLAGS     VS_FF_DEBUG\r
-#else\r
- FILEFLAGS     0x0L\r
-#endif\r
- FILEOS                VOS__WINDOWS32\r
- FILETYPE      VFT_DLL\r
- FILESUBTYPE   0x0L\r
-BEGIN\r
-    BLOCK "StringFileInfo"\r
-    BEGIN\r
-        BLOCK "040904b0"\r
-        BEGIN\r
-            VALUE "FileDescription",  "Tcl Database Connectivity " DOTVERSION "\0"\r
-            VALUE "OriginalFilename", "tdbc" VERSION ".dll\0"\r
-            VALUE "CompanyName",      "The Tcl Development Community\0"\r
-            VALUE "FileVersion",      DOTVERSION "\0"\r
-            VALUE "LegalCopyright",   "Copyright \251 2008 Kevin Kenny et al.\0"\r
-            VALUE "ProductName",      "Tcl Database Connectivity " DOTVERSION "\0"\r
-            VALUE "ProductVersion",   DOTVERSION "\0"\r
-        END\r
-    END\r
-    BLOCK "VarFileInfo"\r
-    BEGIN\r
-        VALUE "Translation", 0x409, 1200\r
-    END\r
-END\r
+// tdbc.rc - Copyright (C) 2008 Pat Thoyts <patthoyts@users.sourceforge.net>
+//
+// There is no need to modify this file.
+//
+
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION   COMMAVERSION
+ PRODUCTVERSION        COMMAVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef DEBUG
+ FILEFLAGS     VS_FF_DEBUG
+#else
+ FILEFLAGS     0x0L
+#endif
+ FILEOS                VOS__WINDOWS32
+ FILETYPE      VFT_DLL
+ FILESUBTYPE   0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "FileDescription",  "Tcl Database Connectivity " DOTVERSION "\0"
+            VALUE "OriginalFilename", PRJLIBNAME
+            VALUE "CompanyName",      "The Tcl Development Community\0"
+            VALUE "FileVersion",      DOTVERSION "\0"
+            VALUE "LegalCopyright",   "Copyright \251 2008 Kevin Kenny et al.\0"
+            VALUE "Copyright",   "Copyright \251 2008 Kevin Kenny et al.\0"
+            VALUE "ProductName",      "Tcl Database Connectivity " DOTVERSION "\0"
+            VALUE "ProductVersion",   DOTVERSION "\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
diff --git a/pkgs/tdbcmysql1.0.5/win/makefile.vc b/pkgs/tdbcmysql1.0.5/win/makefile.vc
deleted file mode 100644 (file)
index d0b612e..0000000
+++ /dev/null
@@ -1,515 +0,0 @@
-#------------------------------------------------------------- -*- makefile -*-
-# makefile.vc --
-#
-#      Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)
-#
-# This makefile is based upon the Tcl 8.6 Makefile.vc and modified to
-# make it suitable as a general package makefile. Look for the word EDIT
-# which marks sections that may need modification. As a minumum you will
-# need to change the PROJECT, DOTVERSION and DLLOBJS variables to values
-# relevant to your package.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-#
-# Copyright (c) 1995-1996 Sun Microsystems, Inc.
-# Copyright (c) 1998-2000 Ajuba Solutions.
-# Copyright (c) 2001-2005 ActiveState Corporation.
-# Copyright (c) 2001-2004 David Gravereaux.
-# Copyright (c) 2003-2008 Pat Thoyts.
-#------------------------------------------------------------------------------
-
-# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
-# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
-!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)
-MSG = ^
-You need to run vcvars32.bat from Developer Studio or setenv.bat from the^
-Platform SDK first to setup the environment.  Jump to this line to read^
-the build instructions.
-!error $(MSG)
-!endif
-
-#------------------------------------------------------------------------------
-# HOW TO USE this makefile:
-#
-# 1)  It is now necessary to have MSVCDir, MSDevDir or MSSDK set in the
-#     environment.  This is used as a check to see if vcvars32.bat had been
-#     run prior to running nmake or during the installation of Microsoft
-#     Visual C++, MSVCDir had been set globally and the PATH adjusted.
-#     Either way is valid.
-#
-#     You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin
-#     directory to setup the proper environment, if needed, for your
-#     current setup.  This is a needed bootstrap requirement and allows the
-#     swapping of different environments to be easier.
-#
-# 2)  To use the Platform SDK (not expressly needed), run setenv.bat after
-#     vcvars32.bat according to the instructions for it.  This can also
-#     turn on the 64-bit compiler, if your SDK has it.
-#
-# 3)  Targets are:
-#      all       -- Builds everything.
-#      <project> -- Builds the project (eg: nmake sample)
-#      test      -- Builds and runs the test suite.
-#      install   -- Installs the built binaries and libraries to $(INSTALLDIR)
-#                   in an appropriate subdirectory.
-#      clean/realclean/distclean -- varying levels of cleaning.
-#
-# 4)  Macros usable on the commandline:
-#      INSTALLDIR=<path>
-#              Sets where to install Tcl from the built binaries.
-#              C:\Progra~1\Tcl is assumed when not specified.
-#
-#      OPTS=loimpact,msvcrt,nothreads,pdbs,profile,static,symbols,unchecked,none
-#              Sets special options for the core.  The default is for none.
-#              Any combination of the above may be used (comma separated).
-#              'none' will over-ride everything to nothing.
-#
-#              loimpact = Adds a flag for how NT treats the heap to keep memory
-#                         in use, low.  This is said to impact alloc performance.
-#              msvcrt  =  Affects the static option only to switch it from
-#                         using libcmt(d) as the C runtime [by default] to
-#                         msvcrt(d). This is useful for static embedding
-#                         support.
-#              nothreads = Turns off multithreading support (not recommended)
-#              static  =  Builds a static library of the core instead of a
-#                         dll.  The shell will be static (and large), as well.
-#              pdbs     = Build detached symbols for release builds.
-#              profile  = Adds profiling hooks.  Map file is assumed.
-#              symbols  = Debug build. Links to the debug C runtime, disables
-#                         optimizations and creates pdb symbols files.
-#              unchecked = Allows a symbols build to not use the debug
-#                         enabled runtime (msvcrt.dll not msvcrtd.dll
-#                         or libcmt.lib not libcmtd.lib).
-#
-#      STATS=memdbg,compdbg,none
-#              Sets optional memory and bytecode compiler debugging code added
-#              to the core.  The default is for none.  Any combination of the
-#              above may be used (comma separated).  'none' will over-ride
-#              everything to nothing.
-#
-#              memdbg   = Enables the debugging memory allocator.
-#              compdbg  = Enables byte compilation logging.
-#
-#      CHECKS=64bit,fullwarn,nodep,none
-#              Sets special macros for checking compatability.
-#
-#              64bit    = Enable 64bit portability warnings (if available)
-#              fullwarn = Builds with full compiler and link warnings enabled.
-#                          Very verbose.
-#              nodep    = Turns off compatability macros to ensure Tk isn't
-#                          being built with deprecated functions.
-#
-#      MACHINE=(ALPHA|AMD64|IA64|IX86)
-#              Set the machine type used for the compiler, linker, and
-#              resource compiler.  This hook is needed to tell the tools
-#              when alternate platforms are requested.  IX86 is the default
-#              when not specified. If the CPU environment variable has been
-#              set (ie: recent Platform SDK) then MACHINE is set from CPU.
-#
-#      TMP_DIR=<path>
-#      OUT_DIR=<path>
-#              Hooks to allow the intermediate and output directories to be
-#              changed.  $(OUT_DIR) is assumed to be
-#              $(BINROOT)\(Release|Debug) based on if symbols are requested.
-#              $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default.
-#
-#      TESTPAT=<file>
-#              Reads the tests requested to be run from this file.
-#
-# 5)  Examples:
-#
-#      Basic syntax of calling nmake looks like this:
-#      nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]]
-#
-#                        Standard (no frills)
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat
-#       Setting environment for using Microsoft Visual C++ tools.
-#       c:\tcl_src\win\>nmake -f makefile.vc all
-#       c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl
-#
-#                         Building for Win64
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat
-#       Setting environment for using Microsoft Visual C++ tools.
-#       c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL
-#       Targeting Windows pre64 RETAIL
-#       c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64
-#
-#------------------------------------------------------------------------------
-#==============================================================================
-#------------------------------------------------------------------------------
-
-!if !exist("makefile.vc")
-MSG = ^
-You must run this makefile only from the directory it is in.^
-Please `cd` to its location first.
-!error $(MSG)
-!endif
-
-#-------------------------------------------------------------------------
-# Project specific information (EDIT)
-#
-# You should edit this with the name and version of your project. This
-# information is used to generate the name of the package library and
-# it's install location.
-#
-# For example, the sample extension is  going to build sample05.dll and
-# would install it into $(INSTALLDIR)\lib\sample05
-#
-# You need to specify the object files that need to be linked into your
-# binary here.
-#
-#-------------------------------------------------------------------------
-
-PROJECT = tdbcmysql
-
-# Uncomment the following line if this is a Tk extension.
-#PROJECT_REQUIRES_TK=1
-!include "rules.vc"
-
-# nmakehelp -V <file> <tag> will search the file for tag, skips until a
-#      number and returns all character until a character not in [0-9.ab]
-#      is read.
-
-!if [echo REM = This file is generated from Makefile.vc > versions.vc]
-!endif
-# get project version from row AC_INIT([tdbcmysql], ...)
-!if [echo DOTVERSION = \>> versions.vc] \
-   && [nmakehlp -V ..\configure.ac AC_INIT >> versions.vc]
-!endif
-!if [echo TCL_VERSION_REQ = \>> versions.vc] \
-   && [nmakehlp -V ..\configure.ac TCL_VERSION_REQ >> versions.vc]
-!endif
-!include "versions.vc"
-
-VERSION         = $(DOTVERSION:.=)
-STUBPREFIX      = $(PROJECT)stub
-
-DLLOBJS = \
-       $(TMP_DIR)\tdbcmysql.obj \
-       $(TMP_DIR)\mysqlStubInit.obj
-
-
-PRJSTUBOBJS = \
-       $(TMP_DIR)\mysqlStubInit.obj
-
-PRJHEADERS = \
-       $(GENERICDIR)\fakemysql.h \
-       $(GENERICDIR)\mysqlStubs.h
-
-
-#-------------------------------------------------------------------------
-# Target names and paths ( shouldn't need changing )
-#-------------------------------------------------------------------------
-
-BINROOT                = $(MAKEDIR)
-ROOT            = $(MAKEDIR)\..
-
-PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
-PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
-PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)
-
-PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
-PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)
-
-### Make sure we use backslash only.
-PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)
-LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
-BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
-DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
-SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)
-INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include
-
-### The following paths CANNOT have spaces in them.
-GENERICDIR     = $(ROOT)\generic
-WINDIR         = $(ROOT)\win
-LIBDIR          = $(ROOT)\library
-DOCDIR         = $(ROOT)\doc
-TOOLSDIR       = $(ROOT)\tools
-COMPATDIR      = $(ROOT)\compat
-
-### tdbc
-TDBC_DOTVERSION                = $(DOTVERSION)
-TDBC_VERSION           = $(TDBC_DOTVERSION:.=)
-# tdbc source folder is "../tdbc" in source distribution and
-# "../tdbc1.0.0" in tcl8.6.0 bundeled distribution
-TDBC_DIR               = $(ROOT)\..\tdbc
-!if !exist($(TDBC_DIR))
-TDBC_DIR               = $(ROOT)\..\tdbc$(TDBC_DOTVERSION)
-!endif
-TDBC_GENERIC_DIR       = $(TDBC_DIR)\generic
-### tdbc stub lib
-TDBCSTUBLIBNAME                = tdbcstub$(TDBC_VERSION).lib
-TDBCSTUBLIB            = "$(_TCLDIR)\lib\$(TDBCSTUBLIBNAME)"
-!if !exist($(TDBCSTUBLIB))
-TDBCSTUBLIB            = $(TDBC_DIR)\win\$(BUILDDIRTOP)\$(TDBCSTUBLIBNAME)
-!endif
-TDBC_LIB_FILE          = tdbc$(TDBC_VERSION).dll
-TDBC_BIN_DIR = $(TDBC_DIR)/win/$(BUILDDIRTOP)
-
-#---------------------------------------------------------------------
-# Compile flags
-#---------------------------------------------------------------------
-
-!if !$(DEBUG)
-!if $(OPTIMIZING)
-### This cranks the optimization level to maximize speed
-cdebug = $(OPTIMIZATIONS)
-!else
-cdebug =
-!endif
-!else if "$(MACHINE)" == "IA64"
-### Warnings are too many, can't support warnings into errors.
-cdebug = -Zi -Od $(DEBUGFLAGS)
-!else
-cdebug = -Zi -WX $(DEBUGFLAGS)
-!endif
-
-### Declarations common to all compiler options
-cwarn = $(WARNINGS) -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE
-cflags = -nologo -c $(COMPILERFLAGS) $(cwarn) -Fp$(TMP_DIR)^\
-
-!if $(MSVCRT)
-!if $(DEBUG) && !$(UNCHECKED)
-crt = -MDd
-!else
-crt = -MD
-!endif
-!else
-!if $(DEBUG) && !$(UNCHECKED)
-crt = -MTd
-!else
-crt = -MT
-!endif
-!endif
-
-cflags = $(cflags) -DMODULE_SCOPE=extern
-
-!if !$(STATIC_BUILD)
-cflags = $(cflags) -DUSE_TCL_STUBS
-!if defined(TKSTUBLIB)
-cflags = $(cflags) -DUSE_TK_STUBS
-!endif
-!endif
-
-INCLUDES       = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)" -I"$(TDBC_GENERIC_DIR)"
-BASE_CFLAGS    = $(cflags) $(cdebug) $(crt) $(INCLUDES)
-CON_CFLAGS     = $(cflags) $(cdebug) $(crt) -DCONSOLE
-TCL_CFLAGS     = -DPACKAGE_NAME="\"$(PROJECT)\"" \
-                 -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \
-                 -DBUILD_$(PROJECT) \
-                 $(BASE_CFLAGS) $(OPTDEFINES) \
-                  -Dinline=__inline
-
-### Stubs files should not be compiled with -GL
-STUB_CFLAGS     = $(cflags) $(cdebug:-GL=) #$(TK_DEFINES)
-
-#---------------------------------------------------------------------
-# Link flags
-#---------------------------------------------------------------------
-
-!if $(DEBUG)
-ldebug = -debug
-!if $(MSVCRT)
-ldebug = $(ldebug) -nodefaultlib:msvcrt
-!endif
-!else
-ldebug = -release -opt:ref -opt:icf,3
-!endif
-
-### Declarations common to all linker options
-lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)
-
-!if $(PROFILE)
-lflags = $(lflags) -profile
-!endif
-
-!if $(ALIGN98_HACK) && !$(STATIC_BUILD)
-### Align sections for PE size savings.
-lflags = $(lflags) -opt:nowin98
-!else if !$(ALIGN98_HACK) && $(STATIC_BUILD)
-### Align sections for speed in loading by choosing the virtual page size.
-lflags = $(lflags) -align:4096
-!endif
-
-!if $(LOIMPACT)
-lflags = $(lflags) -ws:aggressive
-!endif
-
-dlllflags = $(lflags) -dll
-conlflags = $(lflags) -subsystem:console
-guilflags = $(lflags) -subsystem:windows
-!if !$(STATIC_BUILD)
-baselibs  = $(TCLSTUBLIB) $(TDBCSTUBLIB)
-!if defined(TKSTUBLIB)
-baselibs  = $(baselibs) $(TKSTUBLIB)
-!endif
-!endif
-
-# Avoid 'unresolved external symbol __security_cookie' errors.
-# c.f. http://support.microsoft.com/?id=894573
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
-!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500
-baselibs   = $(baselibs) bufferoverflowU.lib
-!endif
-!endif
-
-#---------------------------------------------------------------------
-# TclTest flags
-#---------------------------------------------------------------------
-
-!if "$(TESTPAT)" != ""
-TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
-!endif
-
-#---------------------------------------------------------------------
-# Project specific targets (EDIT)
-#---------------------------------------------------------------------
-
-all:       setup $(PROJECT)
-$(PROJECT): setup pkgIndex $(PRJLIB)
-install:    install-binaries install-libraries install-docs
-pkgIndex:   setup $(OUT_DIR)\pkgIndex.tcl
-
-!if !$(STATIC_BUILD)
-$(PROJECT):  $(PRJSTUBLIB)
-!endif
-
-test: setup $(PROJECT)
-        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
-        @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)
-       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)
-!if $(TCLINSTALL)
-        @set PATH=$(_TCLDIR)\bin;$(PATH)
-       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS)
-!else
-        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
-       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) \
-               -load "package ifneeded tdbc::mysql $(DOTVERSION) \
-                       {source {$(LIBDIR:\=/)/tdbcmysql.tcl};load {$(PRJLIB:\=/)} $(PROJECT)};\
-               package ifneeded tdbc $(TDBC_DOTVERSION) \
-                       {source {$(TDBC_BIN_DIR:\=/)/tdbc.tcl};load {$(TDBC_BIN_DIR:\=/)/$(TDBC_LIB_FILE)} tdbc}"
-!endif
-
-shell: setup $(PROJECT)
-        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)
-!if $(TCLINSTALL)
-        @set PATH=$(_TCLDIR)\bin;$(PATH)
-!else
-        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
-!endif
-        $(DEBUGGER) $(TCLSH) $(SCRIPT)
-
-setup:
-       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
-       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
-
-# See <tcl>/win/coffbase.txt for extension base addresses.
-$(PRJLIB): $(DLLOBJS)
-       $(link32) $(dlllflags) -base:@$(COFFBASE),tdbc -out:$@ $(baselibs) @<<
-$**
-<<
-       $(_VC_MANIFEST_EMBED_DLL)
-       -@del $*.exp
-
-$(PRJSTUBLIB): $(PRJSTUBOBJS)
-       $(lib32) -nologo -out:$@ $(PRJSTUBOBJS)
-
-
-#---------------------------------------------------------------------
-# Implicit rules
-#---------------------------------------------------------------------
-
-{$(WINDIR)}.c{$(TMP_DIR)}.obj::
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
-$<
-<<
-
-{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
-$<
-<<
-
-{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
-$<
-<<
-
-{$(WINDIR)}.rc{$(TMP_DIR)}.res:
-       $(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \
-               -DCOMMAVERSION=$(DOTVERSION:.=,),0 \
-               -DDOTVERSION=\"$(DOTVERSION)\" \
-               -DVERSION=\"$(VERSION)$(SUFX)\" \
-!if $(DEBUG)
-       -d DEBUG \
-!endif
-!if $(TCL_THREADS)
-       -d TCL_THREADS \
-!endif
-!if $(STATIC_BUILD)
-       -d STATIC_BUILD \
-!endif
-       $<
-
-.SUFFIXES:
-.SUFFIXES:.c .rc
-
-#-------------------------------------------------------------------------
-# Explicit dependency rules
-#
-#-------------------------------------------------------------------------
-.PHONY: $(OUT_DIR)\pkgIndex.tcl
-
-$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in
-       @nmakehlp -s << $** > $@
-@PACKAGE_NAME@        $(PROJECT)
-@PACKAGE_VERSION@     $(DOTVERSION)
-@TCL_VERSION_REQ@     $(TCL_VERSION_REQ)
-@PKG_LIB_FILE@        $(PRJLIBNAME)
-<<
-
-$(TMP_DIR)\mysqlStubInit.obj : $(GENERICDIR)\mysqlStubInit.c
-        $(cc32) $(STUB_CFLAGS) $(TCL_INCLUDES) -Zl -DSTATIC_BUILD -Fo$@ $?
-
-#---------------------------------------------------------------------
-# Installation. (EDIT)
-#
-# You may need to modify this section to reflect the final distribution
-# of your files and possibly to generate documentation.
-#
-#---------------------------------------------------------------------
-
-install-binaries:
-       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'
-       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
-       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
-
-install-libraries: $(OUT_DIR)\pkgIndex.tcl
-       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
-       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
-       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
-       @$(CPY) $(OUT_DIR)\pkgIndex.tcl "$(SCRIPT_INSTALL_DIR)"
-
-install-docs:
-       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
-       @if exist $(DOCDIR) $(CPY) $(DOCDIR)\*.n "$(DOC_INSTALL_DIR)"
-
-#---------------------------------------------------------------------
-# Clean up
-#---------------------------------------------------------------------
-
-clean:
-       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)
-       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc
-       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i
-       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x
-       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch
-
-realclean: clean
-       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)
-
-distclean: realclean
-       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe
-       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj
diff --git a/pkgs/tdbcmysql1.0.5/win/nmakehlp.c b/pkgs/tdbcmysql1.0.5/win/nmakehlp.c
deleted file mode 100644 (file)
index b1a1517..0000000
+++ /dev/null
@@ -1,697 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * nmakehlp.c --
- *
- *     This is used to fix limitations within nmake and the environment.
- *
- * Copyright (c) 2002 by David Gravereaux.
- * Copyright (c) 2006 by Pat Thoyts
- *
- * See the file "license.terms" for information on usage and redistribution of
- * this file, and for a DISCLAIMER OF ALL WARRANTIES.
- * ----------------------------------------------------------------------------
- */
-
-#define _CRT_SECURE_NO_DEPRECATE
-#include <windows.h>
-#define NO_SHLWAPI_GDI
-#define NO_SHLWAPI_STREAM
-#define NO_SHLWAPI_REG
-#include <shlwapi.h>
-#pragma comment (lib, "user32.lib")
-#pragma comment (lib, "kernel32.lib")
-#pragma comment (lib, "shlwapi.lib")
-#include <stdio.h>
-#include <math.h>
-
-/*
- * This library is required for x64 builds with _some_ versions of MSVC
- */
-#if defined(_M_IA64) || defined(_M_AMD64)
-#if _MSC_VER >= 1400 && _MSC_VER < 1500
-#pragma comment(lib, "bufferoverflowU")
-#endif
-#endif
-
-/* ISO hack for dumb VC++ */
-#ifdef _MSC_VER
-#define   snprintf     _snprintf
-#endif
-
-
-
-/* protos */
-
-static int CheckForCompilerFeature(const char *option);
-static int CheckForLinkerFeature(const char *option);
-static int IsIn(const char *string, const char *substring);
-static int SubstituteFile(const char *substs, const char *filename);
-static int QualifyPath(const char *path);
-static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
-static DWORD WINAPI ReadFromPipe(LPVOID args);
-
-/* globals */
-
-#define CHUNK  25
-#define STATICBUFFERSIZE    1000
-typedef struct {
-    HANDLE pipe;
-    char buffer[STATICBUFFERSIZE];
-} pipeinfo;
-
-pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'};
-pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'};
-\f
-/*
- * exitcodes: 0 == no, 1 == yes, 2 == error
- */
-
-int
-main(
-    int argc,
-    char *argv[])
-{
-    char msg[300];
-    DWORD dwWritten;
-    int chars;
-
-    /*
-     * Make sure children (cl.exe and link.exe) are kept quiet.
-     */
-
-    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
-
-    /*
-     * Make sure the compiler and linker aren't effected by the outside world.
-     */
-
-    SetEnvironmentVariable("CL", "");
-    SetEnvironmentVariable("LINK", "");
-
-    if (argc > 1 && *argv[1] == '-') {
-       switch (*(argv[1]+1)) {
-       case 'c':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -c <compiler option>\n"
-                       "Tests for whether cl.exe supports an option\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return CheckForCompilerFeature(argv[2]);
-       case 'l':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -l <linker option>\n"
-                       "Tests for whether link.exe supports an option\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return CheckForLinkerFeature(argv[2]);
-       case 'f':
-           if (argc == 2) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -f <string> <substring>\n"
-                       "Find a substring within another\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           } else if (argc == 3) {
-               /*
-                * If the string is blank, there is no match.
-                */
-
-               return 0;
-           } else {
-               return IsIn(argv[2], argv[3]);
-           }
-       case 's':
-           if (argc == 2) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -s <substitutions file> <file>\n"
-                       "Perform a set of string map type substutitions on a file\n"
-                       "exitcodes: 0\n",
-                       argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return SubstituteFile(argv[2], argv[3]);
-       case 'V':
-           if (argc != 4) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                   "usage: %s -V filename matchstring\n"
-                   "Extract a version from a file:\n"
-                   "eg: pkgIndex.tcl \"package ifneeded http\"",
-                   argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                   &dwWritten, NULL);
-               return 0;
-           }
-           printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'));
-           return 0;
-       case 'Q':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                   "usage: %s -Q path\n"
-                   "Emit the fully qualified path\n"
-                   "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                   &dwWritten, NULL);
-               return 2;
-           }
-           return QualifyPath(argv[2]);
-       }
-    }
-    chars = snprintf(msg, sizeof(msg) - 1,
-           "usage: %s -c|-f|-l|-Q|-s|-V ...\n"
-           "This is a little helper app to equalize shell differences between WinNT and\n"
-           "Win9x and get nmake.exe to accomplish its job.\n",
-           argv[0]);
-    WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
-    return 2;
-}
-\f
-static int
-CheckForCompilerFeature(
-    const char *option)
-{
-    STARTUPINFO si;
-    PROCESS_INFORMATION pi;
-    SECURITY_ATTRIBUTES sa;
-    DWORD threadID;
-    char msg[300];
-    BOOL ok;
-    HANDLE hProcess, h, pipeThreads[2];
-    char cmdline[100];
-
-    hProcess = GetCurrentProcess();
-
-    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
-    ZeroMemory(&si, sizeof(STARTUPINFO));
-    si.cb = sizeof(STARTUPINFO);
-    si.dwFlags   = STARTF_USESTDHANDLES;
-    si.hStdInput = INVALID_HANDLE_VALUE;
-
-    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
-    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
-    sa.lpSecurityDescriptor = NULL;
-    sa.bInheritHandle = FALSE;
-
-    /*
-     * Create a non-inheritible pipe.
-     */
-
-    CreatePipe(&Out.pipe, &h, &sa, 0);
-
-    /*
-     * Dupe the write side, make it inheritible, and close the original.
-     */
-
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Same as above, but for the error side.
-     */
-
-    CreatePipe(&Err.pipe, &h, &sa, 0);
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Base command line.
-     */
-
-    lstrcpy(cmdline, "cl.exe -nologo -c -TC -Zs -X -Fp.\\_junk.pch ");
-
-    /*
-     * Append our option for testing
-     */
-
-    lstrcat(cmdline, option);
-
-    /*
-     * Filename to compile, which exists, but is nothing and empty.
-     */
-
-    lstrcat(cmdline, " .\\nul");
-
-    ok = CreateProcess(
-           NULL,           /* Module name. */
-           cmdline,        /* Command line. */
-           NULL,           /* Process handle not inheritable. */
-           NULL,           /* Thread handle not inheritable. */
-           TRUE,           /* yes, inherit handles. */
-           DETACHED_PROCESS, /* No console for you. */
-           NULL,           /* Use parent's environment block. */
-           NULL,           /* Use parent's starting directory. */
-           &si,            /* Pointer to STARTUPINFO structure. */
-           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
-
-    if (!ok) {
-       DWORD err = GetLastError();
-       int chars = snprintf(msg, sizeof(msg) - 1,
-               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
-
-       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
-               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
-               (300-chars), 0);
-       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
-       return 2;
-    }
-
-    /*
-     * Close our references to the write handles that have now been inherited.
-     */
-
-    CloseHandle(si.hStdOutput);
-    CloseHandle(si.hStdError);
-
-    WaitForInputIdle(pi.hProcess, 5000);
-    CloseHandle(pi.hThread);
-
-    /*
-     * Start the pipe reader threads.
-     */
-
-    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
-    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
-
-    /*
-     * Block waiting for the process to end.
-     */
-
-    WaitForSingleObject(pi.hProcess, INFINITE);
-    CloseHandle(pi.hProcess);
-
-    /*
-     * Wait for our pipe to get done reading, should it be a little slow.
-     */
-
-    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
-    CloseHandle(pipeThreads[0]);
-    CloseHandle(pipeThreads[1]);
-
-    /*
-     * Look for the commandline warning code in both streams.
-     *  - in MSVC 6 & 7 we get D4002, in MSVC 8 we get D9002.
-     */
-
-    return !(strstr(Out.buffer, "D4002") != NULL
-             || strstr(Err.buffer, "D4002") != NULL
-             || strstr(Out.buffer, "D9002") != NULL
-             || strstr(Err.buffer, "D9002") != NULL
-             || strstr(Out.buffer, "D2021") != NULL
-             || strstr(Err.buffer, "D2021") != NULL);
-}
-\f
-static int
-CheckForLinkerFeature(
-    const char *option)
-{
-    STARTUPINFO si;
-    PROCESS_INFORMATION pi;
-    SECURITY_ATTRIBUTES sa;
-    DWORD threadID;
-    char msg[300];
-    BOOL ok;
-    HANDLE hProcess, h, pipeThreads[2];
-    char cmdline[100];
-
-    hProcess = GetCurrentProcess();
-
-    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
-    ZeroMemory(&si, sizeof(STARTUPINFO));
-    si.cb = sizeof(STARTUPINFO);
-    si.dwFlags   = STARTF_USESTDHANDLES;
-    si.hStdInput = INVALID_HANDLE_VALUE;
-
-    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
-    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
-    sa.lpSecurityDescriptor = NULL;
-    sa.bInheritHandle = TRUE;
-
-    /*
-     * Create a non-inheritible pipe.
-     */
-
-    CreatePipe(&Out.pipe, &h, &sa, 0);
-
-    /*
-     * Dupe the write side, make it inheritible, and close the original.
-     */
-
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Same as above, but for the error side.
-     */
-
-    CreatePipe(&Err.pipe, &h, &sa, 0);
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Base command line.
-     */
-
-    lstrcpy(cmdline, "link.exe -nologo ");
-
-    /*
-     * Append our option for testing.
-     */
-
-    lstrcat(cmdline, option);
-
-    ok = CreateProcess(
-           NULL,           /* Module name. */
-           cmdline,        /* Command line. */
-           NULL,           /* Process handle not inheritable. */
-           NULL,           /* Thread handle not inheritable. */
-           TRUE,           /* yes, inherit handles. */
-           DETACHED_PROCESS, /* No console for you. */
-           NULL,           /* Use parent's environment block. */
-           NULL,           /* Use parent's starting directory. */
-           &si,            /* Pointer to STARTUPINFO structure. */
-           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
-
-    if (!ok) {
-       DWORD err = GetLastError();
-       int chars = snprintf(msg, sizeof(msg) - 1,
-               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
-
-       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
-               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
-               (300-chars), 0);
-       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
-       return 2;
-    }
-
-    /*
-     * Close our references to the write handles that have now been inherited.
-     */
-
-    CloseHandle(si.hStdOutput);
-    CloseHandle(si.hStdError);
-
-    WaitForInputIdle(pi.hProcess, 5000);
-    CloseHandle(pi.hThread);
-
-    /*
-     * Start the pipe reader threads.
-     */
-
-    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
-    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
-
-    /*
-     * Block waiting for the process to end.
-     */
-
-    WaitForSingleObject(pi.hProcess, INFINITE);
-    CloseHandle(pi.hProcess);
-
-    /*
-     * Wait for our pipe to get done reading, should it be a little slow.
-     */
-
-    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
-    CloseHandle(pipeThreads[0]);
-    CloseHandle(pipeThreads[1]);
-
-    /*
-     * Look for the commandline warning code in the stderr stream.
-     */
-
-    return !(strstr(Out.buffer, "LNK1117") != NULL ||
-           strstr(Err.buffer, "LNK1117") != NULL ||
-           strstr(Out.buffer, "LNK4044") != NULL ||
-           strstr(Err.buffer, "LNK4044") != NULL);
-}
-\f
-static DWORD WINAPI
-ReadFromPipe(
-    LPVOID args)
-{
-    pipeinfo *pi = (pipeinfo *) args;
-    char *lastBuf = pi->buffer;
-    DWORD dwRead;
-    BOOL ok;
-
-  again:
-    if (lastBuf - pi->buffer + CHUNK > STATICBUFFERSIZE) {
-       CloseHandle(pi->pipe);
-       return (DWORD)-1;
-    }
-    ok = ReadFile(pi->pipe, lastBuf, CHUNK, &dwRead, 0L);
-    if (!ok || dwRead == 0) {
-       CloseHandle(pi->pipe);
-       return 0;
-    }
-    lastBuf += dwRead;
-    goto again;
-
-    return 0;  /* makes the compiler happy */
-}
-\f
-static int
-IsIn(
-    const char *string,
-    const char *substring)
-{
-    return (strstr(string, substring) != NULL);
-}
-\f
-/*
- * GetVersionFromFile --
- *     Looks for a match string in a file and then returns the version
- *     following the match where a version is anything acceptable to
- *     package provide or package ifneeded.
- */
-
-static const char *
-GetVersionFromFile(
-    const char *filename,
-    const char *match,
-    int numdots)
-{
-    size_t cbBuffer = 100;
-    static char szBuffer[100];
-    char *szResult = NULL;
-    FILE *fp = fopen(filename, "rt");
-
-    if (fp != NULL) {
-       /*
-        * Read data until we see our match string.
-        */
-
-       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
-           LPSTR p, q;
-
-           p = strstr(szBuffer, match);
-           if (p != NULL) {
-               /*
-                * Skip to first digit after the match.
-                */
-
-               p += strlen(match);
-               while (*p && !isdigit(*p)) {
-                   ++p;
-               }
-
-               /*
-                * Find ending whitespace.
-                */
-
-               q = p;
-               while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q)
-                           && (!strchr("ab", q[-1])) || --numdots))) {
-                   ++q;
-               }
-
-               memcpy(szBuffer, p, q - p);
-               szBuffer[q-p] = 0;
-               szResult = szBuffer;
-               break;
-           }
-       }
-       fclose(fp);
-    }
-    return szResult;
-}
-\f
-/*
- * List helpers for the SubstituteFile function
- */
-
-typedef struct list_item_t {
-    struct list_item_t *nextPtr;
-    char * key;
-    char * value;
-} list_item_t;
-
-/* insert a list item into the list (list may be null) */
-static list_item_t *
-list_insert(list_item_t **listPtrPtr, const char *key, const char *value)
-{
-    list_item_t *itemPtr = malloc(sizeof(list_item_t));
-    if (itemPtr) {
-       itemPtr->key = strdup(key);
-       itemPtr->value = strdup(value);
-       itemPtr->nextPtr = NULL;
-
-       while(*listPtrPtr) {
-           listPtrPtr = &(*listPtrPtr)->nextPtr;
-       }
-       *listPtrPtr = itemPtr;
-    }
-    return itemPtr;
-}
-
-static void
-list_free(list_item_t **listPtrPtr)
-{
-    list_item_t *tmpPtr, *listPtr = *listPtrPtr;
-    while (listPtr) {
-       tmpPtr = listPtr;
-       listPtr = listPtr->nextPtr;
-       free(tmpPtr->key);
-       free(tmpPtr->value);
-       free(tmpPtr);
-    }
-}
-\f
-/*
- * SubstituteFile --
- *     As windows doesn't provide anything useful like sed and it's unreliable
- *     to use the tclsh you are building against (consider x-platform builds -
- *     eg compiling AMD64 target from IX86) we provide a simple substitution
- *     option here to handle autoconf style substitutions.
- *     The substitution file is whitespace and line delimited. The file should
- *     consist of lines matching the regular expression:
- *       \s*\S+\s+\S*$
- *
- *     Usage is something like:
- *       nmakehlp -S << $** > $@
- *        @PACKAGE_NAME@ $(PACKAGE_NAME)
- *        @PACKAGE_VERSION@ $(PACKAGE_VERSION)
- *        <<
- */
-
-static int
-SubstituteFile(
-    const char *substitutions,
-    const char *filename)
-{
-    size_t cbBuffer = 1024;
-    static char szBuffer[1024], szCopy[1024];
-    char *szResult = NULL;
-    list_item_t *substPtr = NULL;
-    FILE *fp, *sp;
-
-    fp = fopen(filename, "rt");
-    if (fp != NULL) {
-
-       /*
-        * Build a list of substutitions from the first filename
-        */
-
-       sp = fopen(substitutions, "rt");
-       if (sp != NULL) {
-           while (fgets(szBuffer, cbBuffer, sp) != NULL) {
-               char *ks, *ke, *vs, *ve;
-               ks = szBuffer;
-               while (ks && *ks && isspace(*ks)) ++ks;
-               ke = ks;
-               while (ke && *ke && !isspace(*ke)) ++ke;
-               vs = ke;
-               while (vs && *vs && isspace(*vs)) ++vs;
-               ve = vs;
-               while (ve && *ve && !(*ve == '\r' || *ve == '\n')) ++ve;
-               *ke = 0, *ve = 0;
-               list_insert(&substPtr, ks, vs);
-           }
-           fclose(sp);
-       }
-
-       /* debug: dump the list */
-#ifdef _DEBUG
-       {
-           int n = 0;
-           list_item_t *p = NULL;
-           for (p = substPtr; p != NULL; p = p->nextPtr, ++n) {
-               fprintf(stderr, "% 3d '%s' => '%s'\n", n, p->key, p->value);
-           }
-       }
-#endif
-
-       /*
-        * Run the substitutions over each line of the input
-        */
-
-       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
-           list_item_t *p = NULL;
-           for (p = substPtr; p != NULL; p = p->nextPtr) {
-               char *m = strstr(szBuffer, p->key);
-               if (m) {
-                   char *cp, *op, *sp;
-                   cp = szCopy;
-                   op = szBuffer;
-                   while (op != m) *cp++ = *op++;
-                   sp = p->value;
-                   while (sp && *sp) *cp++ = *sp++;
-                   op += strlen(p->key);
-                   while (*op) *cp++ = *op++;
-                   *cp = 0;
-                   memcpy(szBuffer, szCopy, sizeof(szCopy));
-               }
-           }
-           printf(szBuffer);
-       }
-
-       list_free(&substPtr);
-    }
-    fclose(fp);
-    return 0;
-}
-\f
-/*
- * QualifyPath --
- *
- *     This composes the current working directory with a provided path
- *     and returns the fully qualified and normalized path.
- *     Mostly needed to setup paths for testing.
- */
-
-static int
-QualifyPath(
-    const char *szPath)
-{
-    char szCwd[MAX_PATH + 1];
-    char szTmp[MAX_PATH + 1];
-    char *p;
-    GetCurrentDirectory(MAX_PATH, szCwd);
-    while ((p = strchr(szPath, '/')) && *p)
-       *p = '\\';
-    PathCombine(szTmp, szCwd, szPath);
-    PathCanonicalize(szCwd, szTmp);
-    printf("%s\n", szCwd);
-    return 0;
-}
-
-/*
- * Local variables:
- *   mode: c
- *   c-basic-offset: 4
- *   fill-column: 78
- *   indent-tabs-mode: t
- *   tab-width: 8
- * End:
- */
diff --git a/pkgs/tdbcmysql1.0.5/win/rules.vc b/pkgs/tdbcmysql1.0.5/win/rules.vc
deleted file mode 100644 (file)
index 4b5a40e..0000000
+++ /dev/null
@@ -1,691 +0,0 @@
-#------------------------------------------------------------------------------
-# rules.vc --
-#
-#      Microsoft Visual C++ makefile include for decoding the commandline
-#      macros.  This file does not need editing to build Tcl.
-#
-#      This version is modified from the Tcl source version to support
-#      building extensions using nmake.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-#
-# Copyright (c) 2001-2003 David Gravereaux.
-# Copyright (c) 2003-2008 Patrick Thoyts
-#------------------------------------------------------------------------------
-
-!ifndef _RULES_VC
-_RULES_VC = 1
-
-cc32           = $(CC)   # built-in default.
-link32         = link
-lib32          = lib
-rc32           = $(RC)   # built-in default.
-
-!ifndef INSTALLDIR
-### Assume the normal default.
-_INSTALLDIR    = C:\Program Files\Tcl
-!else
-### Fix the path separators.
-_INSTALLDIR    = $(INSTALLDIR:/=\)
-!endif
-
-#----------------------------------------------------------
-# Set the proper copy method to avoid overwrite questions
-# to the user when copying files and selecting the right
-# "delete all" method.
-#----------------------------------------------------------
-
-!if "$(OS)" == "Windows_NT"
-RMDIR  = rmdir /S /Q
-ERRNULL  = 2>NUL
-!if ![ver | find "4.0" > nul]
-CPY    = echo y | xcopy /i >NUL
-COPY   = copy >NUL
-!else
-CPY    = xcopy /i /y >NUL
-COPY   = copy /y >NUL
-!endif
-!else # "$(OS)" != "Windows_NT"
-CPY    = xcopy /i >_JUNK.OUT # On Win98 NUL does not work here.
-COPY   = copy >_JUNK.OUT # On Win98 NUL does not work here.
-RMDIR  = deltree /Y
-NULL    = \NUL # Used in testing directory existence
-ERRNULL = >NUL # Win9x shell cannot redirect stderr
-!endif
-MKDIR   = mkdir
-
-#------------------------------------------------------------------------------
-# Determine the host and target architectures and compiler version.
-#------------------------------------------------------------------------------
-
-_HASH=^#
-_VC_MANIFEST_EMBED_EXE=
-_VC_MANIFEST_EMBED_DLL=
-VCVER=0
-!if ![echo VCVERSION=_MSC_VER > vercl.x] \
-    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
-    && ![echo ARCH=IX86 >> vercl.x] \
-    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
-    && ![echo ARCH=AMD64 >> vercl.x] \
-    && ![echo $(_HASH)endif >> vercl.x] \
-    && ![cl -nologo -TC -P vercl.x $(ERRNULL)]
-!include vercl.i
-!if ![echo VCVER= ^\> vercl.vc] \
-    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
-!include vercl.vc
-!endif
-!endif
-!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]
-!endif
-
-!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]
-NATIVE_ARCH=IX86
-!else
-NATIVE_ARCH=AMD64
-!endif
-
-# Since MSVC8 we must deal with manifest resources.
-!if $(VCVERSION) >= 1400
-_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1
-_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2
-!endif
-
-!ifndef MACHINE
-MACHINE=$(ARCH)
-!endif
-
-!ifndef CFG_ENCODING
-CFG_ENCODING   = \"cp1252\"
-!endif
-
-!message ===============================================================================
-
-#----------------------------------------------------------
-# build the helper app we need to overcome nmake's limiting
-# environment.
-#----------------------------------------------------------
-
-!if !exist(nmakehlp.exe)
-!if [$(cc32) -nologo nmakehlp.c -link -subsystem:console > nul]
-!endif
-!endif
-
-#----------------------------------------------------------
-# Test for compiler features
-#----------------------------------------------------------
-
-### test for optimizations
-!if [nmakehlp -c -Ot]
-!message *** Compiler has 'Optimizations'
-OPTIMIZING     = 1
-!else
-!message *** Compiler does not have 'Optimizations'
-OPTIMIZING     = 0
-!endif
-
-OPTIMIZATIONS   =
-
-!if [nmakehlp -c -Ot]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Ot
-!endif
-
-!if [nmakehlp -c -Oi]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Oi
-!endif
-
-!if [nmakehlp -c -Op]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Op
-!endif
-
-!if [nmakehlp -c -fp:strict]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -fp:strict
-!endif
-
-!if [nmakehlp -c -Gs]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Gs
-!endif
-
-!if [nmakehlp -c -GS]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS
-!endif
-
-!if [nmakehlp -c -GL]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL
-!endif
-
-DEBUGFLAGS     =
-
-!if [nmakehlp -c -RTC1]
-DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1
-!elseif [nmakehlp -c -GZ]
-DEBUGFLAGS     = $(DEBUGFLAGS) -GZ
-!endif
-
-COMPILERFLAGS  =-W3
-
-# In v13 -GL and -YX are incompatible.
-!if [nmakehlp -c -YX]
-!if ![nmakehlp -c -GL]
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX
-!endif
-!endif
-
-!if "$(MACHINE)" == "IX86"
-### test for pentium errata
-!if [nmakehlp -c -QI0f]
-!message *** Compiler has 'Pentium 0x0f fix'
-COMPILERFLAGS  = $(COMPILERFLAGS) -QI0f
-!else
-!message *** Compiler does not have 'Pentium 0x0f fix'
-!endif
-!endif
-
-!if "$(MACHINE)" == "IA64"
-### test for Itanium errata
-!if [nmakehlp -c -QIA64_Bx]
-!message *** Compiler has 'B-stepping errata workarounds'
-COMPILERFLAGS   = $(COMPILERFLAGS) -QIA64_Bx
-!else
-!message *** Compiler does not have 'B-stepping errata workarounds'
-!endif
-!endif
-
-!if "$(MACHINE)" == "IX86"
-### test for -align:4096, when align:512 will do.
-!if [nmakehlp -l -opt:nowin98]
-!message *** Linker has 'Win98 alignment problem'
-ALIGN98_HACK   = 1
-!else
-!message *** Linker does not have 'Win98 alignment problem'
-ALIGN98_HACK   = 0
-!endif
-!else
-ALIGN98_HACK   = 0
-!endif
-
-LINKERFLAGS     =
-
-!if [nmakehlp -l -ltcg]
-LINKERFLAGS     =-ltcg
-!endif
-
-#----------------------------------------------------------
-# Decode the options requested.
-#----------------------------------------------------------
-
-!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]
-STATIC_BUILD   = 0
-TCL_THREADS    = 1
-DEBUG          = 0
-SYMBOLS                = 0
-PROFILE                = 0
-PGO            = 0
-MSVCRT         = 0
-LOIMPACT       = 0
-UNCHECKED       = 0
-!else
-!if [nmakehlp -f $(OPTS) "static"]
-!message *** Doing static
-STATIC_BUILD   = 1
-!else
-STATIC_BUILD   = 0
-!endif
-!if [nmakehlp -f $(OPTS) "msvcrt"]
-!message *** Doing msvcrt
-MSVCRT         = 1
-!else
-MSVCRT         = 0
-!endif
-!if [nmakehlp -f $(OPTS) "nothreads"]
-!message *** Compile explicitly for non-threaded tcl
-TCL_THREADS    = 0
-!else
-TCL_THREADS     = 1
-!endif
-!if [nmakehlp -f $(OPTS) "symbols"]
-!message *** Doing symbols
-DEBUG          = 1
-!else
-DEBUG          = 0
-!endif
-!if [nmakehlp -f $(OPTS) "pdbs"]
-!message *** Doing pdbs
-SYMBOLS                = 1
-!else
-SYMBOLS                = 0
-!endif
-!if [nmakehlp -f $(OPTS) "profile"]
-!message *** Doing profile
-PROFILE                = 1
-!else
-PROFILE                = 0
-!endif
-!if [nmakehlp -f $(OPTS) "pgi"]
-!message *** Doing profile guided optimization instrumentation
-PGO            = 1
-!elseif [nmakehlp -f $(OPTS) "pgo"]
-!message *** Doing profile guided optimization
-PGO            = 2
-!else
-PGO            = 0
-!endif
-!if [nmakehlp -f $(OPTS) "loimpact"]
-!message *** Doing loimpact
-LOIMPACT       = 1
-!else
-LOIMPACT       = 0
-!endif
-!if [nmakehlp -f $(OPTS) "unchecked"]
-!message *** Doing unchecked
-UNCHECKED = 1
-!else
-UNCHECKED = 0
-!endif
-!endif
-
-
-!if !$(STATIC_BUILD)
-# Make sure we don't build overly fat DLLs.
-MSVCRT         = 1
-# We shouldn't statically put the extensions inside the shell when dynamic.
-TCL_USE_STATIC_PACKAGES = 0
-!endif
-
-
-#----------------------------------------------------------
-# Figure-out how to name our intermediate and output directories.
-# We wouldn't want different builds to use the same .obj files
-# by accident.
-#----------------------------------------------------------
-
-#----------------------------------------
-# Naming convention:
-#   t = full thread support.
-#   s = static library (as opposed to an
-#      import library)
-#   g = linked to the debug enabled C
-#      run-time.
-#   x = special static build when it
-#      links to the dynamic C run-time.
-#----------------------------------------
-SUFX       = sgx
-
-!if $(DEBUG)
-BUILDDIRTOP = Debug
-!else
-BUILDDIRTOP = Release
-!endif
-
-!if "$(MACHINE)" != "IX86"
-BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)
-!endif
-!if $(VCVER) > 6
-BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)
-!endif
-
-!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)
-SUFX       = $(SUFX:g=)
-!endif
-
-TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
-
-!if !$(STATIC_BUILD)
-TMP_DIRFULL = $(TMP_DIRFULL:Static=)
-SUFX       = $(SUFX:s=)
-EXT        = dll
-!if $(MSVCRT)
-TMP_DIRFULL = $(TMP_DIRFULL:X=)
-SUFX       = $(SUFX:x=)
-!endif
-!else
-TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
-EXT        = lib
-!if !$(MSVCRT)
-TMP_DIRFULL = $(TMP_DIRFULL:X=)
-SUFX       = $(SUFX:x=)
-!endif
-!endif
-
-!if !$(TCL_THREADS)
-TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)
-SUFX       = $(SUFX:t=)
-!endif
-
-!ifndef TMP_DIR
-TMP_DIR            = $(TMP_DIRFULL)
-!ifndef OUT_DIR
-OUT_DIR            = .\$(BUILDDIRTOP)
-!endif
-!else
-!ifndef OUT_DIR
-OUT_DIR            = $(TMP_DIR)
-!endif
-!endif
-
-
-#----------------------------------------------------------
-# Decode the statistics requested.
-#----------------------------------------------------------
-
-!if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"]
-TCL_MEM_DEBUG      = 0
-TCL_COMPILE_DEBUG   = 0
-!else
-!if [nmakehlp -f $(STATS) "memdbg"]
-!message *** Doing memdbg
-TCL_MEM_DEBUG      = 1
-!else
-TCL_MEM_DEBUG      = 0
-!endif
-!if [nmakehlp -f $(STATS) "compdbg"]
-!message *** Doing compdbg
-TCL_COMPILE_DEBUG   = 1
-!else
-TCL_COMPILE_DEBUG   = 0
-!endif
-!endif
-
-
-#----------------------------------------------------------
-# Decode the checks requested.
-#----------------------------------------------------------
-
-!if "$(CHECKS)" == "" || [nmakehlp -f "$(CHECKS)" "none"]
-TCL_NO_DEPRECATED          = 0
-WARNINGS                   = -W3
-!else
-!if [nmakehlp -f $(CHECKS) "nodep"]
-!message *** Doing nodep check
-TCL_NO_DEPRECATED          = 1
-!else
-TCL_NO_DEPRECATED          = 0
-!endif
-!if [nmakehlp -f $(CHECKS) "fullwarn"]
-!message *** Doing full warnings check
-WARNINGS                   = -W4
-!if [nmakehlp -l -warn:3]
-LINKERFLAGS                = $(LINKERFLAGS) -warn:3
-!endif
-!else
-WARNINGS                   = -W3
-!endif
-!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]
-!message *** Doing 64bit portability warnings
-WARNINGS                   = $(WARNINGS) -Wp64
-!endif
-!endif
-
-!if $(PGO) > 1
-!if [nmakehlp -l -ltcg:pgoptimize]
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize
-!else
-MSG=^
-This compiler does not support profile guided optimization.
-!error $(MSG)
-!endif
-!elseif $(PGO) > 0
-!if [nmakehlp -l -ltcg:pginstrument]
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument
-!else
-MSG=^
-This compiler does not support profile guided optimization.
-!error $(MSG)
-!endif
-!endif
-
-#----------------------------------------------------------
-# Set our defines now armed with our options.
-#----------------------------------------------------------
-
-OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS
-
-!if $(TCL_MEM_DEBUG)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG
-!endif
-!if $(TCL_COMPILE_DEBUG)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
-!endif
-!if $(TCL_THREADS)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1
-!endif
-!if $(STATIC_BUILD)
-OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD
-!endif
-!if $(TCL_NO_DEPRECATED)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED
-!endif
-
-!if !$(DEBUG)
-OPTDEFINES     = $(OPTDEFINES) -DNDEBUG
-!if $(OPTIMIZING)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
-!endif
-!endif
-!if $(PROFILE)
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED
-!endif
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT
-!endif
-
-
-#----------------------------------------------------------
-# Get common info used when building extensions.
-#----------------------------------------------------------
-
-!if "$(PROJECT)" != "tcl"
-
-# If INSTALLDIR set to tcl root dir then reset to the lib dir.
-!if exist("$(_INSTALLDIR)\include\tcl.h")
-_INSTALLDIR=$(_INSTALLDIR)\lib
-!endif
-
-!if !defined(TCLDIR)
-!if exist("$(_INSTALLDIR)\..\include\tcl.h")
-TCLINSTALL     = 1
-_TCLDIR                = $(_INSTALLDIR)\..
-_TCL_H          = $(_INSTALLDIR)\..\include\tcl.h
-TCLDIR          = $(_INSTALLDIR)\..
-!else
-MSG=^
-Failed to find tcl.h.  Set the TCLDIR macro.
-!error $(MSG)
-!endif
-!else
-_TCLDIR        = $(TCLDIR:/=\)
-!if exist("$(_TCLDIR)\include\tcl.h")
-TCLINSTALL     = 1
-_TCL_H          = $(_TCLDIR)\include\tcl.h
-!elseif exist("$(_TCLDIR)\generic\tcl.h")
-TCLINSTALL     = 0
-_TCL_H          = $(_TCLDIR)\generic\tcl.h
-!else
-MSG =^
-Failed to find tcl.h.  The TCLDIR macro does not appear correct.
-!error $(MSG)
-!endif
-!endif
-!endif
-
-#--------------------------------------------------------------
-# Extract various version numbers from tcl headers
-# The generated file is then included in the makefile.
-#--------------------------------------------------------------
-
-!if [echo REM = This file is generated from rules.vc > versions.vc]
-!endif
-!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]
-!endif
-!if [echo TCL_MINOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]
-!endif
-!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \
-   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]
-!endif
-
-# If building the tcl core then we need additional package versions
-!if "$(PROJECT)" == "tcl"
-!if [echo PKG_HTTP_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\http\pkgIndex.tcl http >> versions.vc]
-!endif
-!if [echo PKG_TCLTEST_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\tcltest\pkgIndex.tcl tcltest >> versions.vc]
-!endif
-!if [echo PKG_MSGCAT_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\msgcat\pkgIndex.tcl msgcat >> versions.vc]
-!endif
-!if [echo PKG_PLATFORM_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform " >> versions.vc]
-!endif
-!if [echo PKG_SHELL_VER = \>> versions.vc] \
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform::shell" >> versions.vc]
-!endif
-!endif
-
-!include versions.vc
-
-#--------------------------------------------------------------
-# Setup tcl version dependent stuff headers
-#--------------------------------------------------------------
-
-!if "$(PROJECT)" != "tcl"
-
-TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)
-
-!if $(TCL_VERSION) < 81
-TCL_DOES_STUBS = 0
-!else
-TCL_DOES_STUBS = 1
-!endif
-
-!if $(TCLINSTALL)
-_TCLBINDIR      = "$(_TCLDIR)\bin"
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)$(SUFX).exe"
-!if !exist($(TCLSH)) && $(TCL_THREADS)
-TCLSH           = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)t$(SUFX).exe"
-!endif
-TCLSTUBLIB     = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"
-TCLIMPLIB      = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"
-TCL_LIBRARY    = $(_TCLDIR)\lib
-COFFBASE       = \must\have\tcl\sources\to\build\this\target
-TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target
-TCL_INCLUDES    = -I"$(_TCLDIR)\include"
-!else
-_TCLBINDIR      = $(_TCLDIR)\win\$(BUILDDIRTOP)
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)$(SUFX).exe"
-!if !exist($(TCLSH)) && $(TCL_THREADS)
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)t$(SUFX).exe"
-!endif
-TCLSTUBLIB     = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"
-TCLIMPLIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"
-TCL_LIBRARY    = $(_TCLDIR)\library
-COFFBASE       = "$(_TCLDIR)\win\coffbase.txt"
-TCLTOOLSDIR    = $(_TCLDIR)\tools
-TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"
-!endif
-
-!endif
-
-#----------------------------------------------------------
-# Optionally check for Tk info for building extensions.
-#----------------------------------------------------------
-
-!ifdef PROJECT_REQUIRES_TK
-!if !defined(TKDIR)
-!if exist("$(_INSTALLDIR)\..\include\tk.h")
-TKINSTALL      = 1
-_TKDIR         = $(_INSTALLDIR)\..
-_TK_H          = $(_TKDIR)\include\tk.h
-TKDIR          = $(_TKDIR)
-!elseif exist("$(_TCLDIR)\include\tk.h")
-TKINSTALL      = 1
-_TKDIR         = $(_TCLDIR)
-_TK_H          = $(_TKDIR)\include\tk.h
-TKDIR          = $(_TKDIR)
-!endif
-!else
-_TKDIR = $(TKDIR:/=\)
-!if exist("$(_TKDIR)\include\tk.h")
-TKINSTALL      = 1
-_TK_H          = $(_TKDIR)\include\tk.h
-!elseif exist("$(_TKDIR)\generic\tk.h")
-TKINSTALL      = 0
-_TK_H          = $(_TKDIR)\generic\tk.h
-!else
-MSG =^
-Failed to find tk.h. The TKDIR macro does not appear correct.
-!error $(MSG)
-!endif
-!endif
-!endif
-
-#-------------------------------------------------------------------------
-# Extract Tk version numbers
-#-------------------------------------------------------------------------
-
-!if defined(PROJECT_REQUIRES_TK) || "$(PROJECT)" == "tk"
-!if [echo TK_MAJOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]
-!endif
-!if [echo TK_MINOR_VERSION = \>> versions.vc] \
-   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]
-!endif
-!if [echo TK_PATCH_LEVEL = \>> versions.vc] \
-   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]
-!endif
-
-!include versions.vc
-
-TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
-TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)
-
-!if "$(PROJECT)" != "tk"
-!if $(TKINSTALL)
-_TKBINDIR       = $(_TKDIR)\bin
-WISH           = "$(_TKBINDIR)\wish$(TK_VERSION)$(SUFX).exe"
-!if !exist($(WISH)) && $(TCL_THREADS)
-WISH           = "$(_TKBINDIR)\wish$(TK_VERSION)t$(SUFX).exe"
-!endif
-TKSTUBLIB      = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"
-TK_LIBRARY     = $(_TKDIR)\lib
-TKIMPLIB       = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"
-TK_INCLUDES     = -I"$(_TKDIR)\include"
-!else
-_TKBINDIR       = $(_TKDIR)\win\$(BUILDDIRTOP)
-WISH           = "$(_TKBINDIR)\wish$(TCL_VERSION)$(SUFX).exe"
-!if !exist($(WISH)) && $(TCL_THREADS)
-WISH           = "$(_TKBINDIR)\wish$(TCL_VERSION)t$(SUFX).exe"
-!endif
-TKSTUBLIB      = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"
-TKIMPLIB       = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"
-TK_LIBRARY     = $(_TKDIR)\library
-TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
-!endif
-!endif
-
-!endif
-
-#----------------------------------------------------------
-# Setup the fully qualified OUT_DIR path as OUT_DIR_PATH
-#----------------------------------------------------------
-!if [echo OUT_DIR_PATH = \>> versions.vc] \
-    && [nmakehlp -Q "$(OUT_DIR)" >> versions.vc]
-!endif
-!include versions.vc
-
-#----------------------------------------------------------
-# Display stats being used.
-#----------------------------------------------------------
-
-!message *** Intermediate directory will be '$(TMP_DIR)'
-!message *** Output directory will be '$(OUT_DIR)'
-!message *** Suffix for binaries will be '$(SUFX)'
-!message *** Optional defines are '$(OPTDEFINES)'
-!message *** Compiler version $(VCVER). Target machine is $(MACHINE)
-!message *** Host architecture is $(NATIVE_ARCH)
-!message *** Compiler options '$(COMPILERFLAGS) $(OPTIMIZATIONS) $(DEBUGFLAGS) $(WARNINGS)'
-!message *** Link options '$(LINKERFLAGS)'
-
-!endif
similarity index 99%
rename from pkgs/tdbcmysql1.0.5/Makefile.in
rename to pkgs/tdbcmysql1.0.6/Makefile.in
index aecd9da..4c6bd47 100644 (file)
@@ -342,6 +342,7 @@ dist: dist-clean
 
        mkdir $(DIST_DIR)/win
        cp -p $(srcdir)/win/makefile.vc $(srcdir)/win/nmakehlp.c \
+               $(srcdir)/win/targets.vc $(srcdir)/win/rules-ext.vc \
                $(srcdir)/win/rules.vc $(DIST_DIR)/win/
 
        (cd $(DIST_ROOT); $(COMPRESS);)
similarity index 97%
rename from pkgs/tdbcmysql1.0.5/README
rename to pkgs/tdbcmysql1.0.6/README
index b7773c5..22d216d 100644 (file)
@@ -1,6 +1,6 @@
 README: tdbcmysql
 
-    This is the 1.0.5 source distribution of the driver for Tcl
+    This is the 1.0.6 source distribution of the driver for Tcl
     Database Connectivity (TDBC) to access MySQL databases.. TDBC and
     its drivers are available from a Fossil version control repository
     at http://tdbc.tcl.tk/
similarity index 99%
rename from pkgs/tdbcmysql1.0.5/configure
rename to pkgs/tdbcmysql1.0.6/configure
index 3886fd8..e5c49a8 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for tdbcmysql 1.0.5.
+# Generated by GNU Autoconf 2.69 for tdbcmysql 1.0.6.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='tdbcmysql'
 PACKAGE_TARNAME='tdbcmysql'
-PACKAGE_VERSION='1.0.5'
-PACKAGE_STRING='tdbcmysql 1.0.5'
+PACKAGE_VERSION='1.0.6'
+PACKAGE_STRING='tdbcmysql 1.0.6'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -620,7 +620,6 @@ ac_includes_default="\
 
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
-CONFIGURE_OUTPUTS
 TCLSH_PROG
 VC_MANIFEST_EMBED_EXE
 VC_MANIFEST_EMBED_DLL
@@ -1309,7 +1308,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures tdbcmysql 1.0.5 to adapt to many kinds of systems.
+\`configure' configures tdbcmysql 1.0.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1370,7 +1369,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of tdbcmysql 1.0.5:";;
+     short | recursive ) echo "Configuration of tdbcmysql 1.0.6:";;
    esac
   cat <<\_ACEOF
 
@@ -1378,7 +1377,7 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-threads        build with threads
+  --enable-threads        build with threads (default: on)
   --enable-shared         build and link with shared libraries (default: on)
   --enable-stubs          build and link with stub libraries. Always true for
                           shared builds (default: on)
@@ -1473,7 +1472,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-tdbcmysql configure 1.0.5
+tdbcmysql configure 1.0.6
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2075,7 +2074,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by tdbcmysql $as_me 1.0.5, which was
+It was created by tdbcmysql $as_me 1.0.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -5684,16 +5683,6 @@ $as_echo "#define NO_ERRNO_H 1" >>confdefs.h
 fi
 
 
-    ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
-if test "x$ac_cv_header_float_h" = xyes; then :
-
-else
-
-$as_echo "#define NO_FLOAT_H 1" >>confdefs.h
-
-fi
-
-
     ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default"
 if test "x$ac_cv_header_values_h" = xyes; then :
 
@@ -7583,7 +7572,7 @@ fi
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5
 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; }
 if ${ac_cv_lib_network_inet_ntoa+:} false; then :
@@ -7810,7 +7799,7 @@ fi
            CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
 
            # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            if test $doRpath = yes; then :
 
@@ -7893,7 +7882,7 @@ fi
                SHLIB_CFLAGS="-fpic"
                ;;
            esac
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            if test $doRpath = yes; then :
 
@@ -7918,7 +7907,7 @@ fi
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            LDFLAGS="$LDFLAGS -export-dynamic"
            if test $doRpath = yes; then :
@@ -9438,9 +9427,6 @@ $as_echo "${TCLSH_PROG}" >&6; }
 # which require substituting th AC variables in.  Include these here.
 #--------------------------------------------------------------------
 
-CONFIGURE_OUTPUTS="Makefile pkgIndex.tcl config.cache config.log config.status"
-
-
 ac_config_files="$ac_config_files Makefile pkgIndex.tcl"
 
 cat >confcache <<\_ACEOF
@@ -9987,7 +9973,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by tdbcmysql $as_me 1.0.5, which was
+This file was extended by tdbcmysql $as_me 1.0.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -10040,7 +10026,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-tdbcmysql config.status 1.0.5
+tdbcmysql config.status 1.0.6
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
similarity index 98%
rename from pkgs/tdbcmysql1.0.5/configure.ac
rename to pkgs/tdbcmysql1.0.6/configure.ac
index 1fab6ab..f405030 100755 (executable)
@@ -11,7 +11,7 @@ dnl   to configure the system for the local environment.
 # so you can encode the package version directly into the source files.
 #-----------------------------------------------------------------------
 
-AC_INIT([tdbcmysql], [1.0.5])
+AC_INIT([tdbcmysql], [1.0.6])
 
 #--------------------------------------------------------------------
 # Call TEA_INIT as the first TEA_ macro to set up initial vars.
@@ -212,7 +212,4 @@ TEA_PROG_TCLSH
 # which require substituting th AC variables in.  Include these here.
 #--------------------------------------------------------------------
 
-CONFIGURE_OUTPUTS="Makefile pkgIndex.tcl config.cache config.log config.status"
-AC_SUBST(CONFIGURE_OUTPUTS)
-
 AC_OUTPUT([Makefile pkgIndex.tcl])
similarity index 97%
rename from pkgs/itcl4.1.0/tclconfig/tcl.m4
rename to pkgs/tdbcmysql1.0.6/tclconfig/tcl.m4
index 203a05d..e8234a2 100644 (file)
@@ -135,8 +135,9 @@ AC_DEFUN([TEA_PATH_TCLCONFIG], [
                for i in `ls -d ${libdir} 2>/dev/null` \
                        `ls -d ${exec_prefix}/lib 2>/dev/null` \
                        `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
                        `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/pkg/lib 2>/dev/null` \
                        `ls -d /usr/lib 2>/dev/null` \
                        `ls -d /usr/lib64 2>/dev/null` \
                        `ls -d /usr/lib/tcl8.6 2>/dev/null` \
@@ -349,6 +350,8 @@ AC_DEFUN([TEA_PATH_TKCONFIG], [
 #              TCL_BIN_DIR
 #              TCL_SRC_DIR
 #              TCL_LIB_FILE
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
 #------------------------------------------------------------------------
 
 AC_DEFUN([TEA_LOAD_TCLCONFIG], [
@@ -783,7 +786,7 @@ AC_DEFUN([TEA_ENABLE_SHARED], [
 AC_DEFUN([TEA_ENABLE_THREADS], [
     AC_ARG_ENABLE(threads,
        AC_HELP_STRING([--enable-threads],
-           [build with threads]),
+           [build with threads (default: on)]),
        [tcl_ok=$enableval], [tcl_ok=yes])
 
     if test "${enable_threads+set}" = set; then
@@ -1499,7 +1502,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
            ;;
        HP-UX-*.11.*)
@@ -1610,7 +1613,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
            CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
 
            # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            AS_IF([test $doRpath = yes], [
                CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
@@ -1649,37 +1652,21 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
        OpenBSD-*)
            arch=`arch -s`
            case "$arch" in
-           vax)
-               SHLIB_SUFFIX=""
-               SHARED_LIB_SUFFIX=""
-               LDFLAGS=""
+           alpha|sparc64)
+               SHLIB_CFLAGS="-fPIC"
                ;;
            *)
-               case "$arch" in
-               alpha|sparc64)
-                   SHLIB_CFLAGS="-fPIC"
-                   ;;
-               *)
-                   SHLIB_CFLAGS="-fpic"
-                   ;;
-               esac
-               SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-               SHLIB_SUFFIX=".so"
-               AS_IF([test $doRpath = yes], [
-                   CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
-               LDFLAGS="-Wl,-export-dynamic"
-               ;;
-           esac
-           case "$arch" in
-           vax)
-               CFLAGS_OPTIMIZE="-O1"
-               ;;
-           *)
-               CFLAGS_OPTIMIZE="-O2"
+               SHLIB_CFLAGS="-fpic"
                ;;
            esac
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
+           LDFLAGS="-Wl,-export-dynamic"
+           CFLAGS_OPTIMIZE="-O2"
            AS_IF([test "${TCL_THREADS}" = "1"], [
                # On OpenBSD:   Compile with -pthread
                #               Don't link with -lpthread
@@ -1693,7 +1680,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            LDFLAGS="$LDFLAGS -export-dynamic"
            AS_IF([test $doRpath = yes], [
@@ -2378,7 +2365,6 @@ closedir(d);
 
     # TEA specific:
     AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have <errno.h>?])])
-    AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have <float.h>?])])
     AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have <values.h>?])])
     AC_CHECK_HEADER(limits.h,
        [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have <limits.h>?])],
@@ -4236,6 +4222,114 @@ AC_DEFUN([TEA_PATH_CELIB], [
        fi
     fi
 ])
+
+###
+# Tip 430 - ZipFS Modifications
+###
+#------------------------------------------------------------------------
+# SC_ZIPFS_SUPPORT
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
+#              TCL_ZIPFS_FLAG
+#              ZIP_PROG
+#------------------------------------------------------------------------
+
+#------------------------------------------------------------------------
+# SC_PROG_ZIP
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              ZIP_PROG
+#       ZIP_PROG_OPTIONS
+#       ZIP_PROG_VFSSEARCH
+#       ZIP_INSTALL_OBJS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ZIPFS_SUPPORT], [
+    AC_MSG_CHECKING([for zipfs support])
+    ZIP_PROG=""
+    ZIP_PROG_OPTIONS=""
+    ZIP_PROG_VFSSEARCH=""
+    INSTALL_MSGS=""
+    # If our native tclsh processes the "install" command line option
+    # we can use it to mint zip files
+    AS_IF([$TCLSH_PROG install],[
+      ZIP_PROG=${TCLSH_PROG}
+      ZIP_PROG_OPTIONS="install mkzip"
+      ZIP_PROG_VFSSEARCH="."
+      AC_MSG_RESULT([Can use Native Tclsh for Zip encoding])
+    ])
+    if test "x$ZIP_PROG" = "x" ; then
+        AC_CACHE_VAL(ac_cv_path_zip, [
+        search_path=`echo ${PATH} | sed -e 's/:/ /g'`
+        for dir in $search_path ; do
+            for j in `ls -r $dir/zip 2> /dev/null` \
+                `ls -r $dir/zip 2> /dev/null` ; do
+            if test x"$ac_cv_path_zip" = x ; then
+                if test -f "$j" ; then
+                ac_cv_path_zip=$j
+                break
+                fi
+            fi
+            done
+        done
+        ])
+        if test -f "$ac_cv_path_zip" ; then
+            ZIP_PROG="$ac_cv_path_zip "
+            AC_MSG_RESULT([$ZIP_PROG])
+            ZIP_PROG_OPTIONS="-rq"
+            ZIP_PROG_VFSSEARCH="."
+            AC_MSG_RESULT([Found INFO Zip in environment])
+            # Use standard arguments for zip
+        fi
+    fi
+    if test "x$ZIP_PROG" = "x" ; then
+           # It is not an error if an installed version of Zip can't be located.
+        ZIP_PROG=""
+        ZIP_PROG_OPTIONS=""
+        ZIP_PROG_VFSSEARCH=""
+        TCL_ZIPFS_SUPPORT=0
+        TCL_ZIPFS_FLAG=
+    else
+        # ZIPFS Support
+       eval "TCL_ZIP_FILE=\"${TCL_ZIP_FILE}\""
+       if test ${TCL_ZIP_FILE} = "" ; then
+          TCL_ZIPFS_SUPPORT=0
+          TCL_ZIPFS_FLAG=
+          INSTALL_LIBRARIES=install-libraries
+          INSTALL_MSGS=install-msgs
+       else
+           if test ${SHARED_BUILD} = 1 ; then
+              TCL_ZIPFS_SUPPORT=1
+              INSTALL_LIBRARIES=install-libraries-zipfs-shared
+           else
+              TCL_ZIPFS_SUPPORT=2
+              INSTALL_LIBRARIES=install-libraries-zipfs-static
+           fi
+          TCL_ZIPFS_FLAG=-DTCL_ZIPFS_SUPPORT
+       fi
+    fi
+
+    AC_SUBST(TCL_ZIP_FILE)
+    AC_SUBST(TCL_ZIPFS_SUPPORT)
+    AC_SUBST(TCL_ZIPFS_FLAG)
+    AC_SUBST(ZIP_PROG)
+    AC_SUBST(ZIP_PROG_OPTIONS)
+    AC_SUBST(ZIP_PROG_VFSSEARCH)
+    AC_SUBST(INSTALL_LIBRARIES)
+    AC_SUBST(INSTALL_MSGS)
+])
+
 # Local Variables:
 # mode: autoconf
 # End:
diff --git a/pkgs/tdbcmysql1.0.6/win/makefile.vc b/pkgs/tdbcmysql1.0.6/win/makefile.vc
new file mode 100644 (file)
index 0000000..691d627
--- /dev/null
@@ -0,0 +1,111 @@
+#------------------------------------------------------------- -*- makefile -*-
+#
+# Makefile for TBDC MySQL interface
+#
+# Basic build, test and install
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir install
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir test
+#
+# For other build options (debug, static etc.)
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+# 
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+#------------------------------------------------------------------------------
+
+PROJECT = tdbcmysql
+# Tcl 8.6 etc. compile with /DUNICODE. TDBC pre-nmake reform compiled
+# without -DUNICODE. Keep that behaviour for now. TBD
+USE_WIDECHAR_API  = 0
+
+!include "rules-ext.vc"
+
+# nmakehelp -V <file> <tag> will search the file for tag, skips until a
+#      number and returns all character until a character not in [0-9.ab]
+#      is read.
+!if [echo REM = This file is generated from Makefile.vc > versions.vc]
+!endif
+!if [echo TCL_VERSION_REQ = \>> versions.vc] \
+   && [nmakehlp -V ..\configure.ac TCL_VERSION_REQ >> versions.vc]
+!endif
+!include "versions.vc"
+
+PRJ_OBJS = \
+       $(TMP_DIR)\tdbcmysql.obj \
+       $(TMP_DIR)\mysqlStubInit.obj
+
+# Uncomment the following line if you want to build and install stubs
+# PRJ_STUBOBJS = $(TMP_DIR)\mysqlStubInit.obj
+
+PRJ_HEADERS = \
+       $(GENERICDIR)\fakemysql.h \
+       $(GENERICDIR)\mysqlStubs.h
+
+# Locate TDBC headers and libraries.
+# In principle, we don't need the TDBC source directory, and an installed
+# TDBC should suffice. But that needs additional machinery not implemented
+# yet.
+!if [echo TDBC_DIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tdbcInt.h >> nmakehlp.out]
+!error Could not locate TDBC source directory.
+!endif
+!include nmakehlp.out
+
+# Get the TDBC version from its configure.ac
+!if [echo TDBC_DOTVERSION = \> versions.vc] \
+   && [nmakehlp -V "$(TDBC_DIR)\configure.ac" tdbc >> versions.vc]
+!error Could not retrieve TDBC version.
+!endif
+!include versions.vc
+
+TDBC_VERSION     = $(TDBC_DOTVERSION:.=)
+TDBC_GENERIC_DIR = $(TDBC_DIR)\generic
+TDBCSTUBLIBNAME         = tdbcstub$(TDBC_VERSION).lib
+TDBCSTUBLIB     = $(TDBC_DIR)\win\$(BUILDDIRTOP)\$(TDBCSTUBLIBNAME)
+TDBC_LIB_FILE   = tdbc$(TDBC_VERSION).dll
+TDBC_BIN_DIR     = $(TDBC_DIR)/win/$(BUILDDIRTOP)
+
+PRJ_INCLUDES   = -I"$(TDBC_GENERIC_DIR)"
+
+!if !$(STATIC_BUILD)
+PRJ_LIBS  = $(TDBCSTUBLIB)
+!endif
+
+# Disable standard test target because we have a custom one
+DISABLE_TARGET_test = 1
+!include "$(_RULESDIR)\targets.vc"
+
+# Our install has a few more steps than the default install
+install: default-install-docs-n
+
+# The TIP 477 generation of pkgIndex.tcl from pkgIndex.tcl.in does not include
+# all replacements below so define our own.
+pkgindex:   $(OUT_DIR)\pkgIndex.tcl
+$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in
+       @nmakehlp -s << $** > $@
+@PACKAGE_NAME@        $(PROJECT)
+@PACKAGE_VERSION@     $(DOTVERSION)
+@TCL_VERSION_REQ@     $(TCL_VERSION_REQ)
+@PKG_LIB_FILE@        $(PRJLIBNAME)
+<<
+
+test: setup $(PROJECT)
+        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
+        @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)
+       @set TDBC_LIBRARY=$(LIBDIR:\=/)
+       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)
+!if $(TCLINSTALL)
+        @set PATH=$(_TCLDIR)\bin;$(PATH)
+       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS)
+!else
+        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
+       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) \
+               -load "package ifneeded tdbc::mysql $(DOTVERSION) \
+                       {source {$(LIBDIR:\=/)/tdbcmysql.tcl};load {$(PRJLIB:\=/)} $(PROJECT)};\
+               package ifneeded tdbc $(TDBC_DOTVERSION) \
+                       {source {$(TDBC_BIN_DIR:\=/)/tdbc.tcl};load {$(TDBC_BIN_DIR:\=/)/$(TDBC_LIB_FILE)} tdbc}"
+!endif
+
similarity index 80%
rename from pkgs/tdbcodbc1.0.5/win/nmakehlp.c
rename to pkgs/tdbcmysql1.0.6/win/nmakehlp.c
index b1a1517..025bb99 100644 (file)
 #endif
 
 
-
 /* protos */
 
 static int CheckForCompilerFeature(const char *option);
-static int CheckForLinkerFeature(const char *option);
+static int CheckForLinkerFeature(const char **options, int count);
 static int IsIn(const char *string, const char *substring);
 static int SubstituteFile(const char *substs, const char *filename);
 static int QualifyPath(const char *path);
+static int LocateDependency(const char *keyfile);
 static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
 static DWORD WINAPI ReadFromPipe(LPVOID args);
 
@@ -74,6 +74,7 @@ main(
     char msg[300];
     DWORD dwWritten;
     int chars;
+    char *s;
 
     /*
      * Make sure children (cl.exe and link.exe) are kept quiet.
@@ -102,16 +103,16 @@ main(
            }
            return CheckForCompilerFeature(argv[2]);
        case 'l':
-           if (argc != 3) {
+           if (argc < 3) {
                chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -l <linker option>\n"
+                       "usage: %s -l <linker option> ?<mandatory option> ...?\n"
                        "Tests for whether link.exe supports an option\n"
                        "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
                WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
                        &dwWritten, NULL);
                return 2;
            }
-           return CheckForLinkerFeature(argv[2]);
+           return CheckForLinkerFeature(&argv[2], argc-2);
        case 'f':
            if (argc == 2) {
                chars = snprintf(msg, sizeof(msg) - 1,
@@ -153,8 +154,13 @@ main(
                    &dwWritten, NULL);
                return 0;
            }
-           printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'));
-           return 0;
+           s = GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0');
+           if (s && *s) {
+               printf("%s\n", s);
+               return 0;
+           } else
+               return 1; /* Version not found. Return non-0 exit code */
+
        case 'Q':
            if (argc != 3) {
                chars = snprintf(msg, sizeof(msg) - 1,
@@ -166,6 +172,18 @@ main(
                return 2;
            }
            return QualifyPath(argv[2]);
+
+       case 'L':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -L keypath\n"
+                   "Emit the fully qualified path of directory containing keypath\n"
+                   "exitcodes: 0 == success, 1 == not found, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return LocateDependency(argv[2]);
        }
     }
     chars = snprintf(msg, sizeof(msg) - 1,
@@ -313,7 +331,8 @@ CheckForCompilerFeature(
 \f
 static int
 CheckForLinkerFeature(
-    const char *option)
+    const char **options,
+    int count)
 {
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
@@ -322,7 +341,8 @@ CheckForLinkerFeature(
     char msg[300];
     BOOL ok;
     HANDLE hProcess, h, pipeThreads[2];
-    char cmdline[100];
+    int i;
+    char cmdline[255];
 
     hProcess = GetCurrentProcess();
 
@@ -368,7 +388,11 @@ CheckForLinkerFeature(
      * Append our option for testing.
      */
 
-    lstrcat(cmdline, option);
+    for (i = 0; i < count; i++) {
+       lstrcat(cmdline, " \"");
+       lstrcat(cmdline, options[i]);
+       lstrcat(cmdline, "\"");
+    }
 
     ok = CreateProcess(
            NULL,           /* Module name. */
@@ -433,7 +457,9 @@ CheckForLinkerFeature(
     return !(strstr(Out.buffer, "LNK1117") != NULL ||
            strstr(Err.buffer, "LNK1117") != NULL ||
            strstr(Out.buffer, "LNK4044") != NULL ||
-           strstr(Err.buffer, "LNK4044") != NULL);
+           strstr(Err.buffer, "LNK4044") != NULL ||
+           strstr(Out.buffer, "LNK4224") != NULL ||
+           strstr(Err.buffer, "LNK4224") != NULL);
 }
 \f
 static DWORD WINAPI
@@ -606,8 +632,8 @@ SubstituteFile(
        sp = fopen(substitutions, "rt");
        if (sp != NULL) {
            while (fgets(szBuffer, cbBuffer, sp) != NULL) {
-               char *ks, *ke, *vs, *ve;
-               ks = szBuffer;
+               unsigned char *ks, *ke, *vs, *ve;
+               ks = (unsigned char*)szBuffer;
                while (ks && *ks && isspace(*ks)) ++ks;
                ke = ks;
                while (ke && *ke && !isspace(*ke)) ++ke;
@@ -616,7 +642,7 @@ SubstituteFile(
                ve = vs;
                while (ve && *ve && !(*ve == '\r' || *ve == '\n')) ++ve;
                *ke = 0, *ve = 0;
-               list_insert(&substPtr, ks, vs);
+               list_insert(&substPtr, (char*)ks, (char*)vs);
            }
            fclose(sp);
        }
@@ -687,6 +713,97 @@ QualifyPath(
 }
 
 /*
+ * Implements LocateDependency for a single directory. See that command
+ * for an explanation.
+ * Returns 0 if found after printing the directory.
+ * Returns 1 if not found but no errors.
+ * Returns 2 on any kind of error
+ * Basically, these are used as exit codes for the process.
+ */
+static int LocateDependencyHelper(const char *dir, const char *keypath)
+{
+    HANDLE hSearch;
+    char path[MAX_PATH+1];
+    int dirlen, keylen, ret;
+    WIN32_FIND_DATA finfo;
+
+    if (dir == NULL || keypath == NULL)
+       return 2; /* Have no real error reporting mechanism into nmake */
+    dirlen = strlen(dir);
+    if ((dirlen + 3) > sizeof(path))
+       return 2;
+    strncpy(path, dir, dirlen);
+    strncpy(path+dirlen, "\\*", 3);    /* Including terminating \0 */
+    keylen = strlen(keypath);
+
+#if 0 /* This function is not available in Visual C++ 6 */
+    /*
+     * Use numerics 0 -> FindExInfoStandard,
+     * 1 -> FindExSearchLimitToDirectories, 
+     * as these are not defined in Visual C++ 6
+     */
+    hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0);
+#else
+    hSearch = FindFirstFile(path, &finfo);
+#endif
+    if (hSearch == INVALID_HANDLE_VALUE)
+       return 1; /* Not found */
+
+    /* Loop through all subdirs checking if the keypath is under there */
+    ret = 1; /* Assume not found */
+    do {
+       int sublen;
+       /*
+        * We need to check it is a directory despite the 
+        * FindExSearchLimitToDirectories in the above call. See SDK docs
+        */
+       if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
+           continue;
+       sublen = strlen(finfo.cFileName);
+       if ((dirlen+1+sublen+1+keylen+1) > sizeof(path))
+           continue;           /* Path does not fit, assume not matched */
+       strncpy(path+dirlen+1, finfo.cFileName, sublen);
+       path[dirlen+1+sublen] = '\\';
+       strncpy(path+dirlen+1+sublen+1, keypath, keylen+1);
+       if (PathFileExists(path)) {
+           /* Found a match, print to stdout */
+           path[dirlen+1+sublen] = '\0';
+           QualifyPath(path);
+           ret = 0;
+           break;
+       }
+    } while (FindNextFile(hSearch, &finfo));
+    FindClose(hSearch);
+    return ret;
+}
+
+/*
+ * LocateDependency --
+ *
+ *     Locates a dependency for a package.
+ *        keypath - a relative path within the package directory
+ *          that is used to confirm it is the correct directory.
+ *     The search path for the package directory is currently only
+ *      the parent and grandparent of the current working directory.
+ *      If found, the command prints 
+ *         name_DIRPATH=<full path of located directory>
+ *      and returns 0. If not found, does not print anything and returns 1.
+ */
+static int LocateDependency(const char *keypath)
+{
+    int i, ret;
+    static char *paths[] = {"..", "..\\..", "..\\..\\.."};
+    
+    for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) {
+       ret = LocateDependencyHelper(paths[i], keypath);
+       if (ret == 0)
+           return ret;
+    }
+    return ret;
+}
+
+
+/*
  * Local variables:
  *   mode: c
  *   c-basic-offset: 4
diff --git a/pkgs/tdbcmysql1.0.6/win/rules-ext.vc b/pkgs/tdbcmysql1.0.6/win/rules-ext.vc
new file mode 100644 (file)
index 0000000..ab86876
--- /dev/null
@@ -0,0 +1,118 @@
+# This file should only be included in makefiles for Tcl extensions,
+# NOT in the makefile for Tcl itself.
+
+!ifndef _RULES_EXT_VC
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+!if "$(PROJECT)" == "tcl"
+!error The rules-ext.vc file is not intended for Tcl itself.
+!endif
+
+# We extract version numbers using the nmakehlp program. For now use
+# the local copy of nmakehlp. Once we locate Tcl, we will use that
+# one if it is newer.
+!if [$(CC) -nologo "nmakehlp.c" -link -subsystem:console > nul]
+!endif
+
+# First locate the Tcl directory that we are working with.
+!ifdef TCLDIR
+
+_RULESDIR = $(TCLDIR:/=\)
+
+!else
+
+# If an installation path is specified, that is also the Tcl directory.
+# Also Tk never builds against an installed Tcl, it needs Tcl sources
+!if defined(INSTALLDIR) && "$(PROJECT)" != "tk"
+_RULESDIR=$(INSTALLDIR:/=\)
+!else
+# Locate Tcl sources
+!if [echo _RULESDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+_RULESDIR = ..\..\tcl
+!else
+!include nmakehlp.out
+!endif
+
+!endif # defined(INSTALLDIR)....
+
+!endif # ifndef TCLDIR
+
+# Now look for the targets.vc file under the Tcl root. Note we check this
+# file and not rules.vc because the latter also exists on older systems.
+!if exist("$(_RULESDIR)\lib\nmake\targets.vc") # Building against installed Tcl
+_RULESDIR = $(_RULESDIR)\lib\nmake
+!elseif exist("$(_RULESDIR)\win\targets.vc")   # Building against Tcl sources
+_RULESDIR = $(_RULESDIR)\win
+!else
+# If we have not located Tcl's targets file, most likely we are compiling
+# against an older version of Tcl and so must use our own support files.
+_RULESDIR = .
+!endif
+
+!if "$(_RULESDIR)" != "."
+# Potentially using Tcl's support files. If this extension has its own
+# nmake support files, need to compare the versions and pick newer.
+
+!if exist("rules.vc") # The extension has its own copy
+
+!if [echo TCL_RULES_MAJOR = \> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo TCL_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+
+!if [echo OUR_RULES_MAJOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo OUR_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+!include versions.vc
+# We have a newer version of the support files, use them
+!if ($(TCL_RULES_MAJOR) != $(OUR_RULES_MAJOR)) || ($(TCL_RULES_MINOR) < $(OUR_RULES_MINOR))
+_RULESDIR = .
+!endif
+
+!endif # if exist("rules.vc")
+
+!endif # if $(_RULESDIR) != "."
+
+# Let rules.vc know what copy of nmakehlp.c to use.
+NMAKEHLPC = $(_RULESDIR)\nmakehlp.c
+
+# Get rid of our internal defines before calling rules.vc
+!undef TCL_RULES_MAJOR
+!undef TCL_RULES_MINOR
+!undef OUR_RULES_MAJOR
+!undef OUR_RULES_MINOR
+
+!if exist("$(_RULESDIR)\rules.vc")
+!message *** Using $(_RULESDIR)\rules.vc
+!include "$(_RULESDIR)\rules.vc"
+!else
+!error *** Could not locate rules.vc in $(_RULESDIR)
+!endif
+
+!endif # _RULES_EXT_VC
\ No newline at end of file
diff --git a/pkgs/tdbcmysql1.0.6/win/rules.vc b/pkgs/tdbcmysql1.0.6/win/rules.vc
new file mode 100644 (file)
index 0000000..bbb412d
--- /dev/null
@@ -0,0 +1,1723 @@
+#------------------------------------------------------------- -*- makefile -*-
+# rules.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file does all the hard work in terms of parsing build options,
+# compiler switches, defining common targets and macros. The Tcl makefile
+# directly includes this. Extensions include it via "rules-ext.vc".
+#
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# Copyright (c) 2001-2003 David Gravereaux.
+# Copyright (c) 2003-2008 Patrick Thoyts
+# Copyright (c) 2017      Ashok P. Nadkarni
+#------------------------------------------------------------------------------
+
+!ifndef _RULES_VC
+_RULES_VC = 1
+
+# The following macros define the version of the rules.vc nmake build system
+# For modifications that are not backward-compatible, you *must* change
+# the major version.
+RULES_VERSION_MAJOR = 1
+RULES_VERSION_MINOR = 0
+
+# The PROJECT macro must be defined by parent makefile.
+!if "$(PROJECT)" == ""
+!error *** Error: Macro PROJECT not defined! Please define it before including rules.vc
+!endif
+
+!if "$(PRJ_PACKAGE_TCLNAME)" == ""
+PRJ_PACKAGE_TCLNAME = $(PROJECT)
+!endif
+
+# Also special case Tcl and Tk to save some typing later
+DOING_TCL = 0
+DOING_TK  = 0
+!if "$(PROJECT)" == "tcl"
+DOING_TCL = 1
+!elseif "$(PROJECT)" == "tk"
+DOING_TK = 1
+!endif
+
+!ifndef NEED_TK
+# Backwards compatibility
+!ifdef PROJECT_REQUIRES_TK
+NEED_TK = $(PROJECT_REQUIRES_TK)
+!else
+NEED_TK = 0
+!endif
+!endif
+
+!ifndef NEED_TCL_SOURCE
+NEED_TCL_SOURCE = 0
+!endif
+
+!ifdef NEED_TK_SOURCE
+!if $(NEED_TK_SOURCE)
+NEED_TK = 1
+!endif
+!else
+NEED_TK_SOURCE = 0
+!endif
+
+################################################################
+# Nmake is a pretty weak environment in syntax and capabilities
+# so this file is necessarily verbose. It's broken down into
+# the following parts.
+#
+# 0. Sanity check that compiler environment is set up and initialize
+#    any built-in settings from the parent makefile
+# 1. First define the external tools used for compiling, copying etc.
+#    as this is independent of everything else.
+# 2. Figure out our build structure in terms of the directory, whether
+#    we are building Tcl or an extension, etc.
+# 3. Determine the compiler and linker versions
+# 4. Build the nmakehlp helper application
+# 5. Determine the supported compiler options and features
+# 6. Parse the OPTS macro value for user-specified build configuration
+# 7. Parse the STATS macro value for statistics instrumentation
+# 8. Parse the CHECKS macro for additional compilation checks
+# 9. Extract Tcl, and possibly Tk, version numbers from the headers
+# 10. Based on this selected configuration, construct the output
+#     directory and file paths
+# 11. Construct the paths where the package is to be installed
+# 12. Set up the actual options passed to compiler and linker based
+#     on the information gathered above.
+# 13. Define some standard build targets and implicit rules. These may
+#     be optionally disabled by the parent makefile.
+# 14. (For extensions only.) Compare the configuration of the target
+#     Tcl and the extensions and warn against discrepancies.
+#
+# One final note about the macro names used. They are as they are
+# for historical reasons. We would like legacy extensions to
+# continue to work with this make include file so be wary of
+# changing them for consistency or clarity.
+
+# 0. Sanity check compiler environment
+
+# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
+# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
+
+!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)
+MSG = ^
+Visual C++ compiler environment not initialized.
+!error $(MSG)
+!endif
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+
+################################################################
+# 1. Define external programs being used
+
+#----------------------------------------------------------
+# Set the proper copy method to avoid overwrite questions
+# to the user when copying files and selecting the right
+# "delete all" method.
+#----------------------------------------------------------
+
+RMDIR  = rmdir /S /Q
+CPY    = xcopy /i /y >NUL
+CPYDIR  = xcopy /e /i /y >NUL
+COPY   = copy /y >NUL
+MKDIR   = mkdir
+
+######################################################################
+# 2. Figure out our build environment in terms of what we're building.
+#
+# (a) Tcl itself
+# (b) Tk
+# (c) a Tcl extension using libraries/includes from an *installed* Tcl
+# (d) a Tcl extension using libraries/includes from Tcl source directory
+#
+# This last is needed because some extensions still need
+# some Tcl interfaces that are not publicly exposed.
+#
+# The fragment will set the following macros:
+# ROOT - root of this module sources
+# COMPATDIR - source directory that holds compatibility sources
+# DOCDIR - source directory containing documentation files
+# GENERICDIR - platform-independent source directory
+# WINDIR - Windows-specific source directory
+# TESTDIR - directory containing test files
+# TOOLSDIR - directory containing build tools
+# _TCLDIR - root of the Tcl installation OR the Tcl sources. Not set
+#    when building Tcl itself.
+# _INSTALLDIR - native form of the installation path. For Tcl
+#    this will be the root of the Tcl installation. For extensions
+#    this will be the lib directory under the root.
+# TCLINSTALL  - set to 1 if _TCLDIR refers to
+#    headers and libraries from an installed Tcl, and 0 if built against
+#    Tcl sources. Not set when building Tcl itself. Yes, not very well
+#    named.
+# _TCL_H - native path to the tcl.h file
+#
+# If Tk is involved, also sets the following
+# _TKDIR - native form Tk installation OR Tk source. Not set if building
+#    Tk itself.
+# TKINSTALL - set 1 if _TKDIR refers to installed Tk and 0 if Tk sources
+# _TK_H - native path to the tk.h file
+
+# Root directory for sources and assumed subdirectories
+ROOT = $(MAKEDIR)\..
+# The following paths CANNOT have spaces in them as they appear on the
+# left side of implicit rules.
+!ifndef COMPATDIR
+COMPATDIR      = $(ROOT)\compat
+!endif
+!ifndef DOCDIR
+DOCDIR         = $(ROOT)\doc
+!endif
+!ifndef GENERICDIR
+GENERICDIR     = $(ROOT)\generic
+!endif
+!ifndef TOOLSDIR
+TOOLSDIR       = $(ROOT)\tools
+!endif
+!ifndef TESTDIR
+TESTDIR        = $(ROOT)\tests
+!endif
+!ifndef LIBDIR
+!if exist("$(ROOT)\library")
+LIBDIR          = $(ROOT)\library
+!else
+LIBDIR          = $(ROOT)\lib
+!endif
+!endif
+!ifndef DEMODIR
+!if exist("$(LIBDIR)\demos")
+DEMODIR                = $(LIBDIR)\demos
+!else
+DEMODIR                = $(ROOT)\demos
+!endif
+!endif # ifndef DEMODIR
+# Do NOT enclose WINDIR in a !ifndef because Windows always defines
+# WINDIR env var to point to c:\windows!
+# TBD - This is a potentially dangerous conflict, rename WINDIR to
+# something else
+WINDIR         = $(ROOT)\win
+
+!ifndef RCDIR
+!if exist("$(WINDIR)\rc")
+RCDIR           = $(WINDIR)\rc
+!else
+RCDIR           = $(WINDIR)
+!endif
+!endif
+RCDIR = $(RCDIR:/=\)
+
+# The target directory where the built packages and binaries will be installed.
+# INSTALLDIR is the (optional) path specified by the user.
+# _INSTALLDIR is INSTALLDIR using the backslash separator syntax
+!ifdef INSTALLDIR
+### Fix the path separators.
+_INSTALLDIR    = $(INSTALLDIR:/=\)
+!else
+### Assume the normal default.
+_INSTALLDIR    = $(HOMEDRIVE)\Tcl
+!endif
+
+!if $(DOING_TCL)
+
+# BEGIN Case 2(a) - Building Tcl itself
+
+# Only need to define _TCL_H
+_TCL_H = ..\generic\tcl.h
+
+# END Case 2(a) - Building Tcl itself
+
+!elseif $(DOING_TK)
+
+# BEGIN Case 2(b) - Building Tk
+
+TCLINSTALL = 0 # Tk always builds against Tcl source, not an installed Tcl
+!if "$(TCLDIR)" == ""
+!if [echo TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+!endif # TCLDIR == ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+_TCL_H  = $(_TCLDIR)\generic\tcl.h
+!if !exist("$(_TCL_H)")
+!error Could not locate tcl.h. Please set the TCLDIR macro to point to the Tcl *source* directory.
+!endif
+
+_TK_H = ..\generic\tk.h
+
+# END Case 2(b) - Building Tk
+
+!else
+
+# BEGIN Case 2(c) or (d) - Building an extension other than Tk
+
+# If command line has specified Tcl location through TCLDIR, use it
+# else default to the INSTALLDIR setting
+!if "$(TCLDIR)" != ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+!if exist("$(_TCLDIR)\include\tcl.h") # Case 2(c) with TCLDIR defined
+TCLINSTALL     = 1
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+!elseif exist("$(_TCLDIR)\generic\tcl.h") # Case 2(d) with TCLDIR defined
+TCLINSTALL     = 0
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+!endif
+
+!else  #  # Case 2(c) for extensions with TCLDIR undefined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tcl.h") && !$(NEED_TCL_SOURCE)
+
+TCLINSTALL     = 1
+TCLDIR          = $(_INSTALLDIR)\..
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TCLDIR                = $(_INSTALLDIR)\..
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+
+!else # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!if [echo _TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+TCLINSTALL      = 0
+TCLDIR         = $(_TCLDIR)
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+
+!endif # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!endif # TCLDIR
+
+!ifndef _TCL_H
+MSG =^
+Failed to find tcl.h. The TCLDIR macro is set incorrectly or is not set and default path does not contain tcl.h.
+!error $(MSG)
+!endif
+
+# Now do the same to locate Tk headers and libs if project requires Tk
+!if $(NEED_TK)
+
+!if "$(TKDIR)" != ""
+
+_TKDIR = $(TKDIR:/=\)
+!if exist("$(_TKDIR)\include\tk.h")
+TKINSTALL      = 1
+_TK_H          = $(_TKDIR)\include\tk.h
+!elseif exist("$(_TKDIR)\generic\tk.h")
+TKINSTALL      = 0
+_TK_H          = $(_TKDIR)\generic\tk.h
+!endif
+
+!else # TKDIR not defined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+TKINSTALL      = 1
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TKDIR         = $(_INSTALLDIR)\..
+_TK_H          = $(_TKDIR)\include\tk.h
+TKDIR          = $(_TKDIR)
+
+!else # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!if [echo _TKDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tk.h >> nmakehlp.out]
+!error *** Could not locate Tk source directory.
+!endif
+!include nmakehlp.out
+TKINSTALL      = 0
+TKDIR          = $(_TKDIR)
+_TK_H          = $(_TKDIR)\generic\tk.h
+
+!endif # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!endif # TKDIR
+
+!ifndef _TK_H
+MSG =^
+Failed to find tk.h. The TKDIR macro is set incorrectly or is not set and default path does not contain tk.h.
+!error $(MSG)
+!endif
+
+!endif # NEED_TK
+
+!if $(NEED_TCL_SOURCE) && $(TCLINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tcl.^
+*** Please set the TCLDIR macro to point to the Tcl sources.
+!error $(MSG)
+!endif
+
+!if $(NEED_TK_SOURCE)
+!if $(TKINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tk.^
+*** Please set the TKDIR macro to point to the Tk sources.
+!error $(MSG)
+!endif
+!endif
+
+
+# If INSTALLDIR set to tcl installation root dir then reset to the
+# lib dir for installing extensions 
+!if exist("$(_INSTALLDIR)\include\tcl.h")
+_INSTALLDIR=$(_INSTALLDIR)\lib
+!endif
+
+# END Case 2(c) or (d) - Building an extension
+!endif # if $(DOING_TCL)
+
+################################################################
+# 3. Determine compiler version and architecture
+# In this section, we figure out the compiler version and the
+# architecture for which we are building. This sets the
+# following macros:
+# VCVERSION - the internal compiler version as 1200, 1400, 1910 etc.
+#     This is also printed by the compiler in dotted form 19.10 etc.
+# VCVER - the "marketing version", for example Visual C++ 6 for internal
+#     compiler version 1200. This is kept only for legacy reasons as it
+#     does not make sense for recent Microsoft compilers. Only used for
+#     output directory names.
+# ARCH - set to IX86 or AMD64 depending on 32- or 64-bit target
+# NATIVE_ARCH - set to IX86 or AMD64 for the host machine
+# MACHINE - same as $(ARCH) - legacy
+# _VC_MANIFEST_EMBED_{DLL,EXE} - commands for embedding a manifest if needed
+# CFG_ENCODING - set to an character encoding.
+#   TBD - this is passed to compiler as TCL_CFGVAL_ENCODING but can't
+#   see where it is used
+
+cc32           = $(CC)   # built-in default.
+link32         = link
+lib32          = lib
+rc32           = $(RC)   # built-in default.
+
+#----------------------------------------------------------------
+# Figure out the compiler architecture and version by writing
+# the C macros to a file, preprocessing them with the C
+# preprocessor and reading back the created file
+
+_HASH=^#
+_VC_MANIFEST_EMBED_EXE=
+_VC_MANIFEST_EMBED_DLL=
+VCVER=0
+!if ![echo VCVERSION=_MSC_VER > vercl.x] \
+    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
+    && ![echo ARCH=IX86 >> vercl.x] \
+    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
+    && ![echo ARCH=AMD64 >> vercl.x] \
+    && ![echo $(_HASH)endif >> vercl.x] \
+    && ![$(cc32) -nologo -TC -P vercl.x 2>NUL]
+!include vercl.i
+!if $(VCVERSION) < 1900
+!if ![echo VCVER= ^\> vercl.vc] \
+    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
+!include vercl.vc
+!endif
+!else
+# The simple calculation above does not apply to new Visual Studio releases
+# Keep the compiler version in its native form.
+VCVER = $(VCVERSION)
+!endif
+!endif
+
+!if ![del 2>NUL /q/f vercl.x vercl.i vercl.vc]
+!endif
+
+#----------------------------------------------------------------
+# The MACHINE macro is used by legacy makefiles so set it as well
+!ifdef MACHINE
+!if "$(MACHINE)" == "x86"
+!undef MACHINE
+MACHINE = IX86
+!elseif "$(MACHINE)" == "x64"
+!undef MACHINE
+MACHINE = AMD64
+!endif
+!if "$(MACHINE)" != "$(ARCH)"
+!error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH).
+!endif
+!else
+MACHINE=$(ARCH)
+!endif
+
+#------------------------------------------------------------
+# Figure out the *host* architecture by reading the registry
+
+!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]
+NATIVE_ARCH=IX86
+!else
+NATIVE_ARCH=AMD64
+!endif
+
+# Since MSVC8 we must deal with manifest resources.
+!if $(VCVERSION) >= 1400
+_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1
+_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2
+!endif
+
+!ifndef CFG_ENCODING
+CFG_ENCODING   = \"cp1252\"
+!endif
+
+################################################################
+# 4. Build the nmakehlp program
+# This is a helper app we need to overcome nmake's limiting
+# environment. We will call out to it to get various bits of
+# information about supported compiler options etc.
+#
+# Tcl itself will always use the nmakehlp.c program which is
+# in its own source. This is the "master" copy and kept updated.
+#
+# Extensions built against an installed Tcl will use the installed
+# copy of Tcl's nmakehlp.c if there is one and their own version
+# otherwise. In the latter case, they would also be using their own
+# rules.vc. Note that older versions of Tcl do not install nmakehlp.c
+# or rules.vc.
+#
+# Extensions built against Tcl sources will use the one from the Tcl source.
+#
+# When building an extension using a sufficiently new version of Tcl,
+# rules-ext.vc will define NMAKEHLPC appropriately to point to the
+# copy of nmakehlp.c to be used.
+
+!ifndef NMAKEHLPC
+# Default to the one in the current directory (the extension's own nmakehlp.c)
+NMAKEHLPC = nmakehlp.c
+
+!if !$(DOING_TCL)
+!if $(TCLINSTALL)
+!if exist("$(_TCLDIR)\lib\nmake\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\lib\nmake\nmakehlp.c
+!endif
+!else # ! $(TCLINSTALL)
+!if exist("$(_TCLDIR)\win\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\win\nmakehlp.c
+!endif
+!endif # $(TCLINSTALL)
+!endif # !$(DOING_TCL)
+
+!endif # NMAKEHLPC
+
+# We always build nmakehlp even if it exists since we do not know
+# what source it was built from.
+!message *** Using $(NMAKEHLPC)
+!if [$(cc32) -nologo "$(NMAKEHLPC)" -link -subsystem:console > nul]
+!endif
+
+################################################################
+# 5. Test for compiler features
+# Visual C++ compiler options have changed over the years. Check
+# which options are supported by the compiler in use.
+#
+# The following macros are set:
+# OPTIMIZATIONS - the compiler flags to be used for optimized builds
+# DEBUGFLAGS - the compiler flags to be used for debug builds
+# LINKERFLAGS - Flags passed to the linker 
+#
+# Note that these are the compiler settings *available*, not those
+# that will be *used*. The latter depends on the OPTS macro settings
+# which we have not yet parsed.
+#
+# Also note that some of the flags in OPTIMIZATIONS are not really
+# related to optimization. They are placed there only for legacy reasons
+# as some extensions expect them to be included in that macro.
+
+# -Op improves float consistency. Note only needed for older compilers
+# Newer compilers do not need or support this option.
+!if [nmakehlp -c -Op]
+FPOPTS  = -Op
+!endif
+
+# Strict floating point semantics - present in newer compilers in lieu of -Op
+!if [nmakehlp -c -fp:strict]
+FPOPTS  = $(FPOPTS) -fp:strict
+!endif
+
+!if "$(MACHINE)" == "IX86"
+### test for pentium errata
+!if [nmakehlp -c -QI0f]
+!message *** Compiler has 'Pentium 0x0f fix'
+FPOPTS  = $(FPOPTS) -QI0f
+!else
+!message *** Compiler does not have 'Pentium 0x0f fix'
+!endif
+!endif
+
+### test for optimizations
+# /O2 optimization includes /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy as per
+# documentation. Note we do NOT want /Gs as that inserts a _chkstk
+# stack probe at *every* function entry, not just those with more than
+# a page of stack allocation resulting in a performance hit.  However,
+# /O2 documentation is misleading as its stack probes are simply the
+# default page size locals allocation probes and not what is implied
+# by an explicit /Gs option.
+
+OPTIMIZATIONS = $(FPOPTS)
+
+!if [nmakehlp -c -O2]
+!message *** Compiler has 'Optimizations'
+OPTIMIZING = 1
+OPTIMIZATIONS   = $(OPTIMIZATIONS) -O2
+!else
+# Legacy, really. All modern compilers support this
+!message *** Compiler does not have 'Optimizations'
+OPTIMIZING = 0
+!endif
+
+# Checks for buffer overflows in local arrays
+!if [nmakehlp -c -GS]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS
+!endif
+
+# Link time optimization. Note that this option (potentially) makes
+# generated libraries only usable by the specific VC++ version that
+# created it. Requires /LTCG linker option
+!if [nmakehlp -c -GL]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL
+CC_GL_OPT_ENABLED = 1
+!else
+# In newer compilers -GL and -YX are incompatible.
+!if [nmakehlp -c -YX]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX
+!endif
+!endif # [nmakehlp -c -GL]
+
+DEBUGFLAGS     = $(FPOPTS)
+
+# Run time error checks. Not available or valid in a release, non-debug build
+# RTC is for modern compilers, -GZ is legacy
+!if [nmakehlp -c -RTC1]
+DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1
+!elseif [nmakehlp -c -GZ]
+DEBUGFLAGS     = $(DEBUGFLAGS) -GZ
+!endif
+
+#----------------------------------------------------------------
+# Linker flags
+
+# LINKER_TESTFLAGS are for internal use when we call nmakehlp to test
+# if the linker supports a specific option. Without these flags link will
+# return "LNK1561: entry point must be defined" error compiling from VS-IDE:
+# They are not passed through to the actual application / extension
+# link rules.
+!ifndef LINKER_TESTFLAGS
+LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmakehlp.out
+!endif
+
+LINKERFLAGS     =
+
+# If compiler has enabled link time optimization, linker must too with -ltcg
+!ifdef CC_GL_OPT_ENABLED
+!if [nmakehlp -l -ltcg $(LINKER_TESTFLAGS)]
+LINKERFLAGS     = $(LINKERFLAGS) -ltcg
+!endif
+!endif
+
+########################################################################
+# 6. Parse the OPTS macro to work out the requested build configuration.
+# Based on this, we will construct the actual switches to be passed to the
+# compiler and linker using the macros defined in the previous section.
+# The following macros are defined by this section based on OPTS
+# STATIC_BUILD - 0 -> Tcl is to be built as a shared library
+#                1 -> build as a static library and shell
+# TCL_THREADS - legacy but always 1 on Windows since winsock requires it.
+# DEBUG - 1 -> debug build, 0 -> release builds
+# SYMBOLS - 1 -> generate PDB's, 0 -> no PDB's
+# PROFILE - 1 -> generate profiling info, 0 -> no profiling
+# PGO     - 1 -> profile based optimization, 0 -> no
+# MSVCRT  - 1 -> link to dynamic C runtime even when building static Tcl build
+#           0 -> link to static C runtime for static Tcl build.
+#           Does not impact shared Tcl builds (STATIC_BUILD == 0)
+# TCL_USE_STATIC_PACKAGES - 1 -> statically link the registry and dde extensions
+#           in the Tcl shell. 0 -> keep them as shared libraries
+#           Does not impact shared Tcl builds.
+# USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation.
+#           0 -> Use the non-thread allocator.
+# UNCHECKED - 1 -> when doing a debug build with symbols, use the release
+#           C runtime, 0 -> use the debug C runtime.
+# USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking
+# CONFIG_CHECK - 1 -> check current build configuration against Tcl
+#           configuration (ignored for Tcl itself)
+# Further, LINKERFLAGS are modified based on above.
+
+# Default values for all the above
+STATIC_BUILD   = 0
+TCL_THREADS    = 1
+DEBUG          = 0
+SYMBOLS                = 0
+PROFILE                = 0
+PGO            = 0
+MSVCRT         = 1
+TCL_USE_STATIC_PACKAGES        = 0
+USE_THREAD_ALLOC = 1
+UNCHECKED      = 0
+CONFIG_CHECK    = 1
+!if $(DOING_TCL)
+USE_STUBS       = 0
+!else
+USE_STUBS       = 1
+!endif
+
+# If OPTS is not empty AND does not contain "none" which turns off all OPTS
+# set the above macros based on OPTS content
+!if "$(OPTS)" != "" && ![nmakehlp -f "$(OPTS)" "none"]
+
+# OPTS are specified, parse them
+
+!if [nmakehlp -f $(OPTS) "static"]
+!message *** Doing static
+STATIC_BUILD   = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "nostubs"]
+!message *** Not using stubs
+USE_STUBS      = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nomsvcrt"]
+!message *** Doing nomsvcrt
+MSVCRT         = 0
+!else
+!if [nmakehlp -f $(OPTS) "msvcrt"]
+!message *** Doing msvcrt
+MSVCRT         = 1
+!else
+!if !$(STATIC_BUILD)
+MSVCRT         = 1
+!else
+MSVCRT         = 0
+!endif
+!endif
+!endif # [nmakehlp -f $(OPTS) "nomsvcrt"]
+
+!if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD)
+!message *** Doing staticpkg
+TCL_USE_STATIC_PACKAGES        = 1
+!else
+TCL_USE_STATIC_PACKAGES        = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nothreads"]
+!message *** Compile explicitly for non-threaded tcl
+TCL_THREADS    = 0
+USE_THREAD_ALLOC= 0
+!else
+TCL_THREADS    = 1
+USE_THREAD_ALLOC= 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "symbols"]
+!message *** Doing symbols
+DEBUG          = 1
+!else
+DEBUG          = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pdbs"]
+!message *** Doing pdbs
+SYMBOLS                = 1
+!else
+SYMBOLS                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "profile"]
+!message *** Doing profile
+PROFILE                = 1
+!else
+PROFILE                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pgi"]
+!message *** Doing profile guided optimization instrumentation
+PGO            = 1
+!elseif [nmakehlp -f $(OPTS) "pgo"]
+!message *** Doing profile guided optimization
+PGO            = 2
+!else
+PGO            = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "loimpact"]
+!message *** Warning: ignoring option "loimpact" - deprecated on modern Windows.
+!endif
+
+# TBD - should get rid of this option
+!if [nmakehlp -f $(OPTS) "thrdalloc"]
+!message *** Doing thrdalloc
+USE_THREAD_ALLOC = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "tclalloc"]
+USE_THREAD_ALLOC = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "unchecked"]
+!message *** Doing unchecked
+UNCHECKED = 1
+!else
+UNCHECKED = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "noconfigcheck"]
+CONFIG_CHECK = 1
+!else
+CONFIG_CHECK = 0
+!endif
+
+!endif # "$(OPTS)" != ""  && ... parsing of OPTS
+
+# Set linker flags based on above
+
+!if $(PGO) > 1
+!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!elseif $(PGO) > 0
+!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!endif
+
+################################################################
+# 7. Parse the STATS macro to configure code instrumentation
+# The following macros are set by this section:
+# TCL_MEM_DEBUG - 1 -> enables memory allocation instrumentation
+#                 0 -> disables
+# TCL_COMPILE_DEBUG - 1 -> enables byte compiler logging
+#                     0 -> disables
+
+# Default both are off
+TCL_MEM_DEBUG      = 0
+TCL_COMPILE_DEBUG   = 0
+
+!if "$(STATS)" != "" && ![nmakehlp -f "$(STATS)" "none"]
+
+!if [nmakehlp -f $(STATS) "memdbg"]
+!message *** Doing memdbg
+TCL_MEM_DEBUG      = 1
+!else
+TCL_MEM_DEBUG      = 0
+!endif
+
+!if [nmakehlp -f $(STATS) "compdbg"]
+!message *** Doing compdbg
+TCL_COMPILE_DEBUG   = 1
+!else
+TCL_COMPILE_DEBUG   = 0
+!endif
+
+!endif
+
+####################################################################
+# 8. Parse the CHECKS macro to configure additional compiler checks
+# The following macros are set by this section:
+# WARNINGS - compiler switches that control the warnings level
+# TCL_NO_DEPRECATED - 1 -> disable support for deprecated functions
+#                     0 -> enable deprecated functions
+
+# Defaults - Permit deprecated functions and warning level 3
+TCL_NO_DEPRECATED          = 0
+WARNINGS                   = -W3
+
+!if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"]
+
+!if [nmakehlp -f $(CHECKS) "nodep"]
+!message *** Doing nodep check
+TCL_NO_DEPRECATED          = 1
+!endif
+
+!if [nmakehlp -f $(CHECKS) "fullwarn"]
+!message *** Doing full warnings check
+WARNINGS                   = -W4
+!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)]
+LINKERFLAGS                = $(LINKERFLAGS) -warn:3
+!endif
+!endif
+
+!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]
+!message *** Doing 64bit portability warnings
+WARNINGS                   = $(WARNINGS) -Wp64
+!endif
+
+!endif
+
+################################################################
+# 9. Extract various version numbers
+# For Tcl and Tk, version numbers are extracted from tcl.h and tk.h
+# respectively. For extensions, versions are extracted from the
+# configure.in or configure.ac from the TEA configuration if it
+# exists, and unset otherwise.
+# Sets the following macros:
+# TCL_MAJOR_VERSION
+# TCL_MINOR_VERSION
+# TCL_PATCH_LEVEL
+# TCL_VERSION
+# TK_MAJOR_VERSION
+# TK_MINOR_VERSION
+# TK_PATCH_LEVEL
+# TK_VERSION
+# DOTVERSION - set as (for example) 2.5
+# VERSION - set as (for example 25)
+#--------------------------------------------------------------
+
+!if [echo REM = This file is generated from rules.vc > versions.vc]
+!endif
+!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]
+!endif
+
+!if defined(_TK_H)
+!if [echo TK_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]
+!endif
+!endif # _TK_H
+
+!include versions.vc
+
+TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)
+TCL_DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!if defined(_TK_H)
+TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)
+TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+
+# Set DOTVERSION and VERSION
+!if $(DOING_TCL)
+
+DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+VERSION = $(TCL_VERSION)
+
+!elseif $(DOING_TK)
+
+DOTVERSION = $(TK_DOTVERSION)
+VERSION = $(TK_VERSION)
+
+!else # Doing a non-Tk extension
+
+# If parent makefile has not defined DOTVERSION, try to get it from TEA
+# first from a configure.in file, and then from configure.ac
+!ifndef DOTVERSION
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.in ^[$(PROJECT)^] >> versions.vc]
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.ac ^[$(PROJECT)^] >> versions.vc]
+!error *** Could not figure out extension version. Please define DOTVERSION in parent makefile before including rules.vc.
+!endif
+!endif
+!include versions.vc
+!endif # DOTVERSION
+VERSION         = $(DOTVERSION:.=)
+
+!endif # $(DOING_TCL) ... etc.
+
+################################################################
+# 10. Construct output directory and file paths
+# Figure-out how to name our intermediate and output directories.
+# In order to avoid inadvertent mixing of object files built using
+# different compilers, build configurations etc.,
+#
+# Naming convention (suffixes):
+#   t = full thread support.
+#   s = static library (as opposed to an import library)
+#   g = linked to the debug enabled C run-time.
+#   x = special static build when it links to the dynamic C run-time.
+#
+# The following macros are set in this section:
+# SUFX - the suffix to use for binaries based on above naming convention
+# BUILDDIRTOP - the toplevel default output directory
+#      is of the form {Release,Debug}[_AMD64][_COMPILERVERSION]
+# TMP_DIR - directory where object files are created
+# OUT_DIR - directory where output executables are created
+# Both TMP_DIR and OUT_DIR are defaulted only if not defined by the
+# parent makefile (or command line). The default values are
+# based on BUILDDIRTOP.
+# STUBPREFIX - name of the stubs library for this project
+# PRJIMPLIB - output path of the generated project import library
+# PRJLIBNAME - name of generated project library
+# PRJLIB     - output path of generated project library
+# PRJSTUBLIBNAME - name of the generated project stubs library
+# PRJSTUBLIB - output path of the generated project stubs library
+# RESFILE - output resource file (only if not static build)
+
+SUFX       = tsgx
+
+!if $(DEBUG)
+BUILDDIRTOP = Debug
+!else
+BUILDDIRTOP = Release
+!endif
+
+!if "$(MACHINE)" != "IX86"
+BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)
+!endif
+!if $(VCVER) > 6
+BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)
+!endif
+
+!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)
+SUFX       = $(SUFX:g=)
+!endif
+
+TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
+
+!if !$(STATIC_BUILD)
+TMP_DIRFULL = $(TMP_DIRFULL:Static=)
+SUFX       = $(SUFX:s=)
+EXT        = dll
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!else
+TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
+EXT        = lib
+!if !$(MSVCRT)
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!endif
+!endif
+
+!if !$(TCL_THREADS)
+TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)
+SUFX       = $(SUFX:t=)
+!endif
+
+!ifndef TMP_DIR
+TMP_DIR            = $(TMP_DIRFULL)
+!ifndef OUT_DIR
+OUT_DIR            = .\$(BUILDDIRTOP)
+!endif
+!else
+!ifndef OUT_DIR
+OUT_DIR            = $(TMP_DIR)
+!endif
+!endif
+
+# Relative paths -> absolute
+!if [echo OUT_DIR = \> nmakehlp.out] \
+   || [nmakehlp -Q "$(OUT_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path OUT_DIR=$(OUT_DIR)
+!endif
+!if [echo TMP_DIR = \>> nmakehlp.out] \
+   || [nmakehlp -Q "$(TMP_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path TMP_DIR=$(TMP_DIR)
+!endif
+!include nmakehlp.out
+
+# The name of the stubs library for the project being built
+STUBPREFIX      = $(PROJECT)stub
+
+# Set up paths to various Tcl executables and libraries needed by extensions
+!if $(DOING_TCL)
+
+TCLSHNAME       = $(PROJECT)sh$(TCL_VERSION)$(SUFX).exe
+TCLSH          = $(OUT_DIR)\$(TCLSHNAME)
+TCLIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+TCLLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+TCLLIB         = $(OUT_DIR)\$(TCLLIBNAME)
+
+TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+TCLSTUBLIB     = $(OUT_DIR)\$(TCLSTUBLIBNAME)
+TCL_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+
+TCLSH          = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist("$(TCLSH)") && $(TCL_THREADS)
+TCLSH           = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\lib
+TCLREGLIB      = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target
+TCL_INCLUDES    = -I"$(_TCLDIR)\include"
+
+!else # Building against Tcl sources
+
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist($(TCLSH)) && $(TCL_THREADS)
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\library
+TCLREGLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = $(_TCLDIR)\tools
+TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"
+
+!endif # TCLINSTALL
+
+tcllibs = "$(TCLSTUBLIB)" "$(TCLIMPLIB)"
+
+!endif # $(DOING_TCL)
+
+# We need a tclsh that will run on the host machine as part of the build.
+# IX86 runs on all architectures.
+!ifndef TCLSH_NATIVE
+!if "$(MACHINE)" == "IX86" || "$(MACHINE)" == "$(NATIVE_ARCH)"
+TCLSH_NATIVE   = $(TCLSH)
+!else
+!error You must explicitly set TCLSH_NATIVE for cross-compilation
+!endif
+!endif
+
+# Do the same for Tk and Tk extensions that require the Tk libraries
+!if $(DOING_TK) || $(NEED_TK)
+WISHNAMEPREFIX = wish
+WISHNAME = $(WISHNAMEPREFIX)$(TK_VERSION)$(SUFX).exe
+TKLIBNAME      = $(PROJECT)$(TK_VERSION)$(SUFX).$(EXT)
+TKSTUBLIBNAME  = tkstub$(TK_VERSION).lib
+TKIMPLIBNAME   = tk$(TK_VERSION)$(SUFX).lib
+
+!if $(DOING_TK)
+WISH           = $(OUT_DIR)\$(WISHNAME)
+TKSTUBLIB      = $(OUT_DIR)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(OUT_DIR)\$(TKIMPLIBNAME)
+TKLIB          = $(OUT_DIR)\$(TKLIBNAME)
+TK_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # effectively NEED_TK
+
+!if $(TKINSTALL) # Building against installed Tk
+WISH           = $(_TKDIR)\bin\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\lib\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\lib\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\include"
+!else # Building against Tk sources
+WISH           = $(_TKDIR)\win\$(BUILDDIRTOP)\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
+!endif # TKINSTALL
+tklibs = "$(TKSTUBLIB)" "$(TKIMPLIB)"
+
+!endif # $(DOING_TK)
+!endif # $(DOING_TK) || $(NEED_TK)
+
+# Various output paths
+PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)
+
+PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)
+
+# If extension parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+!if !$(DOING_TCL) && !$(DOING_TK) && !$(STATIC_BUILD)
+!ifdef RCFILE
+RESFILE = $(TMP_DIR)\$(RCFILE:.rc=.res)
+!else
+RESFILE = $(TMP_DIR)\$(PROJECT).res
+!endif
+!endif
+
+###################################################################
+# 11. Construct the paths for the installation directories
+# The following macros get defined in this section:
+# LIB_INSTALL_DIR - where libraries should be installed
+# BIN_INSTALL_DIR - where the executables should be installed
+# DOC_INSTALL_DIR - where documentation should be installed
+# SCRIPT_INSTALL_DIR - where scripts should be installed
+# INCLUDE_INSTALL_DIR - where C include files should be installed
+# DEMO_INSTALL_DIR - where demos should be installed
+# PRJ_INSTALL_DIR - where package will be installed (not set for tcl and tk)
+
+!if $(DOING_TCL) || $(DOING_TK)
+LIB_INSTALL_DIR                = $(_INSTALLDIR)\lib
+BIN_INSTALL_DIR                = $(_INSTALLDIR)\bin
+DOC_INSTALL_DIR                = $(_INSTALLDIR)\doc
+!if $(DOING_TCL)
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!else # DOING_TK
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+DEMO_INSTALL_DIR       = $(SCRIPT_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\include
+
+!else # extension other than Tk
+
+PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)
+LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)
+DEMO_INSTALL_DIR       = $(PRJ_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include
+
+!endif
+
+###################################################################
+# 12. Set up actual options to be passed to the compiler and linker
+# Now we have all the information we need, set up the actual flags and
+# options that we will pass to the compiler and linker. The main
+# makefile should use these in combination with whatever other flags
+# and switches are specific to it.
+# The following macros are defined, names are for historical compatibility:
+# OPTDEFINES - /Dxxx C macro flags based on user-specified OPTS
+# COMPILERFLAGS - /Dxxx C macro flags independent of any configuration opttions
+# crt - Compiler switch that selects the appropriate C runtime
+# cdebug - Compiler switches related to debug AND optimizations
+# cwarn - Compiler switches that set warning levels
+# cflags - complete compiler switches (subsumes cdebug and cwarn)
+# ldebug - Linker switches controlling debug information and optimization
+# lflags - complete linker switches (subsumes ldebug) except subsystem type
+# dlllflags - complete linker switches to build DLLs (subsumes lflags)
+# conlflags - complete linker switches for console program (subsumes lflags)
+# guilflags - complete linker switches for GUI program (subsumes lflags)
+# baselibs - minimum Windows libraries required. Parent makefile can
+#    define PRJ_LIBS before including rules.rc if additional libs are needed
+
+OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS
+
+!if $(TCL_MEM_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG
+!endif
+!if $(TCL_COMPILE_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
+!endif
+!if $(TCL_THREADS)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1
+!if $(USE_THREAD_ALLOC)
+OPTDEFINES     = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1
+!endif
+!endif
+!if $(STATIC_BUILD)
+OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD
+!endif
+!if $(TCL_NO_DEPRECATED)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED
+!endif
+
+!if $(USE_STUBS)
+# Note we do not define USE_TCL_STUBS even when building tk since some
+# test targets in tk do not use stubs
+!if ! $(DOING_TCL)
+USE_STUBS_DEFS  = -DUSE_TCL_STUBS -DUSE_TCLOO_STUBS
+!if $(NEED_TK)
+USE_STUBS_DEFS  = $(USE_STUBS_DEFS) -DUSE_TK_STUBS
+!endif
+!endif
+!endif # USE_STUBS
+
+!if !$(DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DNDEBUG
+!if $(OPTIMIZING)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
+!endif
+!endif
+!if $(PROFILE)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED
+!endif
+!if "$(MACHINE)" == "AMD64"
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT
+!endif
+!if $(VCVERSION) < 1300
+OPTDEFINES     = $(OPTDEFINES) -DNO_STRTOI64
+!endif
+
+# _ATL_XP_TARGETING - Newer SDK's need this to build for XP
+COMPILERFLAGS  = /D_ATL_XP_TARGETING
+
+# Following is primarily for the benefit of extensions. Tcl 8.5 builds
+# Tcl without /DUNICODE, while 8.6 builds with it defined. When building
+# an extension, it is advisable (but not mandated) to use the same Windows
+# API as the Tcl build. This is accordingly defaulted below. A particular
+# extension can override this by pre-definining USE_WIDECHAR_API.
+!ifndef USE_WIDECHAR_API
+!if $(TCL_VERSION) > 85
+USE_WIDECHAR_API = 1
+!else
+USE_WIDECHAR_API = 0
+!endif
+!endif
+
+!if $(USE_WIDECHAR_API)
+COMPILERFLAGS = $(COMPILERFLAGS) /DUNICODE /D_UNICODE 
+!endif
+
+# Like the TEA system only set this non empty for non-Tk extensions
+# Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME
+# so we pass both
+!if !$(DOING_TCL) && !$(DOING_TK)
+PKGNAMEFLAGS = -DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_TCLNAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \
+               -DMODULE_SCOPE=extern 
+!endif
+
+# crt picks the C run time based on selected OPTS
+!if $(MSVCRT)
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MDd
+!else
+crt = -MD
+!endif
+!else
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MTd
+!else
+crt = -MT
+!endif
+!endif
+
+# cdebug includes compiler options for debugging as well as optimization.
+!if $(DEBUG)
+
+# In debugging mode, optimizations need to be disabled
+cdebug = -Zi -Od $(DEBUGFLAGS)
+
+!else
+
+cdebug = $(OPTIMIZATIONS)
+!if $(SYMBOLS)
+cdebug = $(cdebug) -Zi
+!endif
+
+!endif # $(DEBUG)
+
+# cwarn includes default warning levels.
+cwarn = $(WARNINGS)
+
+!if "$(MACHINE)" == "AMD64"
+# Disable pointer<->int warnings related to cast between different sizes
+# There are a gadzillion of these due to use of ClientData and
+# clutter up compiler
+# output increasing chance of a real warning getting lost. So disable them.
+# Eventually some day, Tcl will be 64-bit clean.
+cwarn = $(cwarn) -wd4311 -wd4312
+!endif
+
+### Common compiler options that are architecture specific
+!if "$(MACHINE)" == "ARM"
+carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
+!else
+carch =
+!endif
+
+!if $(DEBUG)
+# Turn warnings into errors
+cwarn = $(cwarn) -WX
+!endif
+
+INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES)
+!if !$(DOING_TCL) && !$(DOING_TK)
+INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WINDIR)" -I"$(COMPATDIR)"
+!endif
+
+# These flags are defined roughly in the order of the pre-reform
+# rules.vc/makefile.vc to help visually compare that the pre- and
+# post-reform build logs
+
+# cflags contains generic flags used for building practically all object files
+cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\ $(cdebug)
+
+# appcflags contains $(cflags) and flags for building the application
+# object files (e.g. tclsh, or wish) pkgcflags contains $(cflags) plus
+# flags used for building shared object files The two differ in the
+# BUILD_$(PROJECT) macro which should be defined only for the shared
+# library *implementation* and not for its caller interface
+
+appcflags = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES) $(USE_STUBS_DEFS)
+appcflags_nostubs = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES)
+pkgcflags = $(appcflags) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+pkgcflags_nostubs = $(appcflags_nostubs) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+
+# stubscflags contains $(cflags) plus flags used for building a stubs
+# library for the package.  Note: -DSTATIC_BUILD is defined in
+# $(OPTDEFINES) only if the OPTS configuration indicates a static
+# library. However the stubs library is ALWAYS static hence included
+# here irrespective of the OPTS setting.
+#
+# TBD - tclvfs has a comment that stubs libs should not be compiled with -GL
+# without stating why. Tcl itself compiled stubs libs with this flag.
+# so we do not remove it from cflags. -GL may prevent extensions
+# compiled with one VC version to fail to link against stubs library
+# compiled with another VC version. Check for this and fix accordingly.
+stubscflags = $(cflags) $(PKGNAMEFLAGS) $(PRJ_DEFINES) $(OPTDEFINES) -Zl -DSTATIC_BUILD $(INCLUDES)
+
+# Link flags 
+
+!if $(DEBUG)
+ldebug = -debug -debugtype:cv
+!else
+ldebug = -release -opt:ref -opt:icf,3
+!if $(SYMBOLS)
+ldebug = $(ldebug) -debug -debugtype:cv
+!endif
+!endif
+
+# Note: Profiling is currently only possible with the Visual Studio Enterprise
+!if $(PROFILE)
+ldebug= $(ldebug) -profile
+!endif
+
+### Declarations common to all linker versions 
+lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+lflags = $(lflags) -nodefaultlib:libucrt.lib
+!endif
+
+# Old linkers (Visual C++ 6 in particular) will link for fast loading
+# on Win98. Since we do not support Win98 any more, we specify nowin98
+# as recommended for NT and later. However, this is only required by
+# IX86 on older compilers and only needed if we are not doing a static build.
+
+!if "$(MACHINE)" == "IX86" && !$(STATIC_BUILD)
+!if [nmakehlp -l -opt:nowin98 $(LINKER_TESTFLAGS)]
+# Align sections for PE size savings.
+lflags = $(lflags) -opt:nowin98
+!endif
+!endif
+
+dlllflags = $(lflags) -dll
+conlflags = $(lflags) -subsystem:console
+guilflags = $(lflags) -subsystem:windows
+
+# Libraries that are required for every image.
+# Extensions should define any additional libraries with $(PRJ_LIBS)
+winlibs   = kernel32.lib advapi32.lib
+
+!if $(NEED_TK)
+winlibs = $(winlibs) gdi32.lib user32.lib uxtheme.lib
+!endif
+
+# Avoid 'unresolved external symbol __security_cookie' errors.
+# c.f. http://support.microsoft.com/?id=894573
+!if "$(MACHINE)" == "AMD64"
+!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500
+winlibs   = $(winlibs) bufferoverflowU.lib
+!endif
+!endif
+
+baselibs = $(winlibs) $(PRJ_LIBS)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+baselibs   = $(baselibs) ucrt.lib
+!endif
+
+################################################################
+# 13. Define standard commands, common make targets and implicit rules
+
+CCPKGCMD = $(cc32) $(pkgcflags) -Fo$(TMP_DIR)^\
+CCAPPCMD = $(cc32) $(appcflags) -Fo$(TMP_DIR)^\
+CCSTUBSCMD = $(cc32) $(stubscflags) -Fo$(TMP_DIR)^\
+
+LIBCMD = $(lib32) -nologo $(LINKERFLAGS) -out:$@
+DLLCMD = $(link32) $(dlllflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+
+CONEXECMD = $(link32) $(conlflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+GUIEXECMD = $(link32) $(guilflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+RESCMD  = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \
+           $(TCL_INCLUDES) \
+           -DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \
+           -DCOMMAVERSION=$(DOTVERSION:.=,),0 \
+           -DDOTVERSION=\"$(DOTVERSION)\" \
+           -DVERSION=\"$(VERSION)\" \
+           -DSUFX=\"$(SUFX)\" \
+            -DPROJECT=\"$(PROJECT)\" \
+            -DPRJLIBNAME=\"$(PRJLIBNAME)\" 
+
+!ifndef DEFAULT_BUILD_TARGET
+DEFAULT_BUILD_TARGET = $(PROJECT)
+!endif
+
+default-target: $(DEFAULT_BUILD_TARGET)
+
+default-pkgindex:
+       @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \
+           [list load [file join $$dir $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl
+
+default-pkgindex-tea:
+       @if exist $(ROOT)\pkgIndex.tcl.in nmakehlp -s << $(ROOT)\pkgIndex.tcl.in > $(OUT_DIR)\pkgIndex.tcl
+@PACKAGE_VERSION@    $(DOTVERSION)
+@PACKAGE_NAME@       $(PRJ_PACKAGE_TCLNAME)
+@PACKAGE_TCLNAME@    $(PRJ_PACKAGE_TCLNAME)
+@PKG_LIB_FILE@       $(PRJLIBNAME)
+<<
+
+
+default-install: default-install-binaries default-install-libraries
+
+default-install-binaries: $(PRJLIB)
+       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-libraries: $(OUT_DIR)\pkgIndex.tcl
+       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
+       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
+       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
+       @$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)
+
+default-install-stubs:
+       @echo Installing stubs library to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJSTUBLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-docs-html:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.html" "$(DOCDIR)\*.css" "$(DOCDIR)\*.png") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-docs-n:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.n") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-demos:
+       @echo Installing demos to '$(DEMO_INSTALL_DIR)'
+       @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)"
+       @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)"
+
+default-clean:
+       @echo Cleaning $(TMP_DIR)\* ...
+       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)
+       @echo Cleaning $(WINDIR)\nmakehlp.obj, nmakehlp.exe ...
+       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj
+       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe
+       @if exist $(WINDIR)\nmakehlp.out del $(WINDIR)\nmakehlp.out
+       @echo Cleaning $(WINDIR)\nmhlp-out.txt ...
+       @if exist $(WINDIR)\nmhlp-out.txt del $(WINDIR)\nmhlp-out.txt
+       @echo Cleaning $(WINDIR)\_junk.pch ...
+       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch
+       @echo Cleaning $(WINDIR)\vercl.x, vercl.i ...
+       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x
+       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i
+       @echo Cleaning $(WINDIR)\versions.vc, version.vc ...
+       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc
+       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc
+
+default-hose: default-clean
+       @echo Hosing $(OUT_DIR)\* ...
+       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)
+
+# Only for backward compatibility
+default-distclean: default-hose
+
+default-setup:
+       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
+       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
+
+!if "$(TESTPAT)" != ""
+TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
+!endif
+
+default-test: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS)
+
+default-shell: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       $(DEBUGGER) $(TCLSH)
+
+# Generation of Windows version resource 
+!ifdef RCFILE
+
+# Note: don't use $** in below rule because there may be other dependencies
+# and only the "master" rc must be passed to the resource compiler
+$(TMP_DIR)\$(PROJECT).res: $(RCDIR)\$(PROJECT).rc
+       $(RESCMD) $(RCDIR)\$(PROJECT).rc
+
+!else
+
+# If parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+$(TMP_DIR)\$(PROJECT).res: $(TMP_DIR)\$(PROJECT).rc
+
+$(TMP_DIR)\$(PROJECT).rc:
+       @$(COPY) << $(TMP_DIR)\$(PROJECT).rc
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION   COMMAVERSION
+ PRODUCTVERSION        COMMAVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef DEBUG
+ FILEFLAGS     VS_FF_DEBUG
+#else
+ FILEFLAGS     0x0L
+#endif
+ FILEOS                VOS_NT_WINDOWS32
+ FILETYPE      VFT_DLL
+ FILESUBTYPE   0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "FileDescription",  "Tcl extension " PROJECT
+            VALUE "OriginalFilename", PRJLIBNAME
+            VALUE "FileVersion",      DOTVERSION
+            VALUE "ProductName",      "Package " PROJECT " for Tcl"
+            VALUE "ProductVersion",   DOTVERSION 
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+<<
+
+!endif # ifdef RCFILE
+
+!ifndef DISABLE_IMPLICIT_RULES
+DISABLE_IMPLICIT_RULES = 0
+!endif
+
+!if !$(DISABLE_IMPLICIT_RULES)
+# Implicit rule definitions - only for building library objects. For stubs and
+# main application, the master makefile should define explicit rules.
+
+{$(ROOT)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(WINDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(RCDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(WINDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(TMP_DIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+.SUFFIXES:
+.SUFFIXES:.c .rc
+
+!endif
+
+################################################################
+# 14. Sanity check selected options against Tcl build options
+# When building an extension, certain configuration options should
+# match the ones used when Tcl was built. Here we check and
+# warn on a mismatch.
+!if ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+!if exist("$(_TCLDIR)\lib\nmake\tcl.nmake")
+TCLNMAKECONFIG = "$(_TCLDIR)\lib\nmake\tcl.nmake"
+!endif
+!else # ! $(TCLINSTALL) - building against Tcl source
+!if exist("$(OUT_DIR)\tcl.nmake")
+TCLNMAKECONFIG = "$(OUT_DIR)\tcl.nmake"
+!endif
+!endif # TCLINSTALL
+
+!if $(CONFIG_CHECK)
+!ifdef TCLNMAKECONFIG
+!include $(TCLNMAKECONFIG)
+
+!if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)"
+!error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)).
+!endif
+!if defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC)
+!message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)).
+!endif
+!if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG)
+!message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)).
+!endif
+!endif
+
+!endif # TCLNMAKECONFIG
+
+!endif # ! $(DOING_TCL)
+
+
+#----------------------------------------------------------
+# Display stats being used.
+#----------------------------------------------------------
+
+!if !$(DOING_TCL)
+!message *** Building against Tcl at '$(_TCLDIR)'
+!endif
+!if !$(DOING_TK) && $(NEED_TK)
+!message *** Building against Tk at '$(_TKDIR)'
+!endif
+!message *** Intermediate directory will be '$(TMP_DIR)'
+!message *** Output directory will be '$(OUT_DIR)'
+!message *** Installation, if selected, will be in '$(_INSTALLDIR)'
+!message *** Suffix for binaries will be '$(SUFX)'
+!message *** Compiler version $(VCVER). Target machine is $(MACHINE)
+!message *** Host architecture is $(NATIVE_ARCH)
+
+!endif # ifdef _RULES_VC
diff --git a/pkgs/tdbcmysql1.0.6/win/targets.vc b/pkgs/tdbcmysql1.0.6/win/targets.vc
new file mode 100644 (file)
index 0000000..312022d
--- /dev/null
@@ -0,0 +1,98 @@
+#------------------------------------------------------------- -*- makefile -*-
+# targets.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file defines some standard targets for the convenience of extensions
+# and can be optionally included by the extension makefile.
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for docs.
+
+$(PROJECT): setup pkgindex $(PRJLIB)
+
+!ifdef PRJ_STUBOBJS
+$(PROJECT): $(PRJSTUBLIB)
+$(PRJSTUBLIB): $(PRJ_STUBOBJS)
+       $(LIBCMD) $**
+
+$(PRJ_STUBOBJS):
+       $(CCSTUBSCMD) %s
+!endif # PRJ_STUBOBJS
+
+!ifdef PRJ_MANIFEST
+$(PROJECT): $(PRJLIB).manifest
+$(PRJLIB).manifest: $(PRJ_MANIFEST)
+       @nmakehlp -s << $** >$@
+@MACHINE@        $(MACHINE:IX86=X86)
+<<
+!endif
+
+!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"
+$(PRJLIB): $(PRJ_OBJS) $(RESFILE)
+!if $(STATIC_BUILD)
+       $(LIBCMD) $**
+!else
+       $(DLLCMD) $**
+       $(_VC_MANIFEST_EMBED_DLL)
+!endif
+       -@del $*.exp
+!endif
+
+!if "$(PRJ_HEADERS)" != "" && "$(PRJ_OBJS)" != ""
+$(PRJ_OBJS): $(PRJ_HEADERS)
+!endif
+
+# If parent makefile has defined stub objects, add their installation
+# to the default install
+!if "$(PRJ_STUBOBJS)" != ""
+default-install: default-install-stubs
+!endif
+
+# Unlike the other default targets, these cannot be in rules.vc because
+# the executed command depends on existence of macro PRJ_HEADERS_PUBLIC
+# that the parent makefile will not define until after including rules-ext.vc
+!if "$(PRJ_HEADERS_PUBLIC)" != ""
+default-install: default-install-headers
+default-install-headers:
+       @echo Installing headers to '$(INCLUDE_INSTALL_DIR)'
+       @for %f in ($(PRJ_HEADERS_PUBLIC)) do @$(COPY) %f "$(INCLUDE_INSTALL_DIR)"
+!endif
+
+!if "$(DISABLE_STANDARD_TARGETS)" == ""
+DISABLE_STANDARD_TARGETS = 0
+!endif
+
+!if "$(DISABLE_TARGET_setup)" == ""
+DISABLE_TARGET_setup = 0
+!endif
+!if "$(DISABLE_TARGET_install)" == ""
+DISABLE_TARGET_install = 0
+!endif
+!if "$(DISABLE_TARGET_clean)" == ""
+DISABLE_TARGET_clean = 0
+!endif
+!if "$(DISABLE_TARGET_test)" == ""
+DISABLE_TARGET_test = 0
+!endif
+!if "$(DISABLE_TARGET_shell)" == ""
+DISABLE_TARGET_shell = 0
+!endif
+
+!if !$(DISABLE_STANDARD_TARGETS)
+!if !$(DISABLE_TARGET_setup)
+setup: default-setup
+!endif
+!if !$(DISABLE_TARGET_install)
+install: default-install
+!endif
+!if !$(DISABLE_TARGET_clean)
+clean: default-clean
+realclean: hose
+hose: default-hose
+distclean: realclean default-distclean
+!endif
+!if !$(DISABLE_TARGET_test)
+test: default-test
+!endif
+!if !$(DISABLE_TARGET_shell)
+shell: default-shell
+!endif
+!endif # DISABLE_STANDARD_TARGETS
diff --git a/pkgs/tdbcodbc1.0.5/tclconfig/tcl.m4 b/pkgs/tdbcodbc1.0.5/tclconfig/tcl.m4
deleted file mode 100644 (file)
index 203a05d..0000000
+++ /dev/null
@@ -1,4241 +0,0 @@
-# tcl.m4 --
-#
-#      This file provides a set of autoconf macros to help TEA-enable
-#      a Tcl extension.
-#
-# Copyright (c) 1999-2000 Ajuba Solutions.
-# Copyright (c) 2002-2005 ActiveState Corporation.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-
-AC_PREREQ(2.57)
-
-dnl TEA extensions pass us the version of TEA they think they
-dnl are compatible with (must be set in TEA_INIT below)
-dnl TEA_VERSION="3.10"
-
-# Possible values for key variables defined:
-#
-# TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem')
-# TEA_PLATFORM        - windows unix
-# TEA_TK_EXTENSION    - True if this is a Tk extension
-#
-
-#------------------------------------------------------------------------
-# TEA_PATH_TCLCONFIG --
-#
-#      Locate the tclConfig.sh file and perform a sanity check on
-#      the Tcl compile flags
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-tcl=...
-#
-#      Defines the following vars:
-#              TCL_BIN_DIR     Full path to the directory containing
-#                              the tclConfig.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_TCLCONFIG], [
-    dnl TEA specific: Make sure we are initialized
-    AC_REQUIRE([TEA_INIT])
-    #
-    # Ok, lets find the tcl configuration
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-tcl
-    #
-
-    if test x"${no_tcl}" = x ; then
-       # we reset no_tcl in case something fails here
-       no_tcl=true
-       AC_ARG_WITH(tcl,
-           AC_HELP_STRING([--with-tcl],
-               [directory containing tcl configuration (tclConfig.sh)]),
-           with_tclconfig="${withval}")
-       AC_MSG_CHECKING([for Tcl configuration])
-       AC_CACHE_VAL(ac_cv_c_tclconfig,[
-
-           # First check to see if --with-tcl was specified.
-           if test x"${with_tclconfig}" != x ; then
-               case "${with_tclconfig}" in
-                   */tclConfig.sh )
-                       if test -f "${with_tclconfig}"; then
-                           AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself])
-                           with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`"
-                       fi ;;
-               esac
-               if test -f "${with_tclconfig}/tclConfig.sh" ; then
-                   ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`"
-               else
-                   AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
-               fi
-           fi
-
-           # then check for a private Tcl installation
-           if test x"${ac_cv_c_tclconfig}" = x ; then
-               for i in \
-                       ../tcl \
-                       `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../tcl \
-                       `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../../tcl \
-                       `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # on Darwin, check in Framework installation locations
-           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
-               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
-                       `ls -d /Library/Frameworks 2>/dev/null` \
-                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
-                       `ls -d /System/Library/Frameworks 2>/dev/null` \
-                       ; do
-                   if test -f "$i/Tcl.framework/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # TEA specific: on Windows, check in common installation locations
-           if test "${TEA_PLATFORM}" = "windows" \
-               -a x"${ac_cv_c_tclconfig}" = x ; then
-               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
-                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few common install locations
-           if test x"${ac_cv_c_tclconfig}" = x ; then
-               for i in `ls -d ${libdir} 2>/dev/null` \
-                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
-                       `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
-                       `ls -d /usr/contrib/lib 2>/dev/null` \
-                       `ls -d /usr/lib 2>/dev/null` \
-                       `ls -d /usr/lib64 2>/dev/null` \
-                       `ls -d /usr/lib/tcl8.6 2>/dev/null` \
-                       `ls -d /usr/lib/tcl8.5 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few other private locations
-           if test x"${ac_cv_c_tclconfig}" = x ; then
-               for i in \
-                       ${srcdir}/../tcl \
-                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-       ])
-
-       if test x"${ac_cv_c_tclconfig}" = x ; then
-           TCL_BIN_DIR="# no Tcl configs found"
-           AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh])
-       else
-           no_tcl=
-           TCL_BIN_DIR="${ac_cv_c_tclconfig}"
-           AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PATH_TKCONFIG --
-#
-#      Locate the tkConfig.sh file
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-tk=...
-#
-#      Defines the following vars:
-#              TK_BIN_DIR      Full path to the directory containing
-#                              the tkConfig.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_TKCONFIG], [
-    #
-    # Ok, lets find the tk configuration
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-tk
-    #
-
-    if test x"${no_tk}" = x ; then
-       # we reset no_tk in case something fails here
-       no_tk=true
-       AC_ARG_WITH(tk,
-           AC_HELP_STRING([--with-tk],
-               [directory containing tk configuration (tkConfig.sh)]),
-           with_tkconfig="${withval}")
-       AC_MSG_CHECKING([for Tk configuration])
-       AC_CACHE_VAL(ac_cv_c_tkconfig,[
-
-           # First check to see if --with-tkconfig was specified.
-           if test x"${with_tkconfig}" != x ; then
-               case "${with_tkconfig}" in
-                   */tkConfig.sh )
-                       if test -f "${with_tkconfig}"; then
-                           AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself])
-                           with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`"
-                       fi ;;
-               esac
-               if test -f "${with_tkconfig}/tkConfig.sh" ; then
-                   ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`"
-               else
-                   AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
-               fi
-           fi
-
-           # then check for a private Tk library
-           if test x"${ac_cv_c_tkconfig}" = x ; then
-               for i in \
-                       ../tk \
-                       `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../tk \
-                       `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../../tk \
-                       `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # on Darwin, check in Framework installation locations
-           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then
-               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
-                       `ls -d /Library/Frameworks 2>/dev/null` \
-                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
-                       `ls -d /System/Library/Frameworks 2>/dev/null` \
-                       ; do
-                   if test -f "$i/Tk.framework/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few common install locations
-           if test x"${ac_cv_c_tkconfig}" = x ; then
-               for i in `ls -d ${libdir} 2>/dev/null` \
-                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
-                       `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
-                       `ls -d /usr/contrib/lib 2>/dev/null` \
-                       `ls -d /usr/lib 2>/dev/null` \
-                       `ls -d /usr/lib64 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # TEA specific: on Windows, check in common installation locations
-           if test "${TEA_PLATFORM}" = "windows" \
-               -a x"${ac_cv_c_tkconfig}" = x ; then
-               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
-                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few other private locations
-           if test x"${ac_cv_c_tkconfig}" = x ; then
-               for i in \
-                       ${srcdir}/../tk \
-                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-       ])
-
-       if test x"${ac_cv_c_tkconfig}" = x ; then
-           TK_BIN_DIR="# no Tk configs found"
-           AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh])
-       else
-           no_tk=
-           TK_BIN_DIR="${ac_cv_c_tkconfig}"
-           AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_TCLCONFIG --
-#
-#      Load the tclConfig.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              TCL_BIN_DIR
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TCL_BIN_DIR
-#              TCL_SRC_DIR
-#              TCL_LIB_FILE
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_TCLCONFIG], [
-    AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh])
-
-    if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
-        AC_MSG_RESULT([loading])
-       . "${TCL_BIN_DIR}/tclConfig.sh"
-    else
-        AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh])
-    fi
-
-    # eval is required to do the TCL_DBGX substitution
-    eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
-    eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
-
-    # If the TCL_BIN_DIR is the build directory (not the install directory),
-    # then set the common variable name to the value of the build variables.
-    # For example, the variable TCL_LIB_SPEC will be set to the value
-    # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
-    # instead of TCL_BUILD_LIB_SPEC since it will work with both an
-    # installed and uninstalled version of Tcl.
-    if test -f "${TCL_BIN_DIR}/Makefile" ; then
-        TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}"
-        TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}"
-        TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}"
-    elif test "`uname -s`" = "Darwin"; then
-       # If Tcl was built as a framework, attempt to use the libraries
-       # from the framework at the given location so that linking works
-       # against Tcl.framework installed in an arbitrary location.
-       case ${TCL_DEFS} in
-           *TCL_FRAMEWORK*)
-               if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
-                   for i in "`cd "${TCL_BIN_DIR}"; pwd`" \
-                            "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do
-                       if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then
-                           TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}"
-                           break
-                       fi
-                   done
-               fi
-               if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then
-                   TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}"
-                   TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"
-               fi
-               ;;
-       esac
-    fi
-
-    # eval is required to do the TCL_DBGX substitution
-    eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
-    eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
-    eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
-    eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
-
-    AC_SUBST(TCL_VERSION)
-    AC_SUBST(TCL_PATCH_LEVEL)
-    AC_SUBST(TCL_BIN_DIR)
-    AC_SUBST(TCL_SRC_DIR)
-
-    AC_SUBST(TCL_LIB_FILE)
-    AC_SUBST(TCL_LIB_FLAG)
-    AC_SUBST(TCL_LIB_SPEC)
-
-    AC_SUBST(TCL_STUB_LIB_FILE)
-    AC_SUBST(TCL_STUB_LIB_FLAG)
-    AC_SUBST(TCL_STUB_LIB_SPEC)
-
-    AC_MSG_CHECKING([platform])
-    hold_cc=$CC; CC="$TCL_CC"
-    AC_TRY_COMPILE(,[
-           #ifdef _WIN32
-               #error win32
-           #endif
-       ], [
-           TEA_PLATFORM="unix"
-           CYGPATH=echo
-       ], [
-           TEA_PLATFORM="windows"
-           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)   ]
-    )
-    CC=$hold_cc
-    AC_MSG_RESULT($TEA_PLATFORM)
-
-    # The BUILD_$pkg is to define the correct extern storage class
-    # handling when making this package
-    AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [],
-           [Building extension source?])
-    # Do this here as we have fully defined TEA_PLATFORM now
-    if test "${TEA_PLATFORM}" = "windows" ; then
-       EXEEXT=".exe"
-       CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp"
-    fi
-
-    # TEA specific:
-    AC_SUBST(CLEANFILES)
-    AC_SUBST(TCL_LIBS)
-    AC_SUBST(TCL_DEFS)
-    AC_SUBST(TCL_EXTRA_CFLAGS)
-    AC_SUBST(TCL_LD_FLAGS)
-    AC_SUBST(TCL_SHLIB_LD_LIBS)
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_TKCONFIG --
-#
-#      Load the tkConfig.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              TK_BIN_DIR
-#
-# Results:
-#
-#      Sets the following vars that should be in tkConfig.sh:
-#              TK_BIN_DIR
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_TKCONFIG], [
-    AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh])
-
-    if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then
-        AC_MSG_RESULT([loading])
-       . "${TK_BIN_DIR}/tkConfig.sh"
-    else
-        AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh])
-    fi
-
-    # eval is required to do the TK_DBGX substitution
-    eval "TK_LIB_FILE=\"${TK_LIB_FILE}\""
-    eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\""
-
-    # If the TK_BIN_DIR is the build directory (not the install directory),
-    # then set the common variable name to the value of the build variables.
-    # For example, the variable TK_LIB_SPEC will be set to the value
-    # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC
-    # instead of TK_BUILD_LIB_SPEC since it will work with both an
-    # installed and uninstalled version of Tcl.
-    if test -f "${TK_BIN_DIR}/Makefile" ; then
-        TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}"
-        TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}"
-        TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}"
-    elif test "`uname -s`" = "Darwin"; then
-       # If Tk was built as a framework, attempt to use the libraries
-       # from the framework at the given location so that linking works
-       # against Tk.framework installed in an arbitrary location.
-       case ${TK_DEFS} in
-           *TK_FRAMEWORK*)
-               if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then
-                   for i in "`cd "${TK_BIN_DIR}"; pwd`" \
-                            "`cd "${TK_BIN_DIR}"/../..; pwd`"; do
-                       if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then
-                           TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}"
-                           break
-                       fi
-                   done
-               fi
-               if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then
-                   TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}"
-                   TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"
-               fi
-               ;;
-       esac
-    fi
-
-    # eval is required to do the TK_DBGX substitution
-    eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\""
-    eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\""
-    eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\""
-    eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\""
-
-    # TEA specific: Ensure windowingsystem is defined
-    if test "${TEA_PLATFORM}" = "unix" ; then
-       case ${TK_DEFS} in
-           *MAC_OSX_TK*)
-               AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?])
-               TEA_WINDOWINGSYSTEM="aqua"
-               ;;
-           *)
-               TEA_WINDOWINGSYSTEM="x11"
-               ;;
-       esac
-    elif test "${TEA_PLATFORM}" = "windows" ; then
-       TEA_WINDOWINGSYSTEM="win32"
-    fi
-
-    AC_SUBST(TK_VERSION)
-    AC_SUBST(TK_BIN_DIR)
-    AC_SUBST(TK_SRC_DIR)
-
-    AC_SUBST(TK_LIB_FILE)
-    AC_SUBST(TK_LIB_FLAG)
-    AC_SUBST(TK_LIB_SPEC)
-
-    AC_SUBST(TK_STUB_LIB_FILE)
-    AC_SUBST(TK_STUB_LIB_FLAG)
-    AC_SUBST(TK_STUB_LIB_SPEC)
-
-    # TEA specific:
-    AC_SUBST(TK_LIBS)
-    AC_SUBST(TK_XINCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_PROG_TCLSH
-#      Determine the fully qualified path name of the tclsh executable
-#      in the Tcl build directory or the tclsh installed in a bin
-#      directory. This macro will correctly determine the name
-#      of the tclsh executable even if tclsh has not yet been
-#      built in the build directory. The tclsh found is always
-#      associated with a tclConfig.sh file. This tclsh should be used
-#      only for running extension test cases. It should never be
-#      or generation of files (like pkgIndex.tcl) at build time.
-#
-# Arguments:
-#      none
-#
-# Results:
-#      Substitutes the following vars:
-#              TCLSH_PROG
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PROG_TCLSH], [
-    AC_MSG_CHECKING([for tclsh])
-    if test -f "${TCL_BIN_DIR}/Makefile" ; then
-        # tclConfig.sh is in Tcl build directory
-        if test "${TEA_PLATFORM}" = "windows"; then
-          if test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
-          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}"
-          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}"
-          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}"
-          fi
-        else
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh"
-        fi
-    else
-        # tclConfig.sh is in install location
-        if test "${TEA_PLATFORM}" = "windows"; then
-            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
-        else
-            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}"
-        fi
-        list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \
-              `ls -d ${TCL_BIN_DIR}/..     2>/dev/null` \
-              `ls -d ${TCL_PREFIX}/bin     2>/dev/null`"
-        for i in $list ; do
-            if test -f "$i/${TCLSH_PROG}" ; then
-                REAL_TCL_BIN_DIR="`cd "$i"; pwd`/"
-                break
-            fi
-        done
-        TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}"
-    fi
-    AC_MSG_RESULT([${TCLSH_PROG}])
-    AC_SUBST(TCLSH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_PROG_WISH
-#      Determine the fully qualified path name of the wish executable
-#      in the Tk build directory or the wish installed in a bin
-#      directory. This macro will correctly determine the name
-#      of the wish executable even if wish has not yet been
-#      built in the build directory. The wish found is always
-#      associated with a tkConfig.sh file. This wish should be used
-#      only for running extension test cases. It should never be
-#      or generation of files (like pkgIndex.tcl) at build time.
-#
-# Arguments:
-#      none
-#
-# Results:
-#      Substitutes the following vars:
-#              WISH_PROG
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PROG_WISH], [
-    AC_MSG_CHECKING([for wish])
-    if test -f "${TK_BIN_DIR}/Makefile" ; then
-        # tkConfig.sh is in Tk build directory
-        if test "${TEA_PLATFORM}" = "windows"; then
-          if test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
-          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}s${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}$s{EXEEXT}"
-          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}"
-          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}"
-          fi
-        else
-            WISH_PROG="${TK_BIN_DIR}/wish"
-        fi
-    else
-        # tkConfig.sh is in install location
-        if test "${TEA_PLATFORM}" = "windows"; then
-            WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
-        else
-            WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}"
-        fi
-        list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \
-              `ls -d ${TK_BIN_DIR}/..     2>/dev/null` \
-              `ls -d ${TK_PREFIX}/bin     2>/dev/null`"
-        for i in $list ; do
-            if test -f "$i/${WISH_PROG}" ; then
-                REAL_TK_BIN_DIR="`cd "$i"; pwd`/"
-                break
-            fi
-        done
-        WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}"
-    fi
-    AC_MSG_RESULT([${WISH_PROG}])
-    AC_SUBST(WISH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_SHARED --
-#
-#      Allows the building of shared libraries
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-shared=yes|no
-#              --enable-stubs=yes|no
-#
-#      Defines the following vars:
-#              STATIC_BUILD    Used for building import/export libraries
-#                              on Windows.
-#
-#      Sets the following vars:
-#              SHARED_BUILD    Value of 1 or 0
-#               STUBS_BUILD     Value if 1 or 0
-#               USE_TCL_STUBS   Value true: if SHARED_BUILD or --enable-stubs
-#               USE_TCLOO_STUBS Value true: if SHARED_BUILD or --enable-stubs
-#               USE_TK_STUBS    Value true: if SHARED_BUILD or --enable-stubs
-#                                AND TEA_WINDOWING_SYSTEM != ""
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ENABLE_SHARED], [
-    AC_MSG_CHECKING([how to build libraries])
-    AC_ARG_ENABLE(shared,
-       AC_HELP_STRING([--enable-shared],
-           [build and link with shared libraries (default: on)]),
-       [shared_ok=$enableval], [shared_ok=yes])
-
-    if test "${enable_shared+set}" = set; then
-       enableval="$enable_shared"
-       shared_ok=$enableval
-    else
-       shared_ok=yes
-    fi
-
-    AC_ARG_ENABLE(stubs,
-       AC_HELP_STRING([--enable-stubs],
-           [build and link with stub libraries. Always true for shared builds (default: on)]),
-       [stubs_ok=$enableval], [stubs_ok=yes])
-
-    if test "${enable_stubs+set}" = set; then
-       enableval="$enable_stubs"
-       stubs_ok=$enableval
-    else
-       stubs_ok=yes
-    fi
-
-    # Stubs are always enabled for shared builds
-    if test "$shared_ok" = "yes" ; then
-       AC_MSG_RESULT([shared])
-       SHARED_BUILD=1
-        STUBS_BUILD=1
-    else
-       AC_MSG_RESULT([static])
-       SHARED_BUILD=0
-       AC_DEFINE(STATIC_BUILD, 1, [This a static build])
-        if test "$stubs_ok" = "yes" ; then
-          STUBS_BUILD=1
-        else
-          STUBS_BUILD=0
-        fi
-    fi
-    if test "${STUBS_BUILD}" = "1" ; then
-      AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs])
-      AC_DEFINE(USE_TCLOO_STUBS, 1, [Use TclOO stubs])
-      if test "${TEA_WINDOWINGSYSTEM}" != ""; then
-        AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs])
-      fi
-    fi
-
-    AC_SUBST(SHARED_BUILD)
-    AC_SUBST(STUBS_BUILD)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_THREADS --
-#
-#      Specify if thread support should be enabled.  If "yes" is specified
-#      as an arg (optional), threads are enabled by default, "no" means
-#      threads are disabled.  "yes" is the default.
-#
-#      TCL_THREADS is checked so that if you are compiling an extension
-#      against a threaded core, your extension must be compiled threaded
-#      as well.
-#
-#      Note that it is legal to have a thread enabled extension run in a
-#      threaded or non-threaded Tcl core, but a non-threaded extension may
-#      only run in a non-threaded Tcl core.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-threads
-#
-#      Sets the following vars:
-#              THREADS_LIBS    Thread library(s)
-#
-#      Defines the following vars:
-#              TCL_THREADS
-#              _REENTRANT
-#              _THREAD_SAFE
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_THREADS], [
-    AC_ARG_ENABLE(threads,
-       AC_HELP_STRING([--enable-threads],
-           [build with threads]),
-       [tcl_ok=$enableval], [tcl_ok=yes])
-
-    if test "${enable_threads+set}" = set; then
-       enableval="$enable_threads"
-       tcl_ok=$enableval
-    else
-       tcl_ok=yes
-    fi
-
-    if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
-       TCL_THREADS=1
-
-       if test "${TEA_PLATFORM}" != "windows" ; then
-           # We are always OK on Windows, so check what this platform wants:
-
-           # USE_THREAD_ALLOC tells us to try the special thread-based
-           # allocator that significantly reduces lock contention
-           AC_DEFINE(USE_THREAD_ALLOC, 1,
-               [Do we want to use the threaded memory allocator?])
-           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
-           if test "`uname -s`" = "SunOS" ; then
-               AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
-                       [Do we really want to follow the standard? Yes we do!])
-           fi
-           AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?])
-           AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
-           if test "$tcl_ok" = "no"; then
-               # Check a little harder for __pthread_mutex_init in the same
-               # library, as some systems hide it there until pthread.h is
-               # defined.  We could alternatively do an AC_TRY_COMPILE with
-               # pthread.h, but that will work with libpthread really doesn't
-               # exist, like AIX 4.2.  [Bug: 4359]
-               AC_CHECK_LIB(pthread, __pthread_mutex_init,
-                   tcl_ok=yes, tcl_ok=no)
-           fi
-
-           if test "$tcl_ok" = "yes"; then
-               # The space is needed
-               THREADS_LIBS=" -lpthread"
-           else
-               AC_CHECK_LIB(pthreads, pthread_mutex_init,
-                   tcl_ok=yes, tcl_ok=no)
-               if test "$tcl_ok" = "yes"; then
-                   # The space is needed
-                   THREADS_LIBS=" -lpthreads"
-               else
-                   AC_CHECK_LIB(c, pthread_mutex_init,
-                       tcl_ok=yes, tcl_ok=no)
-                   if test "$tcl_ok" = "no"; then
-                       AC_CHECK_LIB(c_r, pthread_mutex_init,
-                           tcl_ok=yes, tcl_ok=no)
-                       if test "$tcl_ok" = "yes"; then
-                           # The space is needed
-                           THREADS_LIBS=" -pthread"
-                       else
-                           TCL_THREADS=0
-                           AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled])
-                       fi
-                   fi
-               fi
-           fi
-       fi
-    else
-       TCL_THREADS=0
-    fi
-    # Do checking message here to not mess up interleaved configure output
-    AC_MSG_CHECKING([for building with threads])
-    if test "${TCL_THREADS}" = 1; then
-       AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?])
-       AC_MSG_RESULT([yes (default)])
-    else
-       AC_MSG_RESULT([no])
-    fi
-    # TCL_THREADS sanity checking.  See if our request for building with
-    # threads is the same as the way Tcl was built.  If not, warn the user.
-    case ${TCL_DEFS} in
-       *THREADS=1*)
-           if test "${TCL_THREADS}" = "0"; then
-               AC_MSG_WARN([
-    Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
-    that IS thread-enabled.  It is recommended to use --enable-threads.])
-           fi
-           ;;
-       *)
-           if test "${TCL_THREADS}" = "1"; then
-               AC_MSG_WARN([
-    --enable-threads requested, but building against a Tcl that is NOT
-    thread-enabled.  This is an OK configuration that will also run in
-    a thread-enabled core.])
-           fi
-           ;;
-    esac
-    AC_SUBST(TCL_THREADS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_SYMBOLS --
-#
-#      Specify if debugging symbols should be used.
-#      Memory (TCL_MEM_DEBUG) debugging can also be enabled.
-#
-# Arguments:
-#      none
-#
-#      TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives
-#      the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted.
-#      Requires the following vars to be set in the Makefile:
-#              CFLAGS_DEFAULT
-#              LDFLAGS_DEFAULT
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-symbols
-#
-#      Defines the following vars:
-#              CFLAGS_DEFAULT  Sets to $(CFLAGS_DEBUG) if true
-#                              Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false
-#              LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
-#                              Sets to $(LDFLAGS_OPTIMIZE) if false
-#              DBGX            Formerly used as debug library extension;
-#                              always blank now.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_SYMBOLS], [
-    dnl TEA specific: Make sure we are initialized
-    AC_REQUIRE([TEA_CONFIG_CFLAGS])
-    AC_MSG_CHECKING([for build with symbols])
-    AC_ARG_ENABLE(symbols,
-       AC_HELP_STRING([--enable-symbols],
-           [build with debugging symbols (default: off)]),
-       [tcl_ok=$enableval], [tcl_ok=no])
-    DBGX=""
-    if test "$tcl_ok" = "no"; then
-       CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG"
-       LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
-       AC_MSG_RESULT([no])
-    else
-       CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
-       LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
-       if test "$tcl_ok" = "yes"; then
-           AC_MSG_RESULT([yes (standard debugging)])
-       fi
-    fi
-    # TEA specific:
-    if test "${TEA_PLATFORM}" != "windows" ; then
-       LDFLAGS_DEFAULT="${LDFLAGS}"
-    fi
-    AC_SUBST(CFLAGS_DEFAULT)
-    AC_SUBST(LDFLAGS_DEFAULT)
-    AC_SUBST(TCL_DBGX)
-
-    if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
-       AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?])
-    fi
-
-    if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
-       if test "$tcl_ok" = "all"; then
-           AC_MSG_RESULT([enabled symbols mem debugging])
-       else
-           AC_MSG_RESULT([enabled $tcl_ok debugging])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_LANGINFO --
-#
-#      Allows use of modern nl_langinfo check for better l10n.
-#      This is only relevant for Unix.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-langinfo=yes|no (default is yes)
-#
-#      Defines the following vars:
-#              HAVE_LANGINFO   Triggers use of nl_langinfo if defined.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_LANGINFO], [
-    AC_ARG_ENABLE(langinfo,
-       AC_HELP_STRING([--enable-langinfo],
-           [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]),
-       [langinfo_ok=$enableval], [langinfo_ok=yes])
-
-    HAVE_LANGINFO=0
-    if test "$langinfo_ok" = "yes"; then
-       AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no])
-    fi
-    AC_MSG_CHECKING([whether to use nl_langinfo])
-    if test "$langinfo_ok" = "yes"; then
-       AC_CACHE_VAL(tcl_cv_langinfo_h, [
-           AC_TRY_COMPILE([#include <langinfo.h>], [nl_langinfo(CODESET);],
-                   [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])])
-       AC_MSG_RESULT([$tcl_cv_langinfo_h])
-       if test $tcl_cv_langinfo_h = yes; then
-           AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?])
-       fi
-    else
-       AC_MSG_RESULT([$langinfo_ok])
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_CONFIG_SYSTEM
-#
-#      Determine what the system is (some things cannot be easily checked
-#      on a feature-driven basis, alas). This can usually be done via the
-#      "uname" command.
-#
-# Arguments:
-#      none
-#
-# Results:
-#      Defines the following var:
-#
-#      system -        System/platform/version identification code.
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_CONFIG_SYSTEM], [
-    AC_CACHE_CHECK([system version], tcl_cv_sys_version, [
-       # TEA specific:
-       if test "${TEA_PLATFORM}" = "windows" ; then
-           tcl_cv_sys_version=windows
-       else
-           tcl_cv_sys_version=`uname -s`-`uname -r`
-           if test "$?" -ne 0 ; then
-               AC_MSG_WARN([can't find uname command])
-               tcl_cv_sys_version=unknown
-           else
-               if test "`uname -s`" = "AIX" ; then
-                   tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
-               fi
-           fi
-       fi
-    ])
-    system=$tcl_cv_sys_version
-])
-
-#--------------------------------------------------------------------
-# TEA_CONFIG_CFLAGS
-#
-#      Try to determine the proper flags to pass to the compiler
-#      for building shared libraries and other such nonsense.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines and substitutes the following vars:
-#
-#      DL_OBJS, DL_LIBS - removed for TEA, only needed by core.
-#       LDFLAGS -      Flags to pass to the compiler when linking object
-#                       files into an executable application binary such
-#                       as tclsh.
-#       LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
-#                       that tell the run-time dynamic linker where to look
-#                       for shared libraries such as libtcl.so.  Depends on
-#                       the variable LIB_RUNTIME_DIR in the Makefile. Could
-#                       be the same as CC_SEARCH_FLAGS if ${CC} is used to link.
-#       CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib",
-#                       that tell the run-time dynamic linker where to look
-#                       for shared libraries such as libtcl.so.  Depends on
-#                       the variable LIB_RUNTIME_DIR in the Makefile.
-#       SHLIB_CFLAGS -  Flags to pass to cc when compiling the components
-#                       of a shared library (may request position-independent
-#                       code, among other things).
-#       SHLIB_LD -      Base command to use for combining object files
-#                       into a shared library.
-#       SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
-#                       creating shared libraries.  This symbol typically
-#                       goes at the end of the "ld" commands that build
-#                       shared libraries. The value of the symbol defaults to
-#                       "${LIBS}" if all of the dependent libraries should
-#                       be specified when creating a shared library.  If
-#                       dependent libraries should not be specified (as on
-#                       SunOS 4.x, where they cause the link to fail, or in
-#                       general if Tcl and Tk aren't themselves shared
-#                       libraries), then this symbol has an empty string
-#                       as its value.
-#       SHLIB_SUFFIX -  Suffix to use for the names of dynamically loadable
-#                       extensions.  An empty string means we don't know how
-#                       to use shared libraries on this platform.
-#       LIB_SUFFIX -    Specifies everything that comes after the "libfoo"
-#                       in a static or shared library name, using the $PACKAGE_VERSION variable
-#                       to put the version in the right place.  This is used
-#                       by platforms that need non-standard library names.
-#                       Examples:  ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs
-#                       to have a version after the .so, and ${PACKAGE_VERSION}.a
-#                       on AIX, since a shared library needs to have
-#                       a .a extension whereas shared objects for loadable
-#                       extensions have a .so extension.  Defaults to
-#                       ${PACKAGE_VERSION}${SHLIB_SUFFIX}.
-#      CFLAGS_DEBUG -
-#                      Flags used when running the compiler in debug mode
-#      CFLAGS_OPTIMIZE -
-#                      Flags used when running the compiler in optimize mode
-#      CFLAGS -        Additional CFLAGS added as necessary (usually 64-bit)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_CONFIG_CFLAGS], [
-    dnl TEA specific: Make sure we are initialized
-    AC_REQUIRE([TEA_INIT])
-
-    # Step 0.a: Enable 64 bit support?
-
-    AC_MSG_CHECKING([if 64bit support is requested])
-    AC_ARG_ENABLE(64bit,
-       AC_HELP_STRING([--enable-64bit],
-           [enable 64bit support (default: off)]),
-       [do64bit=$enableval], [do64bit=no])
-    AC_MSG_RESULT([$do64bit])
-
-    # Step 0.b: Enable Solaris 64 bit VIS support?
-
-    AC_MSG_CHECKING([if 64bit Sparc VIS support is requested])
-    AC_ARG_ENABLE(64bit-vis,
-       AC_HELP_STRING([--enable-64bit-vis],
-           [enable 64bit Sparc VIS support (default: off)]),
-       [do64bitVIS=$enableval], [do64bitVIS=no])
-    AC_MSG_RESULT([$do64bitVIS])
-    # Force 64bit on with VIS
-    AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes])
-
-    # Step 0.c: Check if visibility support is available. Do this here so
-    # that platform specific alternatives can be used below if this fails.
-
-    AC_CACHE_CHECK([if compiler supports visibility "hidden"],
-       tcl_cv_cc_visibility_hidden, [
-       hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror"
-       AC_TRY_LINK([
-           extern __attribute__((__visibility__("hidden"))) void f(void);
-           void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes,
-           tcl_cv_cc_visibility_hidden=no)
-       CFLAGS=$hold_cflags])
-    AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [
-       AC_DEFINE(MODULE_SCOPE,
-           [extern __attribute__((__visibility__("hidden")))],
-           [Compiler support for module scope symbols])
-       AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols])
-    ])
-
-    # Step 0.d: Disable -rpath support?
-
-    AC_MSG_CHECKING([if rpath support is requested])
-    AC_ARG_ENABLE(rpath,
-       AC_HELP_STRING([--disable-rpath],
-           [disable rpath support (default: on)]),
-       [doRpath=$enableval], [doRpath=yes])
-    AC_MSG_RESULT([$doRpath])
-
-    # TEA specific: Cross-compiling options for Windows/CE builds?
-
-    AS_IF([test "${TEA_PLATFORM}" = windows], [
-       AC_MSG_CHECKING([if Windows/CE build is requested])
-       AC_ARG_ENABLE(wince,
-           AC_HELP_STRING([--enable-wince],
-               [enable Win/CE support (where applicable)]),
-           [doWince=$enableval], [doWince=no])
-       AC_MSG_RESULT([$doWince])
-    ])
-
-    # Set the variable "system" to hold the name and version number
-    # for the system.
-
-    TEA_CONFIG_SYSTEM
-
-    # Require ranlib early so we can override it in special cases below.
-
-    AC_REQUIRE([AC_PROG_RANLIB])
-
-    # Set configuration options based on system name and version.
-    # This is similar to Tcl's unix/tcl.m4 except that we've added a
-    # "windows" case and removed some core-only vars.
-
-    do64bit_ok=no
-    # default to '{$LIBS}' and set to "" on per-platform necessary basis
-    SHLIB_LD_LIBS='${LIBS}'
-    # When ld needs options to work in 64-bit mode, put them in
-    # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load]
-    # is disabled by the user. [Bug 1016796]
-    LDFLAGS_ARCH=""
-    UNSHARED_LIB_SUFFIX=""
-    # TEA specific: use PACKAGE_VERSION instead of VERSION
-    TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
-    ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
-    TCL_LIB_VERSIONS_OK=ok
-    CFLAGS_DEBUG=-g
-    AS_IF([test "$GCC" = yes], [
-       CFLAGS_OPTIMIZE=-O2
-       CFLAGS_WARNING="-Wall"
-    ], [
-       CFLAGS_OPTIMIZE=-O
-       CFLAGS_WARNING=""
-    ])
-    AC_CHECK_TOOL(AR, ar)
-    STLIB_LD='${AR} cr'
-    LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
-    AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION=""],[SHLIB_VERSION=".$SHLIB_VERSION"])
-    case $system in
-       # TEA specific:
-       windows)
-           # This is a 2-stage check to make sure we have the 64-bit SDK
-           # We have to know where the SDK is installed.
-           # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs
-           # MACHINE is IX86 for LINK, but this is used by the manifest,
-           # which requires x86|amd64|ia64.
-           MACHINE="X86"
-           if test "$do64bit" != "no" ; then
-               if test "x${MSSDK}x" = "xx" ; then
-                   MSSDK="C:/Progra~1/Microsoft Platform SDK"
-               fi
-               MSSDK=`echo "$MSSDK" | sed -e  's!\\\!/!g'`
-               PATH64=""
-               case "$do64bit" in
-                   amd64|x64|yes)
-                       MACHINE="AMD64" ; # default to AMD64 64-bit build
-                       PATH64="${MSSDK}/Bin/Win64/x86/AMD64"
-                       ;;
-                   ia64)
-                       MACHINE="IA64"
-                       PATH64="${MSSDK}/Bin/Win64"
-                       ;;
-               esac
-               if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then
-                   AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode])
-                   AC_MSG_WARN([Ensure latest Platform SDK is installed])
-                   do64bit="no"
-               else
-                   AC_MSG_RESULT([   Using 64-bit $MACHINE mode])
-                   do64bit_ok="yes"
-               fi
-           fi
-
-           if test "$doWince" != "no" ; then
-               if test "$do64bit" != "no" ; then
-                   AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible])
-               fi
-               if test "$GCC" = "yes" ; then
-                   AC_MSG_ERROR([Windows/CE and GCC builds incompatible])
-               fi
-               TEA_PATH_CELIB
-               # Set defaults for common evc4/PPC2003 setup
-               # Currently Tcl requires 300+, possibly 420+ for sockets
-               CEVERSION=420;          # could be 211 300 301 400 420 ...
-               TARGETCPU=ARMV4;        # could be ARMV4 ARM MIPS SH3 X86 ...
-               ARCH=ARM;               # could be ARM MIPS X86EM ...
-               PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
-               if test "$doWince" != "yes"; then
-                   # If !yes then the user specified something
-                   # Reset ARCH to allow user to skip specifying it
-                   ARCH=
-                   eval `echo $doWince | awk -F, '{ \
-           if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \
-           if ([$]1 < 400)   { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
-           if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \
-           if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \
-           if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \
-                   }'`
-                   if test "x${ARCH}" = "x" ; then
-                       ARCH=$TARGETCPU;
-                   fi
-               fi
-               OSVERSION=WCE$CEVERSION;
-               if test "x${WCEROOT}" = "x" ; then
-                       WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
-                   if test ! -d "${WCEROOT}" ; then
-                       WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
-                   fi
-               fi
-               if test "x${SDKROOT}" = "x" ; then
-                   SDKROOT="C:/Program Files/Windows CE Tools"
-                   if test ! -d "${SDKROOT}" ; then
-                       SDKROOT="C:/Windows CE Tools"
-                   fi
-               fi
-               WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
-               SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
-               if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \
-                   -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
-                   AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]])
-                   doWince="no"
-               else
-                   # We could PATH_NOSPACE these, but that's not important,
-                   # as long as we quote them when used.
-                   CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
-                   if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
-                       CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
-                   fi
-                   CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
-               fi
-           fi
-
-           if test "$GCC" != "yes" ; then
-               if test "${SHARED_BUILD}" = "0" ; then
-                   runtime=-MT
-               else
-                   runtime=-MD
-               fi
-               case "x`echo \${VisualStudioVersion}`" in
-                   x1[[4-9]]*)
-                       lflags="${lflags} -nodefaultlib:libucrt.lib"
-                       TEA_ADD_LIBS([ucrt.lib])
-                   ;;
-                   *)
-                   ;;
-               esac
-
-                if test "$do64bit" != "no" ; then
-                   # All this magic is necessary for the Win64 SDK RC1 - hobbs
-                   CC="\"${PATH64}/cl.exe\""
-                   CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\""
-                   RC="\"${MSSDK}/bin/rc.exe\""
-                   lflags="${lflags} -nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\""
-                   LINKBIN="\"${PATH64}/link.exe\""
-                   CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d"
-                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
-                   # Avoid 'unresolved external symbol __security_cookie'
-                   # errors, c.f. http://support.microsoft.com/?id=894573
-                   TEA_ADD_LIBS([bufferoverflowU.lib])
-               elif test "$doWince" != "no" ; then
-                   CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
-                   if test "${TARGETCPU}" = "X86"; then
-                       CC="\"${CEBINROOT}/cl.exe\""
-                   else
-                       CC="\"${CEBINROOT}/cl${ARCH}.exe\""
-                   fi
-                   CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
-                   RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
-                   arch=`echo ${ARCH} | awk '{print tolower([$]0)}'`
-                   defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS"
-                   if test "${SHARED_BUILD}" = "1" ; then
-                       # Static CE builds require static celib as well
-                       defs="${defs} _DLL"
-                   fi
-                   for i in $defs ; do
-                       AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i)
-                   done
-                   AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version])
-                   AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version])
-                   CFLAGS_DEBUG="-nologo -Zi -Od"
-                   CFLAGS_OPTIMIZE="-nologo -Ox"
-                   lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
-                   lflags="${lflags} -MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
-                   LINKBIN="\"${CEBINROOT}/link.exe\""
-                   AC_SUBST(CELIB_DIR)
-               else
-                   RC="rc"
-                   lflags="${lflags} -nologo"
-                   LINKBIN="link"
-                   CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d"
-                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
-               fi
-           fi
-
-           if test "$GCC" = "yes"; then
-               # mingw gcc mode
-               AC_CHECK_TOOL(RC, windres)
-               CFLAGS_DEBUG="-g"
-               CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
-               SHLIB_LD='${CC} -shared'
-               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
-               LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}"
-               LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}"
-
-               AC_CACHE_CHECK(for cross-compile version of gcc,
-                       ac_cv_cross,
-                       AC_TRY_COMPILE([
-                           #ifdef _WIN32
-                               #error cross-compiler
-                           #endif
-                       ], [],
-                       ac_cv_cross=yes,
-                       ac_cv_cross=no)
-                     )
-                     if test "$ac_cv_cross" = "yes"; then
-                       case "$do64bit" in
-                           amd64|x64|yes)
-                               CC="x86_64-w64-mingw32-gcc"
-                               LD="x86_64-w64-mingw32-ld"
-                               AR="x86_64-w64-mingw32-ar"
-                               RANLIB="x86_64-w64-mingw32-ranlib"
-                               RC="x86_64-w64-mingw32-windres"
-                           ;;
-                           *)
-                               CC="i686-w64-mingw32-gcc"
-                               LD="i686-w64-mingw32-ld"
-                               AR="i686-w64-mingw32-ar"
-                               RANLIB="i686-w64-mingw32-ranlib"
-                               RC="i686-w64-mingw32-windres"
-                           ;;
-                       esac
-               fi
-
-           else
-               SHLIB_LD="${LINKBIN} -dll ${lflags}"
-               # link -lib only works when -lib is the first arg
-               STLIB_LD="${LINKBIN} -lib ${lflags}"
-               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib'
-               PATHTYPE=-w
-               # For information on what debugtype is most useful, see:
-               # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
-               # and also
-               # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx
-               # This essentially turns it all on.
-               LDFLAGS_DEBUG="-debug -debugtype:cv"
-               LDFLAGS_OPTIMIZE="-release"
-               if test "$doWince" != "no" ; then
-                   LDFLAGS_CONSOLE="-link ${lflags}"
-                   LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
-               else
-                   LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
-                   LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
-               fi
-           fi
-
-           SHLIB_SUFFIX=".dll"
-           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll'
-
-           TCL_LIB_VERSIONS_OK=nodots
-           ;;
-       AIX-*)
-           AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [
-               # AIX requires the _r compiler when gcc isn't being used
-               case "${CC}" in
-                   *_r|*_r\ *)
-                       # ok ...
-                       ;;
-                   *)
-                       # Make sure only first arg gets _r
-                       CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'`
-                       ;;
-               esac
-               AC_MSG_RESULT([Using $CC for compiling with threads])
-           ])
-           LIBS="$LIBS -lc"
-           SHLIB_CFLAGS=""
-           SHLIB_SUFFIX=".so"
-
-           LD_LIBRARY_PATH_VAR="LIBPATH"
-
-           # Check to enable 64-bit flags for compiler/linker
-           AS_IF([test "$do64bit" = yes], [
-               AS_IF([test "$GCC" = yes], [
-                   AC_MSG_WARN([64bit mode not supported with GCC on $system])
-               ], [
-                   do64bit_ok=yes
-                   CFLAGS="$CFLAGS -q64"
-                   LDFLAGS_ARCH="-q64"
-                   RANLIB="${RANLIB} -X64"
-                   AR="${AR} -X64"
-                   SHLIB_LD_FLAGS="-b64"
-               ])
-           ])
-
-           AS_IF([test "`uname -m`" = ia64], [
-               # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
-               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
-               AS_IF([test "$GCC" = yes], [
-                   CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               ], [
-                   CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
-               ])
-               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
-           ], [
-               AS_IF([test "$GCC" = yes], [
-                   SHLIB_LD='${CC} -shared -Wl,-bexpall'
-               ], [
-                   SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry"
-                   LDFLAGS="$LDFLAGS -brtl"
-               ])
-               SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}"
-               CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ])
-           ;;
-       BeOS*)
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -nostart'
-           SHLIB_SUFFIX=".so"
-
-           #-----------------------------------------------------------
-           # Check for inet_ntoa in -lbind, for BeOS (which also needs
-           # -lsocket, even if the network functions are in -lnet which
-           # is always linked to, for compatibility.
-           #-----------------------------------------------------------
-           AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"])
-           ;;
-       BSD/OS-4.*)
-           SHLIB_CFLAGS="-export-dynamic -fPIC"
-           SHLIB_LD='${CC} -shared'
-           SHLIB_SUFFIX=".so"
-           LDFLAGS="$LDFLAGS -export-dynamic"
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       CYGWIN_*)
-           SHLIB_CFLAGS=""
-           SHLIB_LD='${CC} -shared'
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$[@].a"
-           SHLIB_SUFFIX=".dll"
-           EXEEXT=".exe"
-           do64bit_ok=yes
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       Haiku*)
-           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
-           AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
-           ;;
-       HP-UX-*.11.*)
-           # Use updated header definitions where possible
-           AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?])
-           # TEA specific: Needed by Tcl, but not most extensions
-           #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
-           #LIBS="$LIBS -lxnet"               # Use the XOPEN network library
-
-           AS_IF([test "`uname -m`" = ia64], [
-               SHLIB_SUFFIX=".so"
-               # Use newer C++ library for C++ extensions
-               #if test "$GCC" != "yes" ; then
-               #   CPPFLAGS="-AA"
-               #fi
-           ], [
-               SHLIB_SUFFIX=".sl"
-           ])
-           AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
-           AS_IF([test "$tcl_ok" = yes], [
-               LDFLAGS="$LDFLAGS -Wl,-E"
-               CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
-               LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
-               LD_LIBRARY_PATH_VAR="SHLIB_PATH"
-           ])
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_LD='${CC} -shared'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ], [
-               CFLAGS="$CFLAGS -z"
-               # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
-               #CFLAGS="$CFLAGS +DAportable"
-               SHLIB_CFLAGS="+z"
-               SHLIB_LD="ld -b"
-           ])
-
-           # Check to enable 64-bit flags for compiler/linker
-           AS_IF([test "$do64bit" = "yes"], [
-               AS_IF([test "$GCC" = yes], [
-                   case `${CC} -dumpmachine` in
-                       hppa64*)
-                           # 64-bit gcc in use.  Fix flags for GNU ld.
-                           do64bit_ok=yes
-                           SHLIB_LD='${CC} -shared'
-                           AS_IF([test $doRpath = yes], [
-                               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-                           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-                           ;;
-                       *)
-                           AC_MSG_WARN([64bit mode not supported with GCC on $system])
-                           ;;
-                   esac
-               ], [
-                   do64bit_ok=yes
-                   CFLAGS="$CFLAGS +DD64"
-                   LDFLAGS_ARCH="+DD64"
-               ])
-           ]) ;;
-       IRIX-6.*)
-           SHLIB_CFLAGS=""
-           SHLIB_LD="ld -n32 -shared -rdata_shared"
-           SHLIB_SUFFIX=".so"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
-           AS_IF([test "$GCC" = yes], [
-               CFLAGS="$CFLAGS -mabi=n32"
-               LDFLAGS="$LDFLAGS -mabi=n32"
-           ], [
-               case $system in
-                   IRIX-6.3)
-                       # Use to build 6.2 compatible binaries on 6.3.
-                       CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
-                       ;;
-                   *)
-                       CFLAGS="$CFLAGS -n32"
-                       ;;
-               esac
-               LDFLAGS="$LDFLAGS -n32"
-           ])
-           ;;
-       IRIX64-6.*)
-           SHLIB_CFLAGS=""
-           SHLIB_LD="ld -n32 -shared -rdata_shared"
-           SHLIB_SUFFIX=".so"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
-
-           # Check to enable 64-bit flags for compiler/linker
-
-           AS_IF([test "$do64bit" = yes], [
-               AS_IF([test "$GCC" = yes], [
-                   AC_MSG_WARN([64bit mode not supported by gcc])
-               ], [
-                   do64bit_ok=yes
-                   SHLIB_LD="ld -64 -shared -rdata_shared"
-                   CFLAGS="$CFLAGS -64"
-                   LDFLAGS_ARCH="-64"
-               ])
-           ])
-           ;;
-       Linux*|GNU*|NetBSD-Debian)
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_SUFFIX=".so"
-
-           # TEA specific:
-           CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
-
-           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
-           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"])
-           AS_IF([test $do64bit = yes], [
-               AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [
-                   hold_cflags=$CFLAGS
-                   CFLAGS="$CFLAGS -m64"
-                   AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no)
-                   CFLAGS=$hold_cflags])
-               AS_IF([test $tcl_cv_cc_m64 = yes], [
-                   CFLAGS="$CFLAGS -m64"
-                   do64bit_ok=yes
-               ])
-          ])
-
-           # The combo of gcc + glibc has a bug related to inlining of
-           # functions like strtod(). The -fno-builtin flag should address
-           # this problem but it does not work. The -fno-inline flag is kind
-           # of overkill but it works. Disable inlining only when one of the
-           # files in compat/*.c is being linked in.
-
-           AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"])
-           ;;
-       Lynx*)
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_SUFFIX=".so"
-           CFLAGS_OPTIMIZE=-02
-           SHLIB_LD='${CC} -shared'
-           LD_FLAGS="-Wl,--export-dynamic"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           ;;
-       OpenBSD-*)
-           arch=`arch -s`
-           case "$arch" in
-           vax)
-               SHLIB_SUFFIX=""
-               SHARED_LIB_SUFFIX=""
-               LDFLAGS=""
-               ;;
-           *)
-               case "$arch" in
-               alpha|sparc64)
-                   SHLIB_CFLAGS="-fPIC"
-                   ;;
-               *)
-                   SHLIB_CFLAGS="-fpic"
-                   ;;
-               esac
-               SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-               SHLIB_SUFFIX=".so"
-               AS_IF([test $doRpath = yes], [
-                   CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
-               LDFLAGS="-Wl,-export-dynamic"
-               ;;
-           esac
-           case "$arch" in
-           vax)
-               CFLAGS_OPTIMIZE="-O1"
-               ;;
-           *)
-               CFLAGS_OPTIMIZE="-O2"
-               ;;
-           esac
-           AS_IF([test "${TCL_THREADS}" = "1"], [
-               # On OpenBSD:   Compile with -pthread
-               #               Don't link with -lpthread
-               LIBS=`echo $LIBS | sed s/-lpthread//`
-               CFLAGS="$CFLAGS -pthread"
-           ])
-           # OpenBSD doesn't do version numbers with dots.
-           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
-           TCL_LIB_VERSIONS_OK=nodots
-           ;;
-       NetBSD-*)
-           # NetBSD has ELF and can use 'cc -shared' to build shared libs
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-           SHLIB_SUFFIX=".so"
-           LDFLAGS="$LDFLAGS -export-dynamic"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           AS_IF([test "${TCL_THREADS}" = "1"], [
-               # The -pthread needs to go in the CFLAGS, not LIBS
-               LIBS=`echo $LIBS | sed s/-pthread//`
-               CFLAGS="$CFLAGS -pthread"
-               LDFLAGS="$LDFLAGS -pthread"
-           ])
-           ;;
-       FreeBSD-*)
-           # This configuration from FreeBSD Ports.
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD="${CC} -shared"
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$[@]"
-           SHLIB_SUFFIX=".so"
-           LDFLAGS=""
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           AS_IF([test "${TCL_THREADS}" = "1"], [
-               # The -pthread needs to go in the LDFLAGS, not LIBS
-               LIBS=`echo $LIBS | sed s/-pthread//`
-               CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-               LDFLAGS="$LDFLAGS $PTHREAD_LIBS"])
-           case $system in
-           FreeBSD-3.*)
-               # Version numbers are dot-stripped by system policy.
-               TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .`
-               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1'
-               TCL_LIB_VERSIONS_OK=nodots
-               ;;
-           esac
-           ;;
-       Darwin-*)
-           CFLAGS_OPTIMIZE="-Os"
-           SHLIB_CFLAGS="-fno-common"
-           # To avoid discrepancies between what headers configure sees during
-           # preprocessing tests and compiling tests, move any -isysroot and
-           # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
-           CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
-               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
-               if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`"
-           CFLAGS="`echo " ${CFLAGS}" | \
-               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
-               if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`"
-           AS_IF([test $do64bit = yes], [
-               case `arch` in
-                   ppc)
-                       AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag],
-                               tcl_cv_cc_arch_ppc64, [
-                           hold_cflags=$CFLAGS
-                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
-                           AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes,
-                                   tcl_cv_cc_arch_ppc64=no)
-                           CFLAGS=$hold_cflags])
-                       AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [
-                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
-                           do64bit_ok=yes
-                       ]);;
-                   i386)
-                       AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag],
-                               tcl_cv_cc_arch_x86_64, [
-                           hold_cflags=$CFLAGS
-                           CFLAGS="$CFLAGS -arch x86_64"
-                           AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes,
-                                   tcl_cv_cc_arch_x86_64=no)
-                           CFLAGS=$hold_cflags])
-                       AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [
-                           CFLAGS="$CFLAGS -arch x86_64"
-                           do64bit_ok=yes
-                       ]);;
-                   *)
-                       AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);;
-               esac
-           ], [
-               # Check for combined 32-bit and 64-bit fat build
-               AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \
-                   && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [
-                   fat_32_64=yes])
-           ])
-           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}'
-           AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [
-               hold_ldflags=$LDFLAGS
-               LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
-               AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no)
-               LDFLAGS=$hold_ldflags])
-           AS_IF([test $tcl_cv_ld_single_module = yes], [
-               SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
-           ])
-           # TEA specific: link shlib with current and compatibility version flags
-           vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d`
-           SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}"
-           SHLIB_SUFFIX=".dylib"
-           # Don't use -prebind when building for Mac OS X 10.4 or later only:
-           AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \
-               "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [
-               LDFLAGS="$LDFLAGS -prebind"])
-           LDFLAGS="$LDFLAGS -headerpad_max_install_names"
-           AC_CACHE_CHECK([if ld accepts -search_paths_first flag],
-                   tcl_cv_ld_search_paths_first, [
-               hold_ldflags=$LDFLAGS
-               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
-               AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes,
-                       tcl_cv_ld_search_paths_first=no)
-               LDFLAGS=$hold_ldflags])
-           AS_IF([test $tcl_cv_ld_search_paths_first = yes], [
-               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
-           ])
-           AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
-               AC_DEFINE(MODULE_SCOPE, [__private_extern__],
-                   [Compiler support for module scope symbols])
-               tcl_cv_cc_visibility_hidden=yes
-           ])
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
-           # TEA specific: for combined 32 & 64 bit fat builds of Tk
-           # extensions, verify that 64-bit build is possible.
-           AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [
-               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [
-                   AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
-                       done
-                       CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
-                       LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
-                       AC_TRY_LINK([#include <X11/Xlib.h>], [XrmInitialize();],
-                           tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no)
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval $v'="$hold_'$v'"'
-                       done])
-               ])
-               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [
-                   AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
-                       done
-                       CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}"
-                       LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}"
-                       AC_TRY_LINK([#include <tk.h>], [Tk_InitStubs(NULL, "", 0);],
-                           tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no)
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval $v'="$hold_'$v'"'
-                       done])
-               ])
-               # remove 64-bit arch flags from CFLAGS et al. if configuration
-               # does not support 64-bit.
-               AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [
-                   AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags])
-                   for v in CFLAGS CPPFLAGS LDFLAGS; do
-                       eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"'
-                   done])
-           ])
-           ;;
-       OS/390-*)
-           CFLAGS_OPTIMIZE=""          # Optimizer is buggy
-           AC_DEFINE(_OE_SOCKETS, 1,   # needed in sys/socket.h
-               [Should OS/390 do the right thing with sockets?])
-           ;;
-       OSF1-V*)
-           # Digital OSF/1
-           SHLIB_CFLAGS=""
-           AS_IF([test "$SHARED_BUILD" = 1], [
-               SHLIB_LD='ld -shared -expect_unresolved "*"'
-           ], [
-               SHLIB_LD='ld -non_shared -expect_unresolved "*"'
-           ])
-           SHLIB_SUFFIX=".so"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
-           AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [
-               CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"])
-           # see pthread_intro(3) for pthread support on osf1, k.furukawa
-           AS_IF([test "${TCL_THREADS}" = 1], [
-               CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
-               CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
-               LIBS=`echo $LIBS | sed s/-lpthreads//`
-               AS_IF([test "$GCC" = yes], [
-                   LIBS="$LIBS -lpthread -lmach -lexc"
-               ], [
-                   CFLAGS="$CFLAGS -pthread"
-                   LDFLAGS="$LDFLAGS -pthread"
-               ])
-           ])
-           ;;
-       QNX-6*)
-           # QNX RTP
-           # This may work for all QNX, but it was only reported for v6.
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD="ld -Bshareable -x"
-           SHLIB_LD_LIBS=""
-           SHLIB_SUFFIX=".so"
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       SCO_SV-3.2*)
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_CFLAGS="-fPIC -melf"
-               LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
-           ], [
-               SHLIB_CFLAGS="-Kpic -belf"
-               LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
-           ])
-           SHLIB_LD="ld -G"
-           SHLIB_LD_LIBS=""
-           SHLIB_SUFFIX=".so"
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       SunOS-5.[[0-6]])
-           # Careful to not let 5.10+ fall into this case
-
-           # Note: If _REENTRANT isn't defined, then Solaris
-           # won't define thread-safe library routines.
-
-           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
-           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
-               [Do we really want to follow the standard? Yes we do!])
-
-           SHLIB_CFLAGS="-KPIC"
-           SHLIB_SUFFIX=".so"
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_LD='${CC} -shared'
-               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ], [
-               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
-               CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ])
-           ;;
-       SunOS-5*)
-           # Note: If _REENTRANT isn't defined, then Solaris
-           # won't define thread-safe library routines.
-
-           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
-           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
-               [Do we really want to follow the standard? Yes we do!])
-
-           SHLIB_CFLAGS="-KPIC"
-
-           # Check to enable 64-bit flags for compiler/linker
-           AS_IF([test "$do64bit" = yes], [
-               arch=`isainfo`
-               AS_IF([test "$arch" = "sparcv9 sparc"], [
-                   AS_IF([test "$GCC" = yes], [
-                       AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [
-                           AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system])
-                       ], [
-                           do64bit_ok=yes
-                           CFLAGS="$CFLAGS -m64 -mcpu=v9"
-                           LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
-                           SHLIB_CFLAGS="-fPIC"
-                       ])
-                   ], [
-                       do64bit_ok=yes
-                       AS_IF([test "$do64bitVIS" = yes], [
-                           CFLAGS="$CFLAGS -xarch=v9a"
-                           LDFLAGS_ARCH="-xarch=v9a"
-                       ], [
-                           CFLAGS="$CFLAGS -xarch=v9"
-                           LDFLAGS_ARCH="-xarch=v9"
-                       ])
-                       # Solaris 64 uses this as well
-                       #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
-                   ])
-               ], [AS_IF([test "$arch" = "amd64 i386"], [
-                   AS_IF([test "$GCC" = yes], [
-                       case $system in
-                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
-                               do64bit_ok=yes
-                               CFLAGS="$CFLAGS -m64"
-                               LDFLAGS="$LDFLAGS -m64";;
-                           *)
-                               AC_MSG_WARN([64bit mode not supported with GCC on $system]);;
-                       esac
-                   ], [
-                       do64bit_ok=yes
-                       case $system in
-                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
-                               CFLAGS="$CFLAGS -m64"
-                               LDFLAGS="$LDFLAGS -m64";;
-                           *)
-                               CFLAGS="$CFLAGS -xarch=amd64"
-                               LDFLAGS="$LDFLAGS -xarch=amd64";;
-                       esac
-                   ])
-               ], [AC_MSG_WARN([64bit mode not supported for $arch])])])
-           ])
-
-           SHLIB_SUFFIX=".so"
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_LD='${CC} -shared'
-               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               AS_IF([test "$do64bit_ok" = yes], [
-                   AS_IF([test "$arch" = "sparcv9 sparc"], [
-                       # We need to specify -static-libgcc or we need to
-                       # add the path to the sparv9 libgcc.
-                       # JH: static-libgcc is necessary for core Tcl, but may
-                       # not be necessary for extensions.
-                       SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
-                       # for finding sparcv9 libgcc, get the regular libgcc
-                       # path, remove so name and append 'sparcv9'
-                       #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
-                       #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
-                   ], [AS_IF([test "$arch" = "amd64 i386"], [
-                       # JH: static-libgcc is necessary for core Tcl, but may
-                       # not be necessary for extensions.
-                       SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
-                   ])])
-               ])
-           ], [
-               case $system in
-                   SunOS-5.[[1-9]][[0-9]]*)
-                       # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-                       SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';;
-                   *)
-                       SHLIB_LD='/usr/ccs/bin/ld -G -z text';;
-               esac
-               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
-           ])
-           ;;
-       UNIX_SV* | UnixWare-5*)
-           SHLIB_CFLAGS="-KPIC"
-           SHLIB_LD='${CC} -G'
-           SHLIB_LD_LIBS=""
-           SHLIB_SUFFIX=".so"
-           # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
-           # that don't grok the -Bexport option.  Test that it does.
-           AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [
-               hold_ldflags=$LDFLAGS
-               LDFLAGS="$LDFLAGS -Wl,-Bexport"
-               AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no)
-               LDFLAGS=$hold_ldflags])
-           AS_IF([test $tcl_cv_ld_Bexport = yes], [
-               LDFLAGS="$LDFLAGS -Wl,-Bexport"
-           ])
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-    esac
-
-    AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [
-       AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform])
-    ])
-
-dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so
-dnl # until the end of configure, as configure's compile and link tests use
-dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's
-dnl # preprocessing tests use only CPPFLAGS.
-    AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""])
-
-    # Add in the arch flags late to ensure it wasn't removed.
-    # Not necessary in TEA, but this is aligned with core
-    LDFLAGS="$LDFLAGS $LDFLAGS_ARCH"
-
-    # If we're running gcc, then change the C flags for compiling shared
-    # libraries to the right flags for gcc, instead of those for the
-    # standard manufacturer compiler.
-
-    AS_IF([test "$GCC" = yes], [
-       case $system in
-           AIX-*) ;;
-           BSD/OS*) ;;
-           CYGWIN_*|MINGW32_*) ;;
-           IRIX*) ;;
-           NetBSD-*|FreeBSD-*|OpenBSD-*) ;;
-           Darwin-*) ;;
-           SCO_SV-3.2*) ;;
-           windows) ;;
-           *) SHLIB_CFLAGS="-fPIC" ;;
-       esac])
-
-    AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
-       AC_DEFINE(MODULE_SCOPE, [extern],
-           [No Compiler support for module scope symbols])
-    ])
-
-    AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [
-    # TEA specific: use PACKAGE_VERSION instead of VERSION
-    SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}'])
-    AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [
-    # TEA specific: use PACKAGE_VERSION instead of VERSION
-    UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'])
-
-    if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then
-       AC_CACHE_CHECK(for SEH support in compiler,
-           tcl_cv_seh,
-       AC_TRY_RUN([
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-
-           int main(int argc, char** argv) {
-               int a, b = 0;
-               __try {
-                   a = 666 / b;
-               }
-               __except (EXCEPTION_EXECUTE_HANDLER) {
-                   return 0;
-               }
-               return 1;
-           }
-       ],
-           tcl_cv_seh=yes,
-           tcl_cv_seh=no,
-           tcl_cv_seh=no)
-       )
-       if test "$tcl_cv_seh" = "no" ; then
-           AC_DEFINE(HAVE_NO_SEH, 1,
-                   [Defined when mingw does not support SEH])
-       fi
-
-       #
-       # Check to see if the excpt.h include file provided contains the
-       # definition for EXCEPTION_DISPOSITION; if not, which is the case
-       # with Cygwin's version as of 2002-04-10, define it to be int,
-       # sufficient for getting the current code to work.
-       #
-       AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files,
-           tcl_cv_eh_disposition,
-           AC_TRY_COMPILE([
-#          define WIN32_LEAN_AND_MEAN
-#          include <windows.h>
-#          undef WIN32_LEAN_AND_MEAN
-           ],[
-               EXCEPTION_DISPOSITION x;
-           ],
-               tcl_cv_eh_disposition=yes,
-               tcl_cv_eh_disposition=no)
-       )
-       if test "$tcl_cv_eh_disposition" = "no" ; then
-       AC_DEFINE(EXCEPTION_DISPOSITION, int,
-               [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION])
-       fi
-
-       # Check to see if winnt.h defines CHAR, SHORT, and LONG
-       # even if VOID has already been #defined. The win32api
-       # used by mingw and cygwin is known to do this.
-
-       AC_CACHE_CHECK(for winnt.h that ignores VOID define,
-           tcl_cv_winnt_ignore_void,
-           AC_TRY_COMPILE([
-#define VOID void
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-           ], [
-               CHAR c;
-               SHORT s;
-               LONG l;
-           ],
-        tcl_cv_winnt_ignore_void=yes,
-        tcl_cv_winnt_ignore_void=no)
-       )
-       if test "$tcl_cv_winnt_ignore_void" = "yes" ; then
-           AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1,
-                   [Defined when cygwin/mingw ignores VOID define in winnt.h])
-       fi
-    fi
-
-       # See if the compiler supports casting to a union type.
-       # This is used to stop gcc from printing a compiler
-       # warning when initializing a union member.
-
-       AC_CACHE_CHECK(for cast to union support,
-           tcl_cv_cast_to_union,
-           AC_TRY_COMPILE([],
-           [
-                 union foo { int i; double d; };
-                 union foo f = (union foo) (int) 0;
-           ],
-           tcl_cv_cast_to_union=yes,
-           tcl_cv_cast_to_union=no)
-       )
-       if test "$tcl_cv_cast_to_union" = "yes"; then
-           AC_DEFINE(HAVE_CAST_TO_UNION, 1,
-                   [Defined when compiler supports casting to union type.])
-       fi
-
-    AC_SUBST(CFLAGS_DEBUG)
-    AC_SUBST(CFLAGS_OPTIMIZE)
-    AC_SUBST(CFLAGS_WARNING)
-
-    AC_SUBST(STLIB_LD)
-    AC_SUBST(SHLIB_LD)
-
-    AC_SUBST(SHLIB_LD_LIBS)
-    AC_SUBST(SHLIB_CFLAGS)
-
-    AC_SUBST(LD_LIBRARY_PATH_VAR)
-
-    # These must be called after we do the basic CFLAGS checks and
-    # verify any possible 64-bit or similar switches are necessary
-    TEA_TCL_EARLY_FLAGS
-    TEA_TCL_64BIT_FLAGS
-])
-
-#--------------------------------------------------------------------
-# TEA_SERIAL_PORT
-#
-#      Determine which interface to use to talk to the serial port.
-#      Note that #include lines must begin in leftmost column for
-#      some compilers to recognize them as preprocessor directives,
-#      and some build environments have stdin not pointing at a
-#      pseudo-terminal (usually /dev/null instead.)
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines only one of the following vars:
-#              HAVE_SYS_MODEM_H
-#              USE_TERMIOS
-#              USE_TERMIO
-#              USE_SGTTY
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_SERIAL_PORT], [
-    AC_CHECK_HEADERS(sys/modem.h)
-    AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [
-    AC_TRY_RUN([
-#include <termios.h>
-
-int main() {
-    struct termios t;
-    if (tcgetattr(0, &t) == 0) {
-       cfsetospeed(&t, 0);
-       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    if test $tcl_cv_api_serial = no ; then
-       AC_TRY_RUN([
-#include <termio.h>
-
-int main() {
-    struct termio t;
-    if (ioctl(0, TCGETA, &t) == 0) {
-       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no ; then
-       AC_TRY_RUN([
-#include <sgtty.h>
-
-int main() {
-    struct sgttyb t;
-    if (ioctl(0, TIOCGETP, &t) == 0) {
-       t.sg_ospeed = 0;
-       t.sg_flags |= ODDP | EVENP | RAW;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no ; then
-       AC_TRY_RUN([
-#include <termios.h>
-#include <errno.h>
-
-int main() {
-    struct termios t;
-    if (tcgetattr(0, &t) == 0
-       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
-       cfsetospeed(&t, 0);
-       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no; then
-       AC_TRY_RUN([
-#include <termio.h>
-#include <errno.h>
-
-int main() {
-    struct termio t;
-    if (ioctl(0, TCGETA, &t) == 0
-       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
-       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-    }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no; then
-       AC_TRY_RUN([
-#include <sgtty.h>
-#include <errno.h>
-
-int main() {
-    struct sgttyb t;
-    if (ioctl(0, TIOCGETP, &t) == 0
-       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
-       t.sg_ospeed = 0;
-       t.sg_flags |= ODDP | EVENP | RAW;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none)
-    fi])
-    case $tcl_cv_api_serial in
-       termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);;
-       termio)  AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);;
-       sgtty)   AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);;
-    esac
-])
-
-#--------------------------------------------------------------------
-# TEA_MISSING_POSIX_HEADERS
-#
-#      Supply substitutes for missing POSIX header files.  Special
-#      notes:
-#          - stdlib.h doesn't define strtol, strtoul, or
-#            strtod in some versions of SunOS
-#          - some versions of string.h don't declare procedures such
-#            as strstr
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines some of the following vars:
-#              NO_DIRENT_H
-#              NO_ERRNO_H
-#              NO_VALUES_H
-#              HAVE_LIMITS_H or NO_LIMITS_H
-#              NO_STDLIB_H
-#              NO_STRING_H
-#              NO_SYS_WAIT_H
-#              NO_DLFCN_H
-#              HAVE_SYS_PARAM_H
-#
-#              HAVE_STRING_H ?
-#
-# tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and
-# CHECK on limits.h
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [
-    AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [
-    AC_TRY_LINK([#include <sys/types.h>
-#include <dirent.h>], [
-#ifndef _POSIX_SOURCE
-#   ifdef __Lynx__
-       /*
-        * Generate compilation error to make the test fail:  Lynx headers
-        * are only valid if really in the POSIX environment.
-        */
-
-       missing_procedure();
-#   endif
-#endif
-DIR *d;
-struct dirent *entryPtr;
-char *p;
-d = opendir("foobar");
-entryPtr = readdir(d);
-p = entryPtr->d_name;
-closedir(d);
-], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)])
-
-    if test $tcl_cv_dirent_h = no; then
-       AC_DEFINE(NO_DIRENT_H, 1, [Do we have <dirent.h>?])
-    fi
-
-    # TEA specific:
-    AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have <errno.h>?])])
-    AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have <float.h>?])])
-    AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have <values.h>?])])
-    AC_CHECK_HEADER(limits.h,
-       [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have <limits.h>?])],
-       [AC_DEFINE(NO_LIMITS_H, 1, [Do we have <limits.h>?])])
-    AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
-    AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
-    AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
-    AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
-    if test $tcl_ok = 0; then
-       AC_DEFINE(NO_STDLIB_H, 1, [Do we have <stdlib.h>?])
-    fi
-    AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
-    AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
-    AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
-
-    # See also memmove check below for a place where NO_STRING_H can be
-    # set and why.
-
-    if test $tcl_ok = 0; then
-       AC_DEFINE(NO_STRING_H, 1, [Do we have <string.h>?])
-    fi
-
-    AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have <sys/wait.h>?])])
-    AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have <dlfcn.h>?])])
-
-    # OS/390 lacks sys/param.h (and doesn't need it, by chance).
-    AC_HAVE_HEADERS(sys/param.h)
-])
-
-#--------------------------------------------------------------------
-# TEA_PATH_X
-#
-#      Locate the X11 header files and the X11 library archive.  Try
-#      the ac_path_x macro first, but if it doesn't find the X stuff
-#      (e.g. because there's no xmkmf program) then check through
-#      a list of possible directories.  Under some conditions the
-#      autoconf macro will return an include directory that contains
-#      no include files, so double-check its result just to be safe.
-#
-#      This should be called after TEA_CONFIG_CFLAGS as setting the
-#      LIBS line can confuse some configure macro magic.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Sets the following vars:
-#              XINCLUDES
-#              XLIBSW
-#              PKG_LIBS (appends to)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_X], [
-    if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then
-       TEA_PATH_UNIX_X
-    fi
-])
-
-AC_DEFUN([TEA_PATH_UNIX_X], [
-    AC_PATH_X
-    not_really_there=""
-    if test "$no_x" = ""; then
-       if test "$x_includes" = ""; then
-           AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes")
-       else
-           if test ! -r $x_includes/X11/Xlib.h; then
-               not_really_there="yes"
-           fi
-       fi
-    fi
-    if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
-       AC_MSG_CHECKING([for X11 header files])
-       found_xincludes="no"
-       AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no")
-       if test "$found_xincludes" = "no"; then
-           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"
-           for i in $dirs ; do
-               if test -r $i/X11/Xlib.h; then
-                   AC_MSG_RESULT([$i])
-                   XINCLUDES=" -I$i"
-                   found_xincludes="yes"
-                   break
-               fi
-           done
-       fi
-    else
-       if test "$x_includes" != ""; then
-           XINCLUDES="-I$x_includes"
-           found_xincludes="yes"
-       fi
-    fi
-    if test "$found_xincludes" = "no"; then
-       AC_MSG_RESULT([couldn't find any!])
-    fi
-
-    if test "$no_x" = yes; then
-       AC_MSG_CHECKING([for X11 libraries])
-       XLIBSW=nope
-       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"
-       for i in $dirs ; do
-           if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then
-               AC_MSG_RESULT([$i])
-               XLIBSW="-L$i -lX11"
-               x_libraries="$i"
-               break
-           fi
-       done
-    else
-       if test "$x_libraries" = ""; then
-           XLIBSW=-lX11
-       else
-           XLIBSW="-L$x_libraries -lX11"
-       fi
-    fi
-    if test "$XLIBSW" = nope ; then
-       AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
-    fi
-    if test "$XLIBSW" = nope ; then
-       AC_MSG_RESULT([could not find any!  Using -lX11.])
-       XLIBSW=-lX11
-    fi
-    # TEA specific:
-    if test x"${XLIBSW}" != x ; then
-       PKG_LIBS="${PKG_LIBS} ${XLIBSW}"
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_BLOCKING_STYLE
-#
-#      The statements below check for systems where POSIX-style
-#      non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
-#      On these systems (mostly older ones), use the old BSD-style
-#      FIONBIO approach instead.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines some of the following vars:
-#              HAVE_SYS_IOCTL_H
-#              HAVE_SYS_FILIO_H
-#              USE_FIONBIO
-#              O_NONBLOCK
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_BLOCKING_STYLE], [
-    AC_CHECK_HEADERS(sys/ioctl.h)
-    AC_CHECK_HEADERS(sys/filio.h)
-    TEA_CONFIG_SYSTEM
-    AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
-    case $system in
-       OSF*)
-           AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?])
-           AC_MSG_RESULT([FIONBIO])
-           ;;
-       *)
-           AC_MSG_RESULT([O_NONBLOCK])
-           ;;
-    esac
-])
-
-#--------------------------------------------------------------------
-# TEA_TIME_HANDLER
-#
-#      Checks how the system deals with time.h, what time structures
-#      are used on the system, and what fields the structures have.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines some of the following vars:
-#              USE_DELTA_FOR_TZ
-#              HAVE_TM_GMTOFF
-#              HAVE_TM_TZADJ
-#              HAVE_TIMEZONE_VAR
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TIME_HANDLER], [
-    AC_CHECK_HEADERS(sys/time.h)
-    AC_HEADER_TIME
-    AC_STRUCT_TIMEZONE
-
-    AC_CHECK_FUNCS(gmtime_r localtime_r)
-
-    AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [
-       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
-           tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)])
-    if test $tcl_cv_member_tm_tzadj = yes ; then
-       AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?])
-    fi
-
-    AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [
-       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
-           tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)])
-    if test $tcl_cv_member_tm_gmtoff = yes ; then
-       AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?])
-    fi
-
-    #
-    # Its important to include time.h in this check, as some systems
-    # (like convex) have timezone functions, etc.
-    #
-    AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [
-       AC_TRY_COMPILE([#include <time.h>],
-           [extern long timezone;
-           timezone += 1;
-           exit (0);],
-           tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)])
-    if test $tcl_cv_timezone_long = yes ; then
-       AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
-    else
-       #
-       # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
-       #
-       AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [
-           AC_TRY_COMPILE([#include <time.h>],
-               [extern time_t timezone;
-               timezone += 1;
-               exit (0);],
-               tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)])
-       if test $tcl_cv_timezone_time = yes ; then
-           AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
-       fi
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_BUGGY_STRTOD
-#
-#      Under Solaris 2.4, strtod returns the wrong value for the
-#      terminating character under some conditions.  Check for this
-#      and if the problem exists use a substitute procedure
-#      "fixstrtod" (provided by Tcl) that corrects the error.
-#      Also, on Compaq's Tru64 Unix 5.0,
-#      strtod(" ") returns 0.0 instead of a failure to convert.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Might defines some of the following vars:
-#              strtod (=fixstrtod)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_BUGGY_STRTOD], [
-    AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0)
-    if test "$tcl_strtod" = 1; then
-       AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[
-           AC_TRY_RUN([
-               extern double strtod();
-               int main() {
-                   char *infString="Inf", *nanString="NaN", *spaceString=" ";
-                   char *term;
-                   double value;
-                   value = strtod(infString, &term);
-                   if ((term != infString) && (term[-1] == 0)) {
-                       exit(1);
-                   }
-                   value = strtod(nanString, &term);
-                   if ((term != nanString) && (term[-1] == 0)) {
-                       exit(1);
-                   }
-                   value = strtod(spaceString, &term);
-                   if (term == (spaceString+1)) {
-                       exit(1);
-                   }
-                   exit(0);
-               }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy,
-                   tcl_cv_strtod_buggy=buggy)])
-       if test "$tcl_cv_strtod_buggy" = buggy; then
-           AC_LIBOBJ([fixstrtod])
-           USE_COMPAT=1
-           AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?])
-       fi
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_LINK_LIBS
-#
-#      Search for the libraries needed to link the Tcl shell.
-#      Things like the math library (-lm) and socket stuff (-lsocket vs.
-#      -lnsl) are dealt with here.
-#
-# Arguments:
-#      Requires the following vars to be set in the Makefile:
-#              DL_LIBS (not in TEA, only needed in core)
-#              LIBS
-#              MATH_LIBS
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TCL_LIBS
-#              MATH_LIBS
-#
-#      Might append to the following vars:
-#              LIBS
-#
-#      Might define the following vars:
-#              HAVE_NET_ERRNO_H
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TCL_LINK_LIBS], [
-    #--------------------------------------------------------------------
-    # On a few very rare systems, all of the libm.a stuff is
-    # already in libc.a.  Set compiler flags accordingly.
-    # Also, Linux requires the "ieee" library for math to work
-    # right (and it must appear before "-lm").
-    #--------------------------------------------------------------------
-
-    AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
-    AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
-
-    #--------------------------------------------------------------------
-    # Interactive UNIX requires -linet instead of -lsocket, plus it
-    # needs net/errno.h to define the socket-related error codes.
-    #--------------------------------------------------------------------
-
-    AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
-    AC_CHECK_HEADER(net/errno.h, [
-       AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have <net/errno.h>?])])
-
-    #--------------------------------------------------------------------
-    #  Check for the existence of the -lsocket and -lnsl libraries.
-    #  The order here is important, so that they end up in the right
-    #  order in the command line generated by make.  Here are some
-    #  special considerations:
-    #  1. Use "connect" and "accept" to check for -lsocket, and
-    #     "gethostbyname" to check for -lnsl.
-    #  2. Use each function name only once:  can't redo a check because
-    #     autoconf caches the results of the last check and won't redo it.
-    #  3. Use -lnsl and -lsocket only if they supply procedures that
-    #     aren't already present in the normal libraries.  This is because
-    #     IRIX 5.2 has libraries, but they aren't needed and they're
-    #     bogus:  they goof up name resolution if used.
-    #  4. On some SVR4 systems, can't use -lsocket without -lnsl too.
-    #     To get around this problem, check for both libraries together
-    #     if -lsocket doesn't work by itself.
-    #--------------------------------------------------------------------
-
-    tcl_checkBoth=0
-    AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
-    if test "$tcl_checkSocket" = 1; then
-       AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt,
-           LIBS="$LIBS -lsocket", tcl_checkBoth=1)])
-    fi
-    if test "$tcl_checkBoth" = 1; then
-       tk_oldLibs=$LIBS
-       LIBS="$LIBS -lsocket -lnsl"
-       AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs])
-    fi
-    AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname,
-           [LIBS="$LIBS -lnsl"])])
-
-    # TEA specific: Don't perform the eval of the libraries here because
-    # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS
-
-    TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
-    AC_SUBST(TCL_LIBS)
-    AC_SUBST(MATH_LIBS)
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_EARLY_FLAGS
-#
-#      Check for what flags are needed to be passed so the correct OS
-#      features are available.
-#
-# Arguments:
-#      None
-#
-# Results:
-#
-#      Might define the following vars:
-#              _ISOC99_SOURCE
-#              _LARGEFILE64_SOURCE
-#              _LARGEFILE_SOURCE64
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TCL_EARLY_FLAG],[
-    AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]),
-       AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no,
-           AC_TRY_COMPILE([[#define ]$1[ 1
-]$2], $3,
-               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes,
-               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no)))
-    if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then
-       AC_DEFINE($1, 1, [Add the ]$1[ flag when building])
-       tcl_flags="$tcl_flags $1"
-    fi
-])
-
-AC_DEFUN([TEA_TCL_EARLY_FLAGS],[
-    AC_MSG_CHECKING([for required early compiler flags])
-    tcl_flags=""
-    TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include <stdlib.h>],
-       [char *p = (char *)strtoll; char *q = (char *)strtoull;])
-    TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include <sys/stat.h>],
-       [struct stat64 buf; int i = stat64("/", &buf);])
-    TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include <sys/stat.h>],
-       [char *p = (char *)open64;])
-    if test "x${tcl_flags}" = "x" ; then
-       AC_MSG_RESULT([none])
-    else
-       AC_MSG_RESULT([${tcl_flags}])
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_64BIT_FLAGS
-#
-#      Check for what is defined in the way of 64-bit features.
-#
-# Arguments:
-#      None
-#
-# Results:
-#
-#      Might define the following vars:
-#              TCL_WIDE_INT_IS_LONG
-#              TCL_WIDE_INT_TYPE
-#              HAVE_STRUCT_DIRENT64
-#              HAVE_STRUCT_STAT64
-#              HAVE_TYPE_OFF64_T
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TCL_64BIT_FLAGS], [
-    AC_MSG_CHECKING([for 64-bit integer type])
-    AC_CACHE_VAL(tcl_cv_type_64bit,[
-       tcl_cv_type_64bit=none
-       # See if the compiler knows natively about __int64
-       AC_TRY_COMPILE(,[__int64 value = (__int64) 0;],
-           tcl_type_64bit=__int64, tcl_type_64bit="long long")
-       # See if we should use long anyway  Note that we substitute in the
-       # type that is our current guess for a 64-bit type inside this check
-       # program, so it should be modified only carefully...
-        AC_TRY_COMPILE(,[switch (0) {
-            case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ;
-        }],tcl_cv_type_64bit=${tcl_type_64bit})])
-    if test "${tcl_cv_type_64bit}" = none ; then
-       AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?])
-       AC_MSG_RESULT([using long])
-    elif test "${tcl_cv_type_64bit}" = "__int64" \
-               -a "${TEA_PLATFORM}" = "windows" ; then
-       # TEA specific: We actually want to use the default tcl.h checks in
-       # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER*
-       AC_MSG_RESULT([using Tcl header defaults])
-    else
-       AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit},
-           [What type should be used to define wide integers?])
-       AC_MSG_RESULT([${tcl_cv_type_64bit}])
-
-       # Now check for auxiliary declarations
-       AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[
-           AC_TRY_COMPILE([#include <sys/types.h>
-#include <dirent.h>],[struct dirent64 p;],
-               tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)])
-       if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
-           AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?])
-       fi
-
-       AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[
-           AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p;
-],
-               tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)])
-       if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
-           AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in <sys/stat.h>?])
-       fi
-
-       AC_CHECK_FUNCS(open64 lseek64)
-       AC_MSG_CHECKING([for off64_t])
-       AC_CACHE_VAL(tcl_cv_type_off64_t,[
-           AC_TRY_COMPILE([#include <sys/types.h>],[off64_t offset;
-],
-               tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)])
-       dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the
-       dnl functions lseek64 and open64 are defined.
-       if test "x${tcl_cv_type_off64_t}" = "xyes" && \
-               test "x${ac_cv_func_lseek64}" = "xyes" && \
-               test "x${ac_cv_func_open64}" = "xyes" ; then
-           AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in <sys/types.h>?])
-           AC_MSG_RESULT([yes])
-       else
-           AC_MSG_RESULT([no])
-       fi
-    fi
-])
-
-##
-## Here ends the standard Tcl configuration bits and starts the
-## TEA specific functions
-##
-
-#------------------------------------------------------------------------
-# TEA_INIT --
-#
-#      Init various Tcl Extension Architecture (TEA) variables.
-#      This should be the first called TEA_* macro.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              CYGPATH
-#              EXEEXT
-#      Defines only:
-#              TEA_VERSION
-#              TEA_INITED
-#              TEA_PLATFORM (windows or unix)
-#
-# "cygpath" is used on windows to generate native path names for include
-# files. These variables should only be used with the compiler and linker
-# since they generate native path names.
-#
-# EXEEXT
-#      Select the executable extension based on the host type.  This
-#      is a lightweight replacement for AC_EXEEXT that doesn't require
-#      a compiler.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_INIT], [
-    # TEA extensions pass this us the version of TEA they think they
-    # are compatible with.
-    TEA_VERSION="3.10"
-
-    AC_MSG_CHECKING([for correct TEA configuration])
-    if test x"${PACKAGE_NAME}" = x ; then
-       AC_MSG_ERROR([
-The PACKAGE_NAME variable must be defined by your TEA configure.ac])
-    fi
-    if test x"$1" = x ; then
-       AC_MSG_ERROR([
-TEA version not specified.])
-    elif test "$1" != "${TEA_VERSION}" ; then
-       AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"])
-    else
-       AC_MSG_RESULT([ok (TEA ${TEA_VERSION})])
-    fi
-
-    # If the user did not set CFLAGS, set it now to keep macros
-    # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2".
-    if test "${CFLAGS+set}" != "set" ; then
-       CFLAGS=""
-    fi
-
-    case "`uname -s`" in
-       *win32*|*WIN32*|*MINGW32_*)
-           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)
-           EXEEXT=".exe"
-           TEA_PLATFORM="windows"
-           ;;
-       *CYGWIN_*)
-           EXEEXT=".exe"
-           # CYGPATH and TEA_PLATFORM are determined later in LOAD_TCLCONFIG
-           ;;
-       *)
-           CYGPATH=echo
-           # Maybe we are cross-compiling....
-           case ${host_alias} in
-               *mingw32*)
-               EXEEXT=".exe"
-               TEA_PLATFORM="windows"
-               ;;
-           *)
-               EXEEXT=""
-               TEA_PLATFORM="unix"
-               ;;
-           esac
-           ;;
-    esac
-
-    # Check if exec_prefix is set. If not use fall back to prefix.
-    # Note when adjusted, so that TEA_PREFIX can correct for this.
-    # This is needed for recursive configures, since autoconf propagates
-    # $prefix, but not $exec_prefix (doh!).
-    if test x$exec_prefix = xNONE ; then
-       exec_prefix_default=yes
-       exec_prefix=$prefix
-    fi
-
-    AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}])
-
-    AC_SUBST(EXEEXT)
-    AC_SUBST(CYGPATH)
-
-    # This package name must be replaced statically for AC_SUBST to work
-    AC_SUBST(PKG_LIB_FILE)
-    # Substitute STUB_LIB_FILE in case package creates a stub library too.
-    AC_SUBST(PKG_STUB_LIB_FILE)
-
-    # We AC_SUBST these here to ensure they are subst'ed,
-    # in case the user doesn't call TEA_ADD_...
-    AC_SUBST(PKG_STUB_SOURCES)
-    AC_SUBST(PKG_STUB_OBJECTS)
-    AC_SUBST(PKG_TCL_SOURCES)
-    AC_SUBST(PKG_HEADERS)
-    AC_SUBST(PKG_INCLUDES)
-    AC_SUBST(PKG_LIBS)
-    AC_SUBST(PKG_CFLAGS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_SOURCES --
-#
-#      Specify one or more source files.  Users should check for
-#      the right platform before adding to their list.
-#      It is not important to specify the directory, as long as it is
-#      in the generic, win or unix subdirectory of $(srcdir).
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_SOURCES
-#              PKG_OBJECTS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_SOURCES], [
-    vars="$@"
-    for i in $vars; do
-       case $i in
-           [\$]*)
-               # allow $-var names
-               PKG_SOURCES="$PKG_SOURCES $i"
-               PKG_OBJECTS="$PKG_OBJECTS $i"
-               ;;
-           *)
-               # check for existence - allows for generic/win/unix VPATH
-               # To add more dirs here (like 'src'), you have to update VPATH
-               # in Makefile.in as well
-               if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
-                   -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
-                   -a ! -f "${srcdir}/macosx/$i" \
-                   ; then
-                   AC_MSG_ERROR([could not find source file '$i'])
-               fi
-               PKG_SOURCES="$PKG_SOURCES $i"
-               # this assumes it is in a VPATH dir
-               i=`basename $i`
-               # handle user calling this before or after TEA_SETUP_COMPILER
-               if test x"${OBJEXT}" != x ; then
-                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
-               else
-                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
-               fi
-               PKG_OBJECTS="$PKG_OBJECTS $j"
-               ;;
-       esac
-    done
-    AC_SUBST(PKG_SOURCES)
-    AC_SUBST(PKG_OBJECTS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_STUB_SOURCES --
-#
-#      Specify one or more source files.  Users should check for
-#      the right platform before adding to their list.
-#      It is not important to specify the directory, as long as it is
-#      in the generic, win or unix subdirectory of $(srcdir).
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_STUB_SOURCES
-#              PKG_STUB_OBJECTS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_STUB_SOURCES], [
-    vars="$@"
-    for i in $vars; do
-       # check for existence - allows for generic/win/unix VPATH
-       if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
-           -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
-           -a ! -f "${srcdir}/macosx/$i" \
-           ; then
-           AC_MSG_ERROR([could not find stub source file '$i'])
-       fi
-       PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i"
-       # this assumes it is in a VPATH dir
-       i=`basename $i`
-       # handle user calling this before or after TEA_SETUP_COMPILER
-       if test x"${OBJEXT}" != x ; then
-           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
-       else
-           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
-       fi
-       PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j"
-    done
-    AC_SUBST(PKG_STUB_SOURCES)
-    AC_SUBST(PKG_STUB_OBJECTS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_TCL_SOURCES --
-#
-#      Specify one or more Tcl source files.  These should be platform
-#      independent runtime files.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_TCL_SOURCES
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_TCL_SOURCES], [
-    vars="$@"
-    for i in $vars; do
-       # check for existence, be strict because it is installed
-       if test ! -f "${srcdir}/$i" ; then
-           AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i'])
-       fi
-       PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i"
-    done
-    AC_SUBST(PKG_TCL_SOURCES)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_HEADERS --
-#
-#      Specify one or more source headers.  Users should check for
-#      the right platform before adding to their list.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_HEADERS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_HEADERS], [
-    vars="$@"
-    for i in $vars; do
-       # check for existence, be strict because it is installed
-       if test ! -f "${srcdir}/$i" ; then
-           AC_MSG_ERROR([could not find header file '${srcdir}/$i'])
-       fi
-       PKG_HEADERS="$PKG_HEADERS $i"
-    done
-    AC_SUBST(PKG_HEADERS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_INCLUDES --
-#
-#      Specify one or more include dirs.  Users should check for
-#      the right platform before adding to their list.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_INCLUDES
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_INCLUDES], [
-    vars="$@"
-    for i in $vars; do
-       PKG_INCLUDES="$PKG_INCLUDES $i"
-    done
-    AC_SUBST(PKG_INCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_LIBS --
-#
-#      Specify one or more libraries.  Users should check for
-#      the right platform before adding to their list.  For Windows,
-#      libraries provided in "foo.lib" format will be converted to
-#      "-lfoo" when using GCC (mingw).
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_LIBS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_LIBS], [
-    vars="$@"
-    for i in $vars; do
-       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
-           # Convert foo.lib to -lfoo for GCC.  No-op if not *.lib
-           i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'`
-       fi
-       PKG_LIBS="$PKG_LIBS $i"
-    done
-    AC_SUBST(PKG_LIBS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_CFLAGS --
-#
-#      Specify one or more CFLAGS.  Users should check for
-#      the right platform before adding to their list.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_CFLAGS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_CFLAGS], [
-    PKG_CFLAGS="$PKG_CFLAGS $@"
-    AC_SUBST(PKG_CFLAGS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_CLEANFILES --
-#
-#      Specify one or more CLEANFILES.
-#
-# Arguments:
-#      one or more file names to clean target
-#
-# Results:
-#
-#      Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_CLEANFILES], [
-    CLEANFILES="$CLEANFILES $@"
-])
-
-#------------------------------------------------------------------------
-# TEA_PREFIX --
-#
-#      Handle the --prefix=... option by defaulting to what Tcl gave
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      If --prefix or --exec-prefix was not specified, $prefix and
-#      $exec_prefix will be set to the values given to Tcl when it was
-#      configured.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_PREFIX], [
-    if test "${prefix}" = "NONE"; then
-       prefix_default=yes
-       if test x"${TCL_PREFIX}" != x; then
-           AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}])
-           prefix=${TCL_PREFIX}
-       else
-           AC_MSG_NOTICE([--prefix defaulting to /usr/local])
-           prefix=/usr/local
-       fi
-    fi
-    if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \
-       -o x"${exec_prefix_default}" = x"yes" ; then
-       if test x"${TCL_EXEC_PREFIX}" != x; then
-           AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}])
-           exec_prefix=${TCL_EXEC_PREFIX}
-       else
-           AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}])
-           exec_prefix=$prefix
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_SETUP_COMPILER_CC --
-#
-#      Do compiler checks the way we want.  This is just a replacement
-#      for AC_PROG_CC in TEA configure.ac files to make them cleaner.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Sets up CC var and other standard bits we need to make executables.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_SETUP_COMPILER_CC], [
-    # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE)
-    # in this macro, they need to go into TEA_SETUP_COMPILER instead.
-
-    AC_PROG_CC
-    AC_PROG_CPP
-
-    INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c'
-    INSTALL_DATA_DIR='${INSTALL} -d -m 755'
-    INSTALL_DATA='${INSTALL} -m 644'
-    INSTALL_PROGRAM='${INSTALL}'
-    INSTALL_SCRIPT='${INSTALL}'
-    INSTALL_LIBRARY='${INSTALL_DATA}'
-
-    AC_SUBST(INSTALL)
-    AC_SUBST(INSTALL_DATA_DIR)
-    AC_SUBST(INSTALL_DATA)
-    AC_SUBST(INSTALL_PROGRAM)
-    AC_SUBST(INSTALL_SCRIPT)
-    AC_SUBST(INSTALL_LIBRARY)
-
-    #--------------------------------------------------------------------
-    # Checks to see if the make program sets the $MAKE variable.
-    #--------------------------------------------------------------------
-
-    AC_PROG_MAKE_SET
-
-    #--------------------------------------------------------------------
-    # Find ranlib
-    #--------------------------------------------------------------------
-
-    AC_CHECK_TOOL(RANLIB, ranlib)
-
-    #--------------------------------------------------------------------
-    # Determines the correct binary file extension (.o, .obj, .exe etc.)
-    #--------------------------------------------------------------------
-
-    AC_OBJEXT
-    AC_EXEEXT
-])
-
-#------------------------------------------------------------------------
-# TEA_SETUP_COMPILER --
-#
-#      Do compiler checks that use the compiler.  This must go after
-#      TEA_SETUP_COMPILER_CC, which does the actual compiler check.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Sets up CC var and other standard bits we need to make executables.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_SETUP_COMPILER], [
-    # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here.
-    AC_REQUIRE([TEA_SETUP_COMPILER_CC])
-
-    #------------------------------------------------------------------------
-    # If we're using GCC, see if the compiler understands -pipe. If so, use it.
-    # It makes compiling go faster.  (This is only a performance feature.)
-    #------------------------------------------------------------------------
-
-    if test -z "$no_pipe" -a -n "$GCC"; then
-       AC_CACHE_CHECK([if the compiler understands -pipe],
-           tcl_cv_cc_pipe, [
-           hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
-           AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no)
-           CFLAGS=$hold_cflags])
-       if test $tcl_cv_cc_pipe = yes; then
-           CFLAGS="$CFLAGS -pipe"
-       fi
-    fi
-
-    #--------------------------------------------------------------------
-    # Common compiler flag setup
-    #--------------------------------------------------------------------
-
-    AC_C_BIGENDIAN
-    if test "${TEA_PLATFORM}" = "unix" ; then
-       TEA_TCL_LINK_LIBS
-       TEA_MISSING_POSIX_HEADERS
-       # Let the user call this, because if it triggers, they will
-       # need a compat/strtod.c that is correct.  Users can also
-       # use Tcl_GetDouble(FromObj) instead.
-       #TEA_BUGGY_STRTOD
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_MAKE_LIB --
-#
-#      Generate a line that can be used to build a shared/unshared library
-#      in a platform independent manner.
-#
-# Arguments:
-#      none
-#
-#      Requires:
-#
-# Results:
-#
-#      Defines the following vars:
-#      CFLAGS -        Done late here to note disturb other AC macros
-#       MAKE_LIB -      Command to execute to build the Tcl library;
-#                       differs depending on whether or not Tcl is being
-#                       compiled as a shared library.
-#      MAKE_SHARED_LIB Makefile rule for building a shared library
-#      MAKE_STATIC_LIB Makefile rule for building a static library
-#      MAKE_STUB_LIB   Makefile rule for building a stub library
-#      VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL
-#      VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_MAKE_LIB], [
-    if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then
-       MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)"
-       MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)"
-       AC_EGREP_CPP([manifest needed], [
-#if defined(_MSC_VER) && _MSC_VER >= 1400
-print("manifest needed")
-#endif
-       ], [
-       # Could do a CHECK_PROG for mt, but should always be with MSVC8+
-       VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi"
-       VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi"
-       MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}"
-       TEA_ADD_CLEANFILES([*.manifest])
-       ])
-       MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)"
-    else
-       MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)"
-       MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}"
-       MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)"
-    fi
-
-    if test "${SHARED_BUILD}" = "1" ; then
-       MAKE_LIB="${MAKE_SHARED_LIB} "
-    else
-       MAKE_LIB="${MAKE_STATIC_LIB} "
-    fi
-
-    #--------------------------------------------------------------------
-    # Shared libraries and static libraries have different names.
-    # Use the double eval to make sure any variables in the suffix is
-    # substituted. (@@@ Might not be necessary anymore)
-    #--------------------------------------------------------------------
-
-    if test "${TEA_PLATFORM}" = "windows" ; then
-       if test "${SHARED_BUILD}" = "1" ; then
-           # We force the unresolved linking of symbols that are really in
-           # the private libraries of Tcl and Tk.
-           if test x"${TK_BIN_DIR}" != x ; then
-               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\""
-           fi
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\""
-           if test "$GCC" = "yes"; then
-               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc"
-           fi
-           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
-       else
-           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
-           if test "$GCC" = "yes"; then
-               PKG_LIB_FILE=lib${PKG_LIB_FILE}
-           fi
-       fi
-       # Some packages build their own stubs libraries
-       eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
-       if test "$GCC" = "yes"; then
-           PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE}
-       fi
-       # These aren't needed on Windows (either MSVC or gcc)
-       RANLIB=:
-       RANLIB_STUB=:
-    else
-       RANLIB_STUB="${RANLIB}"
-       if test "${SHARED_BUILD}" = "1" ; then
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}"
-           if test x"${TK_BIN_DIR}" != x ; then
-               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}"
-           fi
-           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
-           RANLIB=:
-       else
-           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
-       fi
-       # Some packages build their own stubs libraries
-       eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
-    fi
-
-    # These are escaped so that only CFLAGS is picked up at configure time.
-    # The other values will be substituted at make time.
-    CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}"
-    if test "${SHARED_BUILD}" = "1" ; then
-       CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}"
-    fi
-
-    AC_SUBST(MAKE_LIB)
-    AC_SUBST(MAKE_SHARED_LIB)
-    AC_SUBST(MAKE_STATIC_LIB)
-    AC_SUBST(MAKE_STUB_LIB)
-    AC_SUBST(RANLIB_STUB)
-    AC_SUBST(VC_MANIFEST_EMBED_DLL)
-    AC_SUBST(VC_MANIFEST_EMBED_EXE)
-])
-
-#------------------------------------------------------------------------
-# TEA_LIB_SPEC --
-#
-#      Compute the name of an existing object library located in libdir
-#      from the given base name and produce the appropriate linker flags.
-#
-# Arguments:
-#      basename        The base name of the library without version
-#                      numbers, extensions, or "lib" prefixes.
-#      extra_dir       Extra directory in which to search for the
-#                      library.  This location is used first, then
-#                      $prefix/$exec-prefix, then some defaults.
-#
-# Requires:
-#      TEA_INIT and TEA_PREFIX must be called first.
-#
-# Results:
-#
-#      Defines the following vars:
-#              ${basename}_LIB_NAME    The computed library name.
-#              ${basename}_LIB_SPEC    The computed linker flags.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LIB_SPEC], [
-    AC_MSG_CHECKING([for $1 library])
-
-    # Look in exec-prefix for the library (defined by TEA_PREFIX).
-
-    tea_lib_name_dir="${exec_prefix}/lib"
-
-    # Or in a user-specified location.
-
-    if test x"$2" != x ; then
-       tea_extra_lib_dir=$2
-    else
-       tea_extra_lib_dir=NONE
-    fi
-
-    for i in \
-           `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do
-       if test -f "$i" ; then
-           tea_lib_name_dir=`dirname $i`
-           $1_LIB_NAME=`basename $i`
-           $1_LIB_PATH_NAME=$i
-           break
-       fi
-    done
-
-    if test "${TEA_PLATFORM}" = "windows"; then
-       $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\"
-    else
-       # Strip off the leading "lib" and trailing ".a" or ".so"
-
-       tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'`
-       $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}"
-    fi
-
-    if test "x${$1_LIB_NAME}" = x ; then
-       AC_MSG_ERROR([not found])
-    else
-       AC_MSG_RESULT([${$1_LIB_SPEC}])
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PRIVATE_TCL_HEADERS --
-#
-#      Locate the private Tcl include files
-#
-# Arguments:
-#
-#      Requires:
-#              TCL_SRC_DIR     Assumes that TEA_LOAD_TCLCONFIG has
-#                              already been called.
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TCL_TOP_DIR_NATIVE
-#              TCL_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [
-    # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh}
-    AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS])
-    AC_MSG_CHECKING([for Tcl private include files])
-
-    TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}`
-    TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\"
-
-    # Check to see if tcl<Plat>Port.h isn't already with the public headers
-    # Don't look for tclInt.h because that resides with tcl.h in the core
-    # sources, but the <plat>Port headers are in a different directory
-    if test "${TEA_PLATFORM}" = "windows" -a \
-       -f "${ac_cv_c_tclh}/tclWinPort.h"; then
-       result="private headers found with public headers"
-    elif test "${TEA_PLATFORM}" = "unix" -a \
-       -f "${ac_cv_c_tclh}/tclUnixPort.h"; then
-       result="private headers found with public headers"
-    else
-       TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\"
-       if test "${TEA_PLATFORM}" = "windows"; then
-           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\"
-       else
-           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\"
-       fi
-       # Overwrite the previous TCL_INCLUDES as this should capture both
-       # public and private headers in the same set.
-       # We want to ensure these are substituted so as not to require
-       # any *_NATIVE vars be defined in the Makefile
-       TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}"
-       if test "`uname -s`" = "Darwin"; then
-            # If Tcl was built as a framework, attempt to use
-            # the framework's Headers and PrivateHeaders directories
-            case ${TCL_DEFS} in
-               *TCL_FRAMEWORK*)
-                   if test -d "${TCL_BIN_DIR}/Headers" -a \
-                           -d "${TCL_BIN_DIR}/PrivateHeaders"; then
-                       TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"
-                   else
-                       TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
-                   fi
-                   ;;
-           esac
-           result="Using ${TCL_INCLUDES}"
-       else
-           if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then
-               AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}])
-           fi
-           result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}"
-       fi
-    fi
-
-    AC_SUBST(TCL_TOP_DIR_NATIVE)
-
-    AC_SUBST(TCL_INCLUDES)
-    AC_MSG_RESULT([${result}])
-])
-
-#------------------------------------------------------------------------
-# TEA_PUBLIC_TCL_HEADERS --
-#
-#      Locate the installed public Tcl header files
-#
-# Arguments:
-#      None.
-#
-# Requires:
-#      CYGPATH must be set
-#
-# Results:
-#
-#      Adds a --with-tclinclude switch to configure.
-#      Result is cached.
-#
-#      Substitutes the following vars:
-#              TCL_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [
-    AC_MSG_CHECKING([for Tcl public headers])
-
-    AC_ARG_WITH(tclinclude, [  --with-tclinclude       directory containing the public Tcl header files], with_tclinclude=${withval})
-
-    AC_CACHE_VAL(ac_cv_c_tclh, [
-       # Use the value from --with-tclinclude, if it was given
-
-       if test x"${with_tclinclude}" != x ; then
-           if test -f "${with_tclinclude}/tcl.h" ; then
-               ac_cv_c_tclh=${with_tclinclude}
-           else
-               AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h])
-           fi
-       else
-           list=""
-           if test "`uname -s`" = "Darwin"; then
-               # If Tcl was built as a framework, attempt to use
-               # the framework's Headers directory
-               case ${TCL_DEFS} in
-                   *TCL_FRAMEWORK*)
-                       list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`"
-                       ;;
-               esac
-           fi
-
-           # Look in the source dir only if Tcl is not installed,
-           # and in that situation, look there before installed locations.
-           if test -f "${TCL_BIN_DIR}/Makefile" ; then
-               list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`"
-           fi
-
-           # Check order: pkg --prefix location, Tcl's --prefix location,
-           # relative to directory of tclConfig.sh.
-
-           eval "temp_includedir=${includedir}"
-           list="$list \
-               `ls -d ${temp_includedir}        2>/dev/null` \
-               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
-               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
-           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
-               list="$list /usr/local/include /usr/include"
-               if test x"${TCL_INCLUDE_SPEC}" != x ; then
-                   d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'`
-                   list="$list `ls -d ${d} 2>/dev/null`"
-               fi
-           fi
-           for i in $list ; do
-               if test -f "$i/tcl.h" ; then
-                   ac_cv_c_tclh=$i
-                   break
-               fi
-           done
-       fi
-    ])
-
-    # Print a message based on how we determined the include path
-
-    if test x"${ac_cv_c_tclh}" = x ; then
-       AC_MSG_ERROR([tcl.h not found.  Please specify its location with --with-tclinclude])
-    else
-       AC_MSG_RESULT([${ac_cv_c_tclh}])
-    fi
-
-    # Convert to a native path and substitute into the output files.
-
-    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
-
-    TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-
-    AC_SUBST(TCL_INCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_PRIVATE_TK_HEADERS --
-#
-#      Locate the private Tk include files
-#
-# Arguments:
-#
-#      Requires:
-#              TK_SRC_DIR      Assumes that TEA_LOAD_TKCONFIG has
-#                               already been called.
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TK_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [
-    # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh}
-    AC_REQUIRE([TEA_PUBLIC_TK_HEADERS])
-    AC_MSG_CHECKING([for Tk private include files])
-
-    TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}`
-    TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\"
-
-    # Check to see if tk<Plat>Port.h isn't already with the public headers
-    # Don't look for tkInt.h because that resides with tk.h in the core
-    # sources, but the <plat>Port headers are in a different directory
-    if test "${TEA_PLATFORM}" = "windows" -a \
-       -f "${ac_cv_c_tkh}/tkWinPort.h"; then
-       result="private headers found with public headers"
-    elif test "${TEA_PLATFORM}" = "unix" -a \
-       -f "${ac_cv_c_tkh}/tkUnixPort.h"; then
-       result="private headers found with public headers"
-    else
-       TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\"
-       TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\"
-       if test "${TEA_PLATFORM}" = "windows"; then
-           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\"
-       else
-           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\"
-       fi
-       # Overwrite the previous TK_INCLUDES as this should capture both
-       # public and private headers in the same set.
-       # We want to ensure these are substituted so as not to require
-       # any *_NATIVE vars be defined in the Makefile
-       TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}"
-       # Detect and add ttk subdir
-       if test -d "${TK_SRC_DIR}/generic/ttk"; then
-          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\""
-       fi
-       if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
-          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\""
-       fi
-       if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then
-          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\""
-       fi
-       if test "`uname -s`" = "Darwin"; then
-           # If Tk was built as a framework, attempt to use
-           # the framework's Headers and PrivateHeaders directories
-           case ${TK_DEFS} in
-               *TK_FRAMEWORK*)
-                       if test -d "${TK_BIN_DIR}/Headers" -a \
-                               -d "${TK_BIN_DIR}/PrivateHeaders"; then
-                           TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"
-                       else
-                           TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
-                       fi
-                       ;;
-           esac
-           result="Using ${TK_INCLUDES}"
-       else
-           if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then
-              AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}])
-           fi
-           result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}"
-       fi
-    fi
-
-    AC_SUBST(TK_TOP_DIR_NATIVE)
-    AC_SUBST(TK_XLIB_DIR_NATIVE)
-
-    AC_SUBST(TK_INCLUDES)
-    AC_MSG_RESULT([${result}])
-])
-
-#------------------------------------------------------------------------
-# TEA_PUBLIC_TK_HEADERS --
-#
-#      Locate the installed public Tk header files
-#
-# Arguments:
-#      None.
-#
-# Requires:
-#      CYGPATH must be set
-#
-# Results:
-#
-#      Adds a --with-tkinclude switch to configure.
-#      Result is cached.
-#
-#      Substitutes the following vars:
-#              TK_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [
-    AC_MSG_CHECKING([for Tk public headers])
-
-    AC_ARG_WITH(tkinclude, [  --with-tkinclude        directory containing the public Tk header files], with_tkinclude=${withval})
-
-    AC_CACHE_VAL(ac_cv_c_tkh, [
-       # Use the value from --with-tkinclude, if it was given
-
-       if test x"${with_tkinclude}" != x ; then
-           if test -f "${with_tkinclude}/tk.h" ; then
-               ac_cv_c_tkh=${with_tkinclude}
-           else
-               AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h])
-           fi
-       else
-           list=""
-           if test "`uname -s`" = "Darwin"; then
-               # If Tk was built as a framework, attempt to use
-               # the framework's Headers directory.
-               case ${TK_DEFS} in
-                   *TK_FRAMEWORK*)
-                       list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`"
-                       ;;
-               esac
-           fi
-
-           # Look in the source dir only if Tk is not installed,
-           # and in that situation, look there before installed locations.
-           if test -f "${TK_BIN_DIR}/Makefile" ; then
-               list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`"
-           fi
-
-           # Check order: pkg --prefix location, Tk's --prefix location,
-           # relative to directory of tkConfig.sh, Tcl's --prefix location,
-           # relative to directory of tclConfig.sh.
-
-           eval "temp_includedir=${includedir}"
-           list="$list \
-               `ls -d ${temp_includedir}        2>/dev/null` \
-               `ls -d ${TK_PREFIX}/include      2>/dev/null` \
-               `ls -d ${TK_BIN_DIR}/../include  2>/dev/null` \
-               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
-               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
-           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
-               list="$list /usr/local/include /usr/include"
-               if test x"${TK_INCLUDE_SPEC}" != x ; then
-                   d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'`
-                   list="$list `ls -d ${d} 2>/dev/null`"
-               fi
-           fi
-           for i in $list ; do
-               if test -f "$i/tk.h" ; then
-                   ac_cv_c_tkh=$i
-                   break
-               fi
-           done
-       fi
-    ])
-
-    # Print a message based on how we determined the include path
-
-    if test x"${ac_cv_c_tkh}" = x ; then
-       AC_MSG_ERROR([tk.h not found.  Please specify its location with --with-tkinclude])
-    else
-       AC_MSG_RESULT([${ac_cv_c_tkh}])
-    fi
-
-    # Convert to a native path and substitute into the output files.
-
-    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}`
-
-    TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-
-    AC_SUBST(TK_INCLUDES)
-
-    if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
-       # On Windows and Aqua, we need the X compat headers
-       AC_MSG_CHECKING([for X11 header files])
-       if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then
-           INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`"
-           TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-           AC_SUBST(TK_XINCLUDES)
-       fi
-       AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}])
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PATH_CONFIG --
-#
-#      Locate the ${1}Config.sh file and perform a sanity check on
-#      the ${1} compile flags.  These are used by packages like
-#      [incr Tk] that load *Config.sh files from more than Tcl and Tk.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-$1=...
-#
-#      Defines the following vars:
-#              $1_BIN_DIR      Full path to the directory containing
-#                              the $1Config.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_CONFIG], [
-    #
-    # Ok, lets find the $1 configuration
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-$1
-    #
-
-    if test x"${no_$1}" = x ; then
-       # we reset no_$1 in case something fails here
-       no_$1=true
-       AC_ARG_WITH($1, [  --with-$1              directory containing $1 configuration ($1Config.sh)], with_$1config=${withval})
-       AC_MSG_CHECKING([for $1 configuration])
-       AC_CACHE_VAL(ac_cv_c_$1config,[
-
-           # First check to see if --with-$1 was specified.
-           if test x"${with_$1config}" != x ; then
-               case ${with_$1config} in
-                   */$1Config.sh )
-                       if test -f ${with_$1config}; then
-                           AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself])
-                           with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'`
-                       fi;;
-               esac
-               if test -f "${with_$1config}/$1Config.sh" ; then
-                   ac_cv_c_$1config=`(cd ${with_$1config}; pwd)`
-               else
-                   AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh])
-               fi
-           fi
-
-           # then check for a private $1 installation
-           if test x"${ac_cv_c_$1config}" = x ; then
-               for i in \
-                       ../$1 \
-                       `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ../../$1 \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ../../../$1 \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ${srcdir}/../$1 \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ; do
-                   if test -f "$i/$1Config.sh" ; then
-                       ac_cv_c_$1config=`(cd $i; pwd)`
-                       break
-                   fi
-                   if test -f "$i/unix/$1Config.sh" ; then
-                       ac_cv_c_$1config=`(cd $i/unix; pwd)`
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few common install locations
-           if test x"${ac_cv_c_$1config}" = x ; then
-               for i in `ls -d ${libdir} 2>/dev/null` \
-                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
-                       `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
-                       `ls -d /usr/contrib/lib 2>/dev/null` \
-                       `ls -d /usr/lib 2>/dev/null` \
-                       `ls -d /usr/lib64 2>/dev/null` \
-                       ; do
-                   if test -f "$i/$1Config.sh" ; then
-                       ac_cv_c_$1config=`(cd $i; pwd)`
-                       break
-                   fi
-               done
-           fi
-       ])
-
-       if test x"${ac_cv_c_$1config}" = x ; then
-           $1_BIN_DIR="# no $1 configs found"
-           AC_MSG_WARN([Cannot find $1 configuration definitions])
-           exit 0
-       else
-           no_$1=
-           $1_BIN_DIR=${ac_cv_c_$1config}
-           AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_CONFIG --
-#
-#      Load the $1Config.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              $1_BIN_DIR
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              $1_SRC_DIR
-#              $1_LIB_FILE
-#              $1_LIB_SPEC
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_CONFIG], [
-    AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh])
-
-    if test -f "${$1_BIN_DIR}/$1Config.sh" ; then
-        AC_MSG_RESULT([loading])
-       . "${$1_BIN_DIR}/$1Config.sh"
-    else
-        AC_MSG_RESULT([file not found])
-    fi
-
-    #
-    # If the $1_BIN_DIR is the build directory (not the install directory),
-    # then set the common variable name to the value of the build variables.
-    # For example, the variable $1_LIB_SPEC will be set to the value
-    # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC
-    # instead of $1_BUILD_LIB_SPEC since it will work with both an
-    # installed and uninstalled version of Tcl.
-    #
-
-    if test -f "${$1_BIN_DIR}/Makefile" ; then
-       AC_MSG_WARN([Found Makefile - using build library specs for $1])
-        $1_LIB_SPEC=${$1_BUILD_LIB_SPEC}
-        $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC}
-        $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH}
-        $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC}
-        $1_LIBRARY_PATH=${$1_LIBRARY_PATH}
-    fi
-
-    AC_SUBST($1_VERSION)
-    AC_SUBST($1_BIN_DIR)
-    AC_SUBST($1_SRC_DIR)
-
-    AC_SUBST($1_LIB_FILE)
-    AC_SUBST($1_LIB_SPEC)
-
-    AC_SUBST($1_STUB_LIB_FILE)
-    AC_SUBST($1_STUB_LIB_SPEC)
-    AC_SUBST($1_STUB_LIB_PATH)
-
-    # Allow the caller to prevent this auto-check by specifying any 2nd arg
-    AS_IF([test "x$2" = x], [
-       # Check both upper and lower-case variants
-       # If a dev wanted non-stubs libs, this function could take an option
-       # to not use _STUB in the paths below
-       AS_IF([test "x${$1_STUB_LIB_SPEC}" = x],
-           [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)],
-           [TEA_LOAD_CONFIG_LIB($1_STUB)])
-    ])
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_CONFIG_LIB --
-#
-#      Helper function to load correct library from another extension's
-#      ${PACKAGE}Config.sh.
-#
-# Results:
-#      Adds to LIBS the appropriate extension library
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_LOAD_CONFIG_LIB], [
-    AC_MSG_CHECKING([For $1 library for LIBS])
-    # This simplifies the use of stub libraries by automatically adding
-    # the stub lib to your path.  Normally this would add to SHLIB_LD_LIBS,
-    # but this is called before CONFIG_CFLAGS.  More importantly, this adds
-    # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD.
-    if test "x${$1_LIB_SPEC}" != "x" ; then
-       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then
-           TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"])
-           AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}])
-       else
-           TEA_ADD_LIBS([${$1_LIB_SPEC}])
-           AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}])
-       fi
-    else
-       AC_MSG_RESULT([file not found])
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_EXPORT_CONFIG --
-#
-#      Define the data to insert into the ${PACKAGE}Config.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              $1
-#
-# Results:
-#      Substitutes the following vars:
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_EXPORT_CONFIG], [
-    #--------------------------------------------------------------------
-    # These are for $1Config.sh
-    #--------------------------------------------------------------------
-
-    # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib)
-    eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}"
-    if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
-       eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}"
-       eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}"
-    else
-       eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
-       eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
-    fi
-    $1_BUILD_LIB_SPEC="-L`$CYGPATH $(pwd)` ${$1_LIB_FLAG}"
-    $1_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${$1_LIB_FLAG}"
-    $1_BUILD_STUB_LIB_SPEC="-L`$CYGPATH $(pwd)` [$]{$1_STUB_LIB_FLAG}"
-    $1_STUB_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` [$]{$1_STUB_LIB_FLAG}"
-    $1_BUILD_STUB_LIB_PATH="`$CYGPATH $(pwd)`/[$]{PKG_STUB_LIB_FILE}"
-    $1_STUB_LIB_PATH="`$CYGPATH ${pkglibdir}`/[$]{PKG_STUB_LIB_FILE}"
-
-    AC_SUBST($1_BUILD_LIB_SPEC)
-    AC_SUBST($1_LIB_SPEC)
-    AC_SUBST($1_BUILD_STUB_LIB_SPEC)
-    AC_SUBST($1_STUB_LIB_SPEC)
-    AC_SUBST($1_BUILD_STUB_LIB_PATH)
-    AC_SUBST($1_STUB_LIB_PATH)
-
-    AC_SUBST(MAJOR_VERSION)
-    AC_SUBST(MINOR_VERSION)
-    AC_SUBST(PATCHLEVEL)
-])
-
-
-#------------------------------------------------------------------------
-# TEA_PATH_CELIB --
-#
-#      Locate Keuchel's celib emulation layer for targeting Win/CE
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-celib=...
-#
-#      Defines the following vars:
-#              CELIB_DIR       Full path to the directory containing
-#                              the include and platform lib files
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_CELIB], [
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-celib
-
-    if test x"${no_celib}" = x ; then
-       # we reset no_celib in case something fails here
-       no_celib=true
-       AC_ARG_WITH(celib,[  --with-celib=DIR        use Windows/CE support library from DIR], with_celibconfig=${withval})
-       AC_MSG_CHECKING([for Windows/CE celib directory])
-       AC_CACHE_VAL(ac_cv_c_celibconfig,[
-           # First check to see if --with-celibconfig was specified.
-           if test x"${with_celibconfig}" != x ; then
-               if test -d "${with_celibconfig}/inc" ; then
-                   ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)`
-               else
-                   AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory])
-               fi
-           fi
-
-           # then check for a celib library
-           if test x"${ac_cv_c_celibconfig}" = x ; then
-               for i in \
-                       ../celib-palm-3.0 \
-                       ../celib \
-                       ../../celib-palm-3.0 \
-                       ../../celib \
-                       `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \
-                       ${srcdir}/../celib-palm-3.0 \
-                       ${srcdir}/../celib \
-                       `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \
-                       ; do
-                   if test -d "$i/inc" ; then
-                       ac_cv_c_celibconfig=`(cd $i; pwd)`
-                       break
-                   fi
-               done
-           fi
-       ])
-       if test x"${ac_cv_c_celibconfig}" = x ; then
-           AC_MSG_ERROR([Cannot find celib support library directory])
-       else
-           no_celib=
-           CELIB_DIR=${ac_cv_c_celibconfig}
-           CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
-           AC_MSG_RESULT([found $CELIB_DIR])
-       fi
-    fi
-])
-# Local Variables:
-# mode: autoconf
-# End:
diff --git a/pkgs/tdbcodbc1.0.5/win/makefile.vc b/pkgs/tdbcodbc1.0.5/win/makefile.vc
deleted file mode 100644 (file)
index 012482a..0000000
+++ /dev/null
@@ -1,562 +0,0 @@
-#------------------------------------------------------------- -*- makefile -*-\r
-# makefile.vc --\r
-#\r
-#      Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)\r
-#\r
-# This makefile is based upon the Tcl 8.6 Makefile.vc and modified to\r
-# make it suitable as a general package makefile. Look for the word EDIT\r
-# which marks sections that may need modification. As a minumum you will\r
-# need to change the PROJECT, DOTVERSION and DLLOBJS variables to values\r
-# relevant to your package.\r
-#\r
-# See the file "license.terms" for information on usage and redistribution\r
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
-#\r
-# Copyright (c) 1995-1996 Sun Microsystems, Inc.\r
-# Copyright (c) 1998-2000 Ajuba Solutions.\r
-# Copyright (c) 2001-2005 ActiveState Corporation.\r
-# Copyright (c) 2001-2004 David Gravereaux.\r
-# Copyright (c) 2003-2008 Pat Thoyts.\r
-#------------------------------------------------------------------------------\r
-\r
-# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or\r
-# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)\r
-!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)\r
-MSG = ^\r
-You need to run vcvars32.bat from Developer Studio or setenv.bat from the^\r
-Platform SDK first to setup the environment.  Jump to this line to read^\r
-the build instructions.\r
-!error $(MSG)\r
-!endif\r
-\r
-#------------------------------------------------------------------------------\r
-# HOW TO USE this makefile:\r
-#\r
-# 1)  It is now necessary to have MSVCDir, MSDevDir or MSSDK set in the\r
-#     environment.  This is used as a check to see if vcvars32.bat had been\r
-#     run prior to running nmake or during the installation of Microsoft\r
-#     Visual C++, MSVCDir had been set globally and the PATH adjusted.\r
-#     Either way is valid.\r
-#\r
-#     You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin\r
-#     directory to setup the proper environment, if needed, for your\r
-#     current setup.  This is a needed bootstrap requirement and allows the\r
-#     swapping of different environments to be easier.\r
-#\r
-# 2)  To use the Platform SDK (not expressly needed), run setenv.bat after\r
-#     vcvars32.bat according to the instructions for it.  This can also\r
-#     turn on the 64-bit compiler, if your SDK has it.\r
-#\r
-# 3)  Targets are:\r
-#      all       -- Builds everything.\r
-#      <project> -- Builds the project (eg: nmake sample)\r
-#      test      -- Builds and runs the test suite.\r
-#      install   -- Installs the built binaries and libraries to $(INSTALLDIR)\r
-#                   in an appropriate subdirectory.\r
-#      clean/realclean/distclean -- varying levels of cleaning.\r
-#\r
-# 4)  Macros usable on the commandline:\r
-#      INSTALLDIR=<path>\r
-#              Sets where to install Tcl from the built binaries.\r
-#              C:\Progra~1\Tcl is assumed when not specified.\r
-#\r
-#      OPTS=loimpact,msvcrt,nothreads,pdbs,profile,static,symbols,unchecked,none\r
-#              Sets special options for the core.  The default is for none.\r
-#              Any combination of the above may be used (comma separated).\r
-#              'none' will over-ride everything to nothing.\r
-#\r
-#              loimpact = Adds a flag for how NT treats the heap to keep memory\r
-#                         in use, low.  This is said to impact alloc performance.\r
-#              msvcrt  =  Affects the static option only to switch it from\r
-#                         using libcmt(d) as the C runtime [by default] to\r
-#                         msvcrt(d). This is useful for static embedding\r
-#                         support.\r
-#              nothreads = Turns off multithreading support (not recommended)\r
-#              static  =  Builds a static library of the core instead of a\r
-#                         dll.  The shell will be static (and large), as well.\r
-#              pdbs     = Build detached symbols for release builds.\r
-#              profile  = Adds profiling hooks.  Map file is assumed.\r
-#              symbols  = Debug build. Links to the debug C runtime, disables\r
-#                         optimizations and creates pdb symbols files.\r
-#              unchecked = Allows a symbols build to not use the debug\r
-#                         enabled runtime (msvcrt.dll not msvcrtd.dll\r
-#                         or libcmt.lib not libcmtd.lib).\r
-#\r
-#      STATS=memdbg,compdbg,none\r
-#              Sets optional memory and bytecode compiler debugging code added\r
-#              to the core.  The default is for none.  Any combination of the\r
-#              above may be used (comma separated).  'none' will over-ride\r
-#              everything to nothing.\r
-#\r
-#              memdbg   = Enables the debugging memory allocator.\r
-#              compdbg  = Enables byte compilation logging.\r
-#\r
-#      CHECKS=64bit,fullwarn,nodep,none\r
-#              Sets special macros for checking compatability.\r
-#\r
-#              64bit    = Enable 64bit portability warnings (if available)\r
-#              fullwarn = Builds with full compiler and link warnings enabled.\r
-#                          Very verbose.\r
-#              nodep    = Turns off compatability macros to ensure Tk isn't\r
-#                          being built with deprecated functions.\r
-#\r
-#      MACHINE=(ALPHA|AMD64|IA64|IX86)\r
-#              Set the machine type used for the compiler, linker, and\r
-#              resource compiler.  This hook is needed to tell the tools\r
-#              when alternate platforms are requested.  IX86 is the default\r
-#              when not specified. If the CPU environment variable has been\r
-#              set (ie: recent Platform SDK) then MACHINE is set from CPU.\r
-#\r
-#      TMP_DIR=<path>\r
-#      OUT_DIR=<path>\r
-#              Hooks to allow the intermediate and output directories to be\r
-#              changed.  $(OUT_DIR) is assumed to be\r
-#              $(BINROOT)\(Release|Debug) based on if symbols are requested.\r
-#              $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default.\r
-#\r
-#      TESTPAT=<file>\r
-#              Reads the tests requested to be run from this file.\r
-#\r
-# 5)  Examples:\r
-#\r
-#      Basic syntax of calling nmake looks like this:\r
-#      nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]]\r
-#\r
-#                        Standard (no frills)\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
-#       c:\tcl_src\win\>nmake -f makefile.vc all\r
-#       c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl\r
-#\r
-#                         Building for Win64\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
-#       c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL\r
-#       Targeting Windows pre64 RETAIL\r
-#       c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64\r
-#\r
-#------------------------------------------------------------------------------\r
-#==============================================================================\r
-#------------------------------------------------------------------------------\r
-\r
-!if !exist("makefile.vc")\r
-MSG = ^\r
-You must run this makefile only from the directory it is in.^\r
-Please `cd` to its location first.\r
-!error $(MSG)\r
-!endif\r
-\r
-#-------------------------------------------------------------------------\r
-# Project specific information (EDIT)\r
-#\r
-# You should edit this with the name and version of your project. This\r
-# information is used to generate the name of the package library and\r
-# it's install location.\r
-#\r
-# For example, the sample extension is  going to build sample05.dll and\r
-# would install it into $(INSTALLDIR)\lib\sample05\r
-#\r
-# You need to specify the object files that need to be linked into your\r
-# binary here.\r
-#\r
-#-------------------------------------------------------------------------\r
-\r
-PROJECT = tdbcodbc\r
-\r
-# Uncomment the following line if this is a Tk extension.\r
-#PROJECT_REQUIRES_TK=1\r
-!include "rules.vc"\r
-\r
-# nmakehelp -V <file> <tag> will search the file for tag, skips until a\r
-#      number and returns all character until a character not in [0-9.ab]\r
-#      is read.\r
-\r
-!if [echo REM = This file is generated from Makefile.vc > versions.vc]\r
-!endif\r
-# get project version from row AC_INIT([tdbcodbc], [1.0b17])\r
-!if [echo DOTVERSION = \>> versions.vc] \\r
-   && [nmakehlp -V ..\configure.ac AC_INIT >> versions.vc]\r
-!endif\r
-!if [echo TCL_VERSION_REQ = \>> versions.vc] \\r
-   && [nmakehlp -V ..\configure.ac TCL_VERSION_REQ >> versions.vc]\r
-!endif\r
-!include "versions.vc"\r
-\r
-VERSION         = $(DOTVERSION:.=)\r
-STUBPREFIX      = $(PROJECT)stub\r
-\r
-DLLOBJS = \\r
-       $(TMP_DIR)\tdbcodbc.obj \\r
-       $(TMP_DIR)\odbcStubInit.obj\r
-\r
-\r
-PRJSTUBOBJS = \\r
-       $(TMP_DIR)\odbcStubInit.obj\r
-\r
-PRJHEADERS = \\r
-       $(GENERICDIR)\fakesql.h \\r
-       $(GENERICDIR)\odbcStubs.h\r
-\r
-\r
-#-------------------------------------------------------------------------\r
-# Target names and paths ( shouldn't need changing )\r
-#-------------------------------------------------------------------------\r
-\r
-BINROOT                = $(MAKEDIR)\r
-ROOT            = $(MAKEDIR)\..\r
-\r
-PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib\r
-PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)\r
-PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)\r
-\r
-PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
-PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)\r
-\r
-### Make sure we use backslash only.\r
-PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)\r
-LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)\r
-INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include\r
-\r
-### The following paths CANNOT have spaces in them.\r
-GENERICDIR     = $(ROOT)\generic\r
-WINDIR         = $(ROOT)\win\r
-LIBDIR          = $(ROOT)\library\r
-DOCDIR         = $(ROOT)\doc\r
-TOOLSDIR       = $(ROOT)\tools\r
-COMPATDIR      = $(ROOT)\compat\r
-\r
-### tdbc\r
-TDBC_DOTVERSION                = $(DOTVERSION)\r
-TDBC_VERSION           = $(TDBC_DOTVERSION:.=)\r
-# tdbc source folder is "../tdbc" in source distribution and\r
-# "../tdbc1.0.0" in tcl8.6.0 bundeled distribution\r
-TDBC_DIR               = $(ROOT)\..\tdbc\r
-!if !exist($(TDBC_DIR))\r
-TDBC_DIR               = $(ROOT)\..\tdbc$(TDBC_DOTVERSION)\r
-!endif\r
-TDBC_GENERIC_DIR       = $(TDBC_DIR)\generic\r
-### tdbc stub lib\r
-TDBCSTUBLIBNAME                = tdbcstub$(TDBC_VERSION).lib\r
-TDBCSTUBLIB            = "$(_TCLDIR)\lib\$(TDBCSTUBLIBNAME)"\r
-!if !exist($(TDBCSTUBLIB))\r
-TDBCSTUBLIB            = $(TDBC_DIR)\win\$(BUILDDIRTOP)\$(TDBCSTUBLIBNAME)\r
-!endif\r
-TDBC_LIB_FILE          = tdbc$(TDBC_VERSION).dll\r
-TDBC_BIN_DIR = $(TDBC_DIR)/win/$(BUILDDIRTOP)\r
-\r
-#---------------------------------------------------------------------\r
-# Compile flags\r
-#---------------------------------------------------------------------\r
-\r
-!if !$(DEBUG)\r
-!if $(OPTIMIZING)\r
-### This cranks the optimization level to maximize speed\r
-cdebug = $(OPTIMIZATIONS)\r
-!else\r
-cdebug =\r
-!endif\r
-!else if "$(MACHINE)" == "IA64"\r
-### Warnings are too many, can't support warnings into errors.\r
-cdebug = -Zi -Od $(DEBUGFLAGS)\r
-!else\r
-cdebug = -Zi -WX $(DEBUGFLAGS)\r
-!endif\r
-\r
-### Declarations common to all compiler options\r
-cwarn = $(WARNINGS) -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE\r
-cflags = -nologo -c $(COMPILERFLAGS) $(cwarn) -Fp$(TMP_DIR)^\\r
-\r
-!if $(MSVCRT)\r
-!if $(DEBUG) && !$(UNCHECKED)\r
-crt = -MDd\r
-!else\r
-crt = -MD\r
-!endif\r
-!else\r
-!if $(DEBUG) && !$(UNCHECKED)\r
-crt = -MTd\r
-!else\r
-crt = -MT\r
-!endif\r
-!endif\r
-\r
-cflags = $(cflags) -DMODULE_SCOPE=extern\r
-\r
-!if !$(STATIC_BUILD)\r
-cflags = $(cflags) -DUSE_TCL_STUBS\r
-!if defined(TKSTUBLIB)\r
-cflags = $(cflags) -DUSE_TK_STUBS\r
-!endif\r
-!endif\r
-\r
-INCLUDES       = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)" -I"$(TDBC_GENERIC_DIR)"\r
-BASE_CFLAGS    = $(cflags) $(cdebug) $(crt) $(INCLUDES)\r
-CON_CFLAGS     = $(cflags) $(cdebug) $(crt) -DCONSOLE\r
-TCL_CFLAGS     = -DPACKAGE_NAME="\"$(PROJECT)\"" \\r
-                 -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \\r
-                 -DBUILD_$(PROJECT) \\r
-                 $(BASE_CFLAGS) $(OPTDEFINES) \\r
-                  -Dinline=__inline\r
-\r
-### Stubs files should not be compiled with -GL\r
-STUB_CFLAGS     = $(cflags) $(cdebug:-GL=) #$(TK_DEFINES)\r
-\r
-#---------------------------------------------------------------------\r
-# Link flags\r
-#---------------------------------------------------------------------\r
-\r
-!if $(DEBUG)\r
-ldebug = -debug\r
-!if $(MSVCRT)\r
-ldebug = $(ldebug) -nodefaultlib:msvcrt\r
-!endif\r
-!else\r
-ldebug = -release -opt:ref -opt:icf,3\r
-!endif\r
-\r
-### Declarations common to all linker options\r
-lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)\r
-\r
-!if $(PROFILE)\r
-lflags = $(lflags) -profile\r
-!endif\r
-\r
-!if $(ALIGN98_HACK) && !$(STATIC_BUILD)\r
-### Align sections for PE size savings.\r
-lflags = $(lflags) -opt:nowin98\r
-!else if !$(ALIGN98_HACK) && $(STATIC_BUILD)\r
-### Align sections for speed in loading by choosing the virtual page size.\r
-lflags = $(lflags) -align:4096\r
-!endif\r
-\r
-!if $(LOIMPACT)\r
-lflags = $(lflags) -ws:aggressive\r
-!endif\r
-\r
-dlllflags = $(lflags) -dll\r
-conlflags = $(lflags) -subsystem:console\r
-guilflags = $(lflags) -subsystem:windows\r
-!if !$(STATIC_BUILD)\r
-baselibs  = $(TCLSTUBLIB) $(TDBCSTUBLIB)\r
-!if defined(TKSTUBLIB)\r
-baselibs  = $(baselibs) $(TKSTUBLIB)\r
-!endif\r
-!endif\r
-\r
-# Avoid 'unresolved external symbol __security_cookie' errors.\r
-# c.f. http://support.microsoft.com/?id=894573\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500\r
-baselibs   = $(baselibs) bufferoverflowU.lib\r
-!endif\r
-!endif\r
-\r
-#---------------------------------------------------------------------\r
-# TclTest flags\r
-#---------------------------------------------------------------------\r
-\r
-!if "$(TESTPAT)" != ""\r
-TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)\r
-!endif\r
-\r
-#---------------------------------------------------------------------\r
-# Project specific targets (EDIT)\r
-#---------------------------------------------------------------------\r
-\r
-all:       setup $(PROJECT)\r
-$(PROJECT): setup pkgIndex $(PRJLIB)\r
-install:    install-binaries install-libraries install-docs\r
-pkgIndex:   setup $(OUT_DIR)\pkgIndex.tcl\r
-\r
-!if !$(STATIC_BUILD)\r
-$(PROJECT):  $(PRJSTUBLIB)\r
-!endif\r
-\r
-test: test-jet test-sqlserver test-sqlite\r
-\r
-test: setup $(PROJECT)\r
-\r
-test-jet: setup $(PROJECT)\r
-       @echo testing tdbcodbc against Jet\r
-       @set TDBCODBC_TYPE=jet\r
-# the following is identical for all 3 tests\r
-        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)\r
-        @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)\r
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)\r
-       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)\r
-!if $(TCLINSTALL)\r
-        @set PATH=$(_TCLDIR)\bin;$(PATH)\r
-       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS)\r
-!else\r
-        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)\r
-       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) \\r
-               -load "package ifneeded tdbc::odbc $(DOTVERSION) \\r
-                       {source {$(LIBDIR:\=/)/tdbcodbc.tcl};load {$(PRJLIB:\=/)} $(PROJECT)};\\r
-               package ifneeded tdbc $(TDBC_DOTVERSION) \\r
-                       {source {$(TDBC_BIN_DIR:\=/)/tdbc.tcl};load {$(TDBC_BIN_DIR:\=/)/$(TDBC_LIB_FILE)} tdbc}"\r
-!endif\r
-\r
-test-sqlserver: setup $(PROJECT)\r
-       @echo testing tdbcodbc against SQL Server\r
-       @set TDBCODBC_TYPE=sqlserver\r
-# the following is identical for all 3 tests\r
-        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)\r
-        @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)\r
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)\r
-       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)\r
-!if $(TCLINSTALL)\r
-        @set PATH=$(_TCLDIR)\bin;$(PATH)\r
-       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS)\r
-!else\r
-        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)\r
-       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) \\r
-               -load "package ifneeded tdbc::odbc $(DOTVERSION) \\r
-                       {source {$(LIBDIR:\=/)/tdbcodbc.tcl};load {$(PRJLIB:\=/)} $(PROJECT)};\\r
-               package ifneeded tdbc $(TDBC_DOTVERSION) \\r
-                       {source {$(TDBC_BIN_DIR:\=/)/tdbc.tcl};load {$(TDBC_BIN_DIR:\=/)/$(TDBC_LIB_FILE)} tdbc}"\r
-!endif\r
-\r
-test-sqlite: setup $(PROJECT)\r
-       @echo testing tdbcodbc against SQLite\r
-       @set TDBCODBC_TYPE=sqlite\r
-# the following is identical for all 3 tests\r
-        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)\r
-        @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)\r
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)\r
-       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)\r
-!if $(TCLINSTALL)\r
-        @set PATH=$(_TCLDIR)\bin;$(PATH)\r
-       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS)\r
-!else\r
-        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)\r
-       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) \\r
-               -load "package ifneeded tdbc::odbc $(DOTVERSION) \\r
-                       {source {$(LIBDIR:\=/)/tdbcodbc.tcl};load {$(PRJLIB:\=/)} $(PROJECT)};\\r
-               package ifneeded tdbc $(TDBC_DOTVERSION) \\r
-                       {source {$(TDBC_BIN_DIR:\=/)/tdbc.tcl};load {$(TDBC_BIN_DIR:\=/)/$(TDBC_LIB_FILE)} tdbc}"\r
-!endif\r
-\r
-shell: setup $(PROJECT)\r
-        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)\r
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)\r
-!if $(TCLINSTALL)\r
-        @set PATH=$(_TCLDIR)\bin;$(PATH)\r
-!else\r
-        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)\r
-!endif\r
-        $(DEBUGGER) $(TCLSH) $(SCRIPT)\r
-\r
-setup:\r
-       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)\r
-       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)\r
-\r
-# See <tcl>/win/coffbase.txt for extension base addresses.\r
-$(PRJLIB): $(DLLOBJS)\r
-       $(link32) $(dlllflags) -base:@$(COFFBASE),tdbc -out:$@ $(baselibs) @<<\r
-$**\r
-<<\r
-       $(_VC_MANIFEST_EMBED_DLL)\r
-       -@del $*.exp\r
-\r
-$(PRJSTUBLIB): $(PRJSTUBOBJS)\r
-       $(lib32) -nologo -out:$@ $(PRJSTUBOBJS)\r
-\r
-\r
-#---------------------------------------------------------------------\r
-# Implicit rules\r
-#---------------------------------------------------------------------\r
-\r
-{$(WINDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(WINDIR)}.rc{$(TMP_DIR)}.res:\r
-       $(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \\r
-               -DCOMMAVERSION=$(DOTVERSION:.=,),0 \\r
-               -DDOTVERSION=\"$(DOTVERSION)\" \\r
-               -DVERSION=\"$(VERSION)$(SUFX)\" \\r
-!if $(DEBUG)\r
-       -d DEBUG \\r
-!endif\r
-!if $(TCL_THREADS)\r
-       -d TCL_THREADS \\r
-!endif\r
-!if $(STATIC_BUILD)\r
-       -d STATIC_BUILD \\r
-!endif\r
-       $<\r
-\r
-.SUFFIXES:\r
-.SUFFIXES:.c .rc\r
-\r
-#-------------------------------------------------------------------------\r
-# Explicit dependency rules\r
-#\r
-#-------------------------------------------------------------------------\r
-.PHONY: $(OUT_DIR)\pkgIndex.tcl\r
-\r
-$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in\r
-       @nmakehlp -s << $** > $@\r
-@PACKAGE_NAME@        $(PROJECT)\r
-@PACKAGE_VERSION@     $(DOTVERSION)\r
-@TCL_VERSION_REQ@     $(TCL_VERSION_REQ)\r
-@PKG_LIB_FILE@        $(PRJLIBNAME)\r
-<<\r
-\r
-$(TMP_DIR)\odbcStubInit.obj : $(GENERICDIR)\odbcStubInit.c\r
-        $(cc32) $(STUB_CFLAGS) $(TCL_INCLUDES) -Zl -DSTATIC_BUILD -Fo$@ $?\r
-\r
-#---------------------------------------------------------------------\r
-# Installation. (EDIT)\r
-#\r
-# You may need to modify this section to reflect the final distribution\r
-# of your files and possibly to generate documentation.\r
-#\r
-#---------------------------------------------------------------------\r
-\r
-install-binaries:\r
-       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'\r
-       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"\r
-       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL\r
-\r
-install-libraries: $(OUT_DIR)\pkgIndex.tcl\r
-       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'\r
-       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"\r
-       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'\r
-       @$(CPY) $(OUT_DIR)\pkgIndex.tcl "$(SCRIPT_INSTALL_DIR)"\r
-\r
-install-docs:\r
-       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'\r
-       @if exist $(DOCDIR) $(CPY) $(DOCDIR)\*.n "$(DOC_INSTALL_DIR)"\r
-\r
-#---------------------------------------------------------------------\r
-# Clean up\r
-#---------------------------------------------------------------------\r
-\r
-clean:\r
-       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)\r
-       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc\r
-       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i\r
-       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x\r
-       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch\r
-\r
-realclean: clean\r
-       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)\r
-\r
-distclean: realclean\r
-       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe\r
-       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj\r
diff --git a/pkgs/tdbcodbc1.0.5/win/rules.vc b/pkgs/tdbcodbc1.0.5/win/rules.vc
deleted file mode 100644 (file)
index 60ed158..0000000
+++ /dev/null
@@ -1,691 +0,0 @@
-#------------------------------------------------------------------------------\r
-# rules.vc --\r
-#\r
-#      Microsoft Visual C++ makefile include for decoding the commandline\r
-#      macros.  This file does not need editing to build Tcl.\r
-#\r
-#      This version is modified from the Tcl source version to support\r
-#      building extensions using nmake.\r
-#\r
-# See the file "license.terms" for information on usage and redistribution\r
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
-#\r
-# Copyright (c) 2001-2003 David Gravereaux.\r
-# Copyright (c) 2003-2008 Patrick Thoyts\r
-#------------------------------------------------------------------------------\r
-\r
-!ifndef _RULES_VC\r
-_RULES_VC = 1\r
-\r
-cc32           = $(CC)   # built-in default.\r
-link32         = link\r
-lib32          = lib\r
-rc32           = $(RC)   # built-in default.\r
-\r
-!ifndef INSTALLDIR\r
-### Assume the normal default.\r
-_INSTALLDIR    = C:\Program Files\Tcl\r
-!else\r
-### Fix the path separators.\r
-_INSTALLDIR    = $(INSTALLDIR:/=\)\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Set the proper copy method to avoid overwrite questions\r
-# to the user when copying files and selecting the right\r
-# "delete all" method.\r
-#----------------------------------------------------------\r
-\r
-!if "$(OS)" == "Windows_NT"\r
-RMDIR  = rmdir /S /Q\r
-ERRNULL  = 2>NUL\r
-!if ![ver | find "4.0" > nul]\r
-CPY    = echo y | xcopy /i >NUL\r
-COPY   = copy >NUL\r
-!else\r
-CPY    = xcopy /i /y >NUL\r
-COPY   = copy /y >NUL\r
-!endif\r
-!else # "$(OS)" != "Windows_NT"\r
-CPY    = xcopy /i >_JUNK.OUT # On Win98 NUL does not work here.\r
-COPY   = copy >_JUNK.OUT # On Win98 NUL does not work here.\r
-RMDIR  = deltree /Y\r
-NULL    = \NUL # Used in testing directory existence\r
-ERRNULL = >NUL # Win9x shell cannot redirect stderr\r
-!endif\r
-MKDIR   = mkdir\r
-\r
-#------------------------------------------------------------------------------\r
-# Determine the host and target architectures and compiler version.\r
-#------------------------------------------------------------------------------\r
-\r
-_HASH=^#\r
-_VC_MANIFEST_EMBED_EXE=\r
-_VC_MANIFEST_EMBED_DLL=\r
-VCVER=0\r
-!if ![echo VCVERSION=_MSC_VER > vercl.x] \\r
-    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \\r
-    && ![echo ARCH=IX86 >> vercl.x] \\r
-    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \\r
-    && ![echo ARCH=AMD64 >> vercl.x] \\r
-    && ![echo $(_HASH)endif >> vercl.x] \\r
-    && ![cl -nologo -TC -P vercl.x $(ERRNULL)]\r
-!include vercl.i\r
-!if ![echo VCVER= ^\> vercl.vc] \\r
-    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]\r
-!include vercl.vc\r
-!endif\r
-!endif\r
-!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]\r
-!endif\r
-\r
-!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]\r
-NATIVE_ARCH=IX86\r
-!else\r
-NATIVE_ARCH=AMD64\r
-!endif\r
-\r
-# Since MSVC8 we must deal with manifest resources.\r
-!if $(VCVERSION) >= 1400\r
-_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1\r
-_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2\r
-!endif\r
-\r
-!ifndef MACHINE\r
-MACHINE=$(ARCH)\r
-!endif\r
-\r
-!ifndef CFG_ENCODING\r
-CFG_ENCODING   = \"cp1252\"\r
-!endif\r
-\r
-!message ===============================================================================\r
-\r
-#----------------------------------------------------------\r
-# build the helper app we need to overcome nmake's limiting\r
-# environment.\r
-#----------------------------------------------------------\r
-\r
-!if !exist(nmakehlp.exe)\r
-!if [$(cc32) -nologo nmakehlp.c -link -subsystem:console > nul]\r
-!endif\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Test for compiler features\r
-#----------------------------------------------------------\r
-\r
-### test for optimizations\r
-!if [nmakehlp -c -Ot]\r
-!message *** Compiler has 'Optimizations'\r
-OPTIMIZING     = 1\r
-!else\r
-!message *** Compiler does not have 'Optimizations'\r
-OPTIMIZING     = 0\r
-!endif\r
-\r
-OPTIMIZATIONS   =\r
-\r
-!if [nmakehlp -c -Ot]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Ot\r
-!endif\r
-\r
-!if [nmakehlp -c -Oi]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Oi\r
-!endif\r
-\r
-!if [nmakehlp -c -Op]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Op\r
-!endif\r
-\r
-!if [nmakehlp -c -fp:strict]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -fp:strict\r
-!endif\r
-\r
-!if [nmakehlp -c -Gs]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Gs\r
-!endif\r
-\r
-!if [nmakehlp -c -GS]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS\r
-!endif\r
-\r
-!if [nmakehlp -c -GL]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL\r
-!endif\r
-\r
-DEBUGFLAGS     =\r
-\r
-!if [nmakehlp -c -RTC1]\r
-DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1\r
-!elseif [nmakehlp -c -GZ]\r
-DEBUGFLAGS     = $(DEBUGFLAGS) -GZ\r
-!endif\r
-\r
-COMPILERFLAGS  =-W3\r
-\r
-# In v13 -GL and -YX are incompatible.\r
-!if [nmakehlp -c -YX]\r
-!if ![nmakehlp -c -GL]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for pentium errata\r
-!if [nmakehlp -c -QI0f]\r
-!message *** Compiler has 'Pentium 0x0f fix'\r
-COMPILERFLAGS  = $(COMPILERFLAGS) -QI0f\r
-!else\r
-!message *** Compiler does not have 'Pentium 0x0f fix'\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IA64"\r
-### test for Itanium errata\r
-!if [nmakehlp -c -QIA64_Bx]\r
-!message *** Compiler has 'B-stepping errata workarounds'\r
-COMPILERFLAGS   = $(COMPILERFLAGS) -QIA64_Bx\r
-!else\r
-!message *** Compiler does not have 'B-stepping errata workarounds'\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for -align:4096, when align:512 will do.\r
-!if [nmakehlp -l -opt:nowin98]\r
-!message *** Linker has 'Win98 alignment problem'\r
-ALIGN98_HACK   = 1\r
-!else\r
-!message *** Linker does not have 'Win98 alignment problem'\r
-ALIGN98_HACK   = 0\r
-!endif\r
-!else\r
-ALIGN98_HACK   = 0\r
-!endif\r
-\r
-LINKERFLAGS     =\r
-\r
-!if [nmakehlp -l -ltcg]\r
-LINKERFLAGS     =-ltcg\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Decode the options requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]\r
-STATIC_BUILD   = 0\r
-TCL_THREADS    = 1\r
-DEBUG          = 0\r
-SYMBOLS                = 0\r
-PROFILE                = 0\r
-PGO            = 0\r
-MSVCRT         = 0\r
-LOIMPACT       = 0\r
-UNCHECKED       = 0\r
-!else\r
-!if [nmakehlp -f $(OPTS) "static"]\r
-!message *** Doing static\r
-STATIC_BUILD   = 1\r
-!else\r
-STATIC_BUILD   = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "msvcrt"]\r
-!message *** Doing msvcrt\r
-MSVCRT         = 1\r
-!else\r
-MSVCRT         = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "nothreads"]\r
-!message *** Compile explicitly for non-threaded tcl\r
-TCL_THREADS    = 0\r
-!else\r
-TCL_THREADS     = 1\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "symbols"]\r
-!message *** Doing symbols\r
-DEBUG          = 1\r
-!else\r
-DEBUG          = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "pdbs"]\r
-!message *** Doing pdbs\r
-SYMBOLS                = 1\r
-!else\r
-SYMBOLS                = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "profile"]\r
-!message *** Doing profile\r
-PROFILE                = 1\r
-!else\r
-PROFILE                = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "pgi"]\r
-!message *** Doing profile guided optimization instrumentation\r
-PGO            = 1\r
-!elseif [nmakehlp -f $(OPTS) "pgo"]\r
-!message *** Doing profile guided optimization\r
-PGO            = 2\r
-!else\r
-PGO            = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "loimpact"]\r
-!message *** Doing loimpact\r
-LOIMPACT       = 1\r
-!else\r
-LOIMPACT       = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "unchecked"]\r
-!message *** Doing unchecked\r
-UNCHECKED = 1\r
-!else\r
-UNCHECKED = 0\r
-!endif\r
-!endif\r
-\r
-\r
-!if !$(STATIC_BUILD)\r
-# Make sure we don't build overly fat DLLs.\r
-MSVCRT         = 1\r
-# We shouldn't statically put the extensions inside the shell when dynamic.\r
-TCL_USE_STATIC_PACKAGES = 0\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Figure-out how to name our intermediate and output directories.\r
-# We wouldn't want different builds to use the same .obj files\r
-# by accident.\r
-#----------------------------------------------------------\r
-\r
-#----------------------------------------\r
-# Naming convention:\r
-#   t = full thread support.\r
-#   s = static library (as opposed to an\r
-#      import library)\r
-#   g = linked to the debug enabled C\r
-#      run-time.\r
-#   x = special static build when it\r
-#      links to the dynamic C run-time.\r
-#----------------------------------------\r
-SUFX       = sgx\r
-\r
-!if $(DEBUG)\r
-BUILDDIRTOP = Debug\r
-!else\r
-BUILDDIRTOP = Release\r
-!endif\r
-\r
-!if "$(MACHINE)" != "IX86"\r
-BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)\r
-!endif\r
-!if $(VCVER) > 6\r
-BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)\r
-!endif\r
-\r
-!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)\r
-SUFX       = $(SUFX:g=)\r
-!endif\r
-\r
-TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX\r
-\r
-!if !$(STATIC_BUILD)\r
-TMP_DIRFULL = $(TMP_DIRFULL:Static=)\r
-SUFX       = $(SUFX:s=)\r
-EXT        = dll\r
-!if $(MSVCRT)\r
-TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
-SUFX       = $(SUFX:x=)\r
-!endif\r
-!else\r
-TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)\r
-EXT        = lib\r
-!if !$(MSVCRT)\r
-TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
-SUFX       = $(SUFX:x=)\r
-!endif\r
-!endif\r
-\r
-!if !$(TCL_THREADS)\r
-TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)\r
-SUFX       = $(SUFX:t=)\r
-!endif\r
-\r
-!ifndef TMP_DIR\r
-TMP_DIR            = $(TMP_DIRFULL)\r
-!ifndef OUT_DIR\r
-OUT_DIR            = .\$(BUILDDIRTOP)\r
-!endif\r
-!else\r
-!ifndef OUT_DIR\r
-OUT_DIR            = $(TMP_DIR)\r
-!endif\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Decode the statistics requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"]\r
-TCL_MEM_DEBUG      = 0\r
-TCL_COMPILE_DEBUG   = 0\r
-!else\r
-!if [nmakehlp -f $(STATS) "memdbg"]\r
-!message *** Doing memdbg\r
-TCL_MEM_DEBUG      = 1\r
-!else\r
-TCL_MEM_DEBUG      = 0\r
-!endif\r
-!if [nmakehlp -f $(STATS) "compdbg"]\r
-!message *** Doing compdbg\r
-TCL_COMPILE_DEBUG   = 1\r
-!else\r
-TCL_COMPILE_DEBUG   = 0\r
-!endif\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Decode the checks requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(CHECKS)" == "" || [nmakehlp -f "$(CHECKS)" "none"]\r
-TCL_NO_DEPRECATED          = 0\r
-WARNINGS                   = -W3\r
-!else\r
-!if [nmakehlp -f $(CHECKS) "nodep"]\r
-!message *** Doing nodep check\r
-TCL_NO_DEPRECATED          = 1\r
-!else\r
-TCL_NO_DEPRECATED          = 0\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "fullwarn"]\r
-!message *** Doing full warnings check\r
-WARNINGS                   = -W4\r
-!if [nmakehlp -l -warn:3]\r
-LINKERFLAGS                = $(LINKERFLAGS) -warn:3\r
-!endif\r
-!else\r
-WARNINGS                   = -W3\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]\r
-!message *** Doing 64bit portability warnings\r
-WARNINGS                   = $(WARNINGS) -Wp64\r
-!endif\r
-!endif\r
-\r
-!if $(PGO) > 1\r
-!if [nmakehlp -l -ltcg:pgoptimize]\r
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize\r
-!else\r
-MSG=^\r
-This compiler does not support profile guided optimization.\r
-!error $(MSG)\r
-!endif\r
-!elseif $(PGO) > 0\r
-!if [nmakehlp -l -ltcg:pginstrument]\r
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument\r
-!else\r
-MSG=^\r
-This compiler does not support profile guided optimization.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Set our defines now armed with our options.\r
-#----------------------------------------------------------\r
-\r
-OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS\r
-\r
-!if $(TCL_MEM_DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG\r
-!endif\r
-!if $(TCL_COMPILE_DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS\r
-!endif\r
-!if $(TCL_THREADS)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1\r
-!endif\r
-!if $(STATIC_BUILD)\r
-OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD\r
-!endif\r
-!if $(TCL_NO_DEPRECATED)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED\r
-!endif\r
-\r
-!if !$(DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DNDEBUG\r
-!if $(OPTIMIZING)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED\r
-!endif\r
-!endif\r
-!if $(PROFILE)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED\r
-!endif\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Get common info used when building extensions.\r
-#----------------------------------------------------------\r
-\r
-!if "$(PROJECT)" != "tcl"\r
-\r
-# If INSTALLDIR set to tcl root dir then reset to the lib dir.\r
-!if exist("$(_INSTALLDIR)\include\tcl.h")\r
-_INSTALLDIR=$(_INSTALLDIR)\lib\r
-!endif\r
-\r
-!if !defined(TCLDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCLDIR                = $(_INSTALLDIR)\..\r
-_TCL_H          = $(_INSTALLDIR)\..\include\tcl.h\r
-TCLDIR          = $(_INSTALLDIR)\..\r
-!else\r
-MSG=^\r
-Failed to find tcl.h.  Set the TCLDIR macro.\r
-!error $(MSG)\r
-!endif\r
-!else\r
-_TCLDIR        = $(TCLDIR:/=\)\r
-!if exist("$(_TCLDIR)\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCL_H          = $(_TCLDIR)\include\tcl.h\r
-!elseif exist("$(_TCLDIR)\generic\tcl.h")\r
-TCLINSTALL     = 0\r
-_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
-!else\r
-MSG =^\r
-Failed to find tcl.h.  The TCLDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-!endif\r
-\r
-#--------------------------------------------------------------\r
-# Extract various version numbers from tcl headers\r
-# The generated file is then included in the makefile.\r
-#--------------------------------------------------------------\r
-\r
-!if [echo REM = This file is generated from rules.vc > versions.vc]\r
-!endif\r
-!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TCL_MINOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]\r
-!endif\r
-\r
-# If building the tcl core then we need additional package versions\r
-!if "$(PROJECT)" == "tcl"\r
-!if [echo PKG_HTTP_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\http\pkgIndex.tcl http >> versions.vc]\r
-!endif\r
-!if [echo PKG_TCLTEST_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\tcltest\pkgIndex.tcl tcltest >> versions.vc]\r
-!endif\r
-!if [echo PKG_MSGCAT_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\msgcat\pkgIndex.tcl msgcat >> versions.vc]\r
-!endif\r
-!if [echo PKG_PLATFORM_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform " >> versions.vc]\r
-!endif\r
-!if [echo PKG_SHELL_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform::shell" >> versions.vc]\r
-!endif\r
-!endif\r
-\r
-!include versions.vc\r
-\r
-#--------------------------------------------------------------\r
-# Setup tcl version dependent stuff headers\r
-#--------------------------------------------------------------\r
-\r
-!if "$(PROJECT)" != "tcl"\r
-\r
-TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)\r
-\r
-!if $(TCL_VERSION) < 81\r
-TCL_DOES_STUBS = 0\r
-!else\r
-TCL_DOES_STUBS = 1\r
-!endif\r
-\r
-!if $(TCLINSTALL)\r
-_TCLBINDIR      = "$(_TCLDIR)\bin"\r
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH           = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\lib\r
-COFFBASE       = \must\have\tcl\sources\to\build\this\target\r
-TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target\r
-TCL_INCLUDES    = -I"$(_TCLDIR)\include"\r
-!else\r
-_TCLBINDIR      = $(_TCLDIR)\win\$(BUILDDIRTOP)\r
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\library\r
-COFFBASE       = "$(_TCLDIR)\win\coffbase.txt"\r
-TCLTOOLSDIR    = $(_TCLDIR)\tools\r
-TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"\r
-!endif\r
-\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Optionally check for Tk info for building extensions.\r
-#----------------------------------------------------------\r
-\r
-!ifdef PROJECT_REQUIRES_TK\r
-!if !defined(TKDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_INSTALLDIR)\..\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
-!elseif exist("$(_TCLDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_TCLDIR)\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
-!endif\r
-!else\r
-_TKDIR = $(TKDIR:/=\)\r
-!if exist("$(_TKDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-!elseif exist("$(_TKDIR)\generic\tk.h")\r
-TKINSTALL      = 0\r
-_TK_H          = $(_TKDIR)\generic\tk.h\r
-!else\r
-MSG =^\r
-Failed to find tk.h. The TKDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-!endif\r
-\r
-#-------------------------------------------------------------------------\r
-# Extract Tk version numbers\r
-#-------------------------------------------------------------------------\r
-\r
-!if defined(PROJECT_REQUIRES_TK) || "$(PROJECT)" == "tk"\r
-!if [echo TK_MAJOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TK_MINOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TK_PATCH_LEVEL = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]\r
-!endif\r
-\r
-!include versions.vc\r
-\r
-TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)\r
-TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)\r
-\r
-!if "$(PROJECT)" != "tk"\r
-!if $(TKINSTALL)\r
-_TKBINDIR       = $(_TKDIR)\bin\r
-WISH           = "$(_TKBINDIR)\wish$(TK_VERSION)$(SUFX).exe"\r
-!if !exist($(WISH)) && $(TCL_THREADS)\r
-WISH           = "$(_TKBINDIR)\wish$(TK_VERSION)t$(SUFX).exe"\r
-!endif\r
-TKSTUBLIB      = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"\r
-TK_LIBRARY     = $(_TKDIR)\lib\r
-TKIMPLIB       = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"\r
-TK_INCLUDES     = -I"$(_TKDIR)\include"\r
-!else\r
-_TKBINDIR       = $(_TKDIR)\win\$(BUILDDIRTOP)\r
-WISH           = "$(_TKBINDIR)\wish$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(WISH)) && $(TCL_THREADS)\r
-WISH           = "$(_TKBINDIR)\wish$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TKSTUBLIB      = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"\r
-TKIMPLIB       = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"\r
-TK_LIBRARY     = $(_TKDIR)\library\r
-TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"\r
-!endif\r
-!endif\r
-\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Setup the fully qualified OUT_DIR path as OUT_DIR_PATH\r
-#----------------------------------------------------------\r
-!if [echo OUT_DIR_PATH = \>> versions.vc] \\r
-    && [nmakehlp -Q "$(OUT_DIR)" >> versions.vc]\r
-!endif\r
-!include versions.vc\r
-\r
-#----------------------------------------------------------\r
-# Display stats being used.\r
-#----------------------------------------------------------\r
-\r
-!message *** Intermediate directory will be '$(TMP_DIR)'\r
-!message *** Output directory will be '$(OUT_DIR)'\r
-!message *** Suffix for binaries will be '$(SUFX)'\r
-!message *** Optional defines are '$(OPTDEFINES)'\r
-!message *** Compiler version $(VCVER). Target machine is $(MACHINE)\r
-!message *** Host architecture is $(NATIVE_ARCH)\r
-!message *** Compiler options '$(COMPILERFLAGS) $(OPTIMIZATIONS) $(DEBUGFLAGS) $(WARNINGS)'\r
-!message *** Link options '$(LINKERFLAGS)'\r
-\r
-!endif\r
similarity index 99%
rename from pkgs/tdbcodbc1.0.5/Makefile.in
rename to pkgs/tdbcodbc1.0.6/Makefile.in
index 1cf46cd..a0cbac2 100644 (file)
@@ -156,7 +156,7 @@ PKG_CFLAGS  = @PKG_CFLAGS@
 DEFS           = @DEFS@ $(PKG_CFLAGS)
 
 # Move pkgIndex.tcl to 'BINARIES' var if it is generated in the Makefile
-CONFIGURE_OUTPUTS = @CONFIGURE_OUTPUTS@
+CONFIG_CLEAN_FILES = Makefile pkgIndex.tcl tdbcConfig.sh
 CLEANFILES     = @CLEANFILES@
 
 CPPFLAGS       = @CPPFLAGS@
@@ -367,6 +367,7 @@ dist: dist-clean
 
        mkdir $(DIST_DIR)/win
        cp -p $(srcdir)/win/makefile.vc $(srcdir)/win/nmakehlp.c \
+               $(srcdir)/win/targets.vc $(srcdir)/win/rules-ext.vc \
                $(srcdir)/win/rules.vc $(DIST_DIR)/win/
 
        (cd $(DIST_ROOT); $(COMPRESS);)
@@ -401,7 +402,7 @@ clean:
 
 distclean: clean
        -rm -f *.tab.c
-       -rm -f $(CONFIGURE_OUTPUTS)
+       -rm -f $(CONFIG_CLEAN_FILES)
        -rm -f config.cache config.log config.status
 
 #========================================================================
similarity index 95%
rename from pkgs/tdbcodbc1.0.5/README
rename to pkgs/tdbcodbc1.0.6/README
index c5941da..7e4348f 100644 (file)
@@ -1,6 +1,6 @@
 README: tdbcodbc
 
-    This is the 1.0.5 source distribution of the bridge between Tcl
+    This is the 1.0.6 source distribution of the bridge between Tcl
     Database Connectivity (TDBC) and Open Database Connectivity
     (ODBC), a database-neutral API layer available on all Windows
     systems and many others.. TDBC and its drivers are available from
similarity index 99%
rename from pkgs/tdbcodbc1.0.5/configure
rename to pkgs/tdbcodbc1.0.6/configure
index 04b039e..e5b5dab 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for tdbcodbc 1.0.5.
+# Generated by GNU Autoconf 2.69 for tdbcodbc 1.0.6.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='tdbcodbc'
 PACKAGE_TARNAME='tdbcodbc'
-PACKAGE_VERSION='1.0.5'
-PACKAGE_STRING='tdbcodbc 1.0.5'
+PACKAGE_VERSION='1.0.6'
+PACKAGE_STRING='tdbcodbc 1.0.6'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -620,7 +620,6 @@ ac_includes_default="\
 
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
-CONFIGURE_OUTPUTS
 TCLSH_PROG
 VC_MANIFEST_EMBED_EXE
 VC_MANIFEST_EMBED_DLL
@@ -1309,7 +1308,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures tdbcodbc 1.0.5 to adapt to many kinds of systems.
+\`configure' configures tdbcodbc 1.0.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1370,7 +1369,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of tdbcodbc 1.0.5:";;
+     short | recursive ) echo "Configuration of tdbcodbc 1.0.6:";;
    esac
   cat <<\_ACEOF
 
@@ -1378,7 +1377,7 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-threads        build with threads
+  --enable-threads        build with threads (default: on)
   --enable-shared         build and link with shared libraries (default: on)
   --enable-stubs          build and link with stub libraries. Always true for
                           shared builds (default: on)
@@ -1473,7 +1472,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-tdbcodbc configure 1.0.5
+tdbcodbc configure 1.0.6
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2075,7 +2074,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by tdbcodbc $as_me 1.0.5, which was
+It was created by tdbcodbc $as_me 1.0.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -5684,16 +5683,6 @@ $as_echo "#define NO_ERRNO_H 1" >>confdefs.h
 fi
 
 
-    ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
-if test "x$ac_cv_header_float_h" = xyes; then :
-
-else
-
-$as_echo "#define NO_FLOAT_H 1" >>confdefs.h
-
-fi
-
-
     ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default"
 if test "x$ac_cv_header_values_h" = xyes; then :
 
@@ -7593,7 +7582,7 @@ fi
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5
 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; }
 if ${ac_cv_lib_network_inet_ntoa+:} false; then :
@@ -7820,7 +7809,7 @@ fi
            CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
 
            # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            if test $doRpath = yes; then :
 
@@ -7903,7 +7892,7 @@ fi
                SHLIB_CFLAGS="-fpic"
                ;;
            esac
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            if test $doRpath = yes; then :
 
@@ -7928,7 +7917,7 @@ fi
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            LDFLAGS="$LDFLAGS -export-dynamic"
            if test $doRpath = yes; then :
@@ -9544,9 +9533,6 @@ $as_echo "${TCLSH_PROG}" >&6; }
 # which require substituting th AC variables in.  Include these here.
 #--------------------------------------------------------------------
 
-CONFIGURE_OUTPUTS="Makefile pkgIndex.tcl config.cache config.log config.status"
-
-
 ac_config_files="$ac_config_files Makefile pkgIndex.tcl"
 
 cat >confcache <<\_ACEOF
@@ -10093,7 +10079,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by tdbcodbc $as_me 1.0.5, which was
+This file was extended by tdbcodbc $as_me 1.0.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -10146,7 +10132,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-tdbcodbc config.status 1.0.5
+tdbcodbc config.status 1.0.6
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
similarity index 98%
rename from pkgs/tdbcodbc1.0.5/configure.ac
rename to pkgs/tdbcodbc1.0.6/configure.ac
index 6c3bb53..2c809f8 100755 (executable)
@@ -11,7 +11,7 @@ dnl   to configure the system for the local environment.
 # so you can encode the package version directly into the source files.
 #-----------------------------------------------------------------------
 
-AC_INIT([tdbcodbc], [1.0.5])
+AC_INIT([tdbcodbc], [1.0.6])
 
 #--------------------------------------------------------------------
 # Call TEA_INIT as the first TEA_ macro to set up initial vars.
@@ -227,7 +227,4 @@ TEA_PROG_TCLSH
 # which require substituting th AC variables in.  Include these here.
 #--------------------------------------------------------------------
 
-CONFIGURE_OUTPUTS="Makefile pkgIndex.tcl config.cache config.log config.status"
-AC_SUBST(CONFIGURE_OUTPUTS)
-
 AC_OUTPUT([Makefile pkgIndex.tcl])
similarity index 97%
rename from pkgs/tdbcmysql1.0.5/tclconfig/tcl.m4
rename to pkgs/tdbcodbc1.0.6/tclconfig/tcl.m4
index 203a05d..e8234a2 100644 (file)
@@ -135,8 +135,9 @@ AC_DEFUN([TEA_PATH_TCLCONFIG], [
                for i in `ls -d ${libdir} 2>/dev/null` \
                        `ls -d ${exec_prefix}/lib 2>/dev/null` \
                        `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
                        `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/pkg/lib 2>/dev/null` \
                        `ls -d /usr/lib 2>/dev/null` \
                        `ls -d /usr/lib64 2>/dev/null` \
                        `ls -d /usr/lib/tcl8.6 2>/dev/null` \
@@ -349,6 +350,8 @@ AC_DEFUN([TEA_PATH_TKCONFIG], [
 #              TCL_BIN_DIR
 #              TCL_SRC_DIR
 #              TCL_LIB_FILE
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
 #------------------------------------------------------------------------
 
 AC_DEFUN([TEA_LOAD_TCLCONFIG], [
@@ -783,7 +786,7 @@ AC_DEFUN([TEA_ENABLE_SHARED], [
 AC_DEFUN([TEA_ENABLE_THREADS], [
     AC_ARG_ENABLE(threads,
        AC_HELP_STRING([--enable-threads],
-           [build with threads]),
+           [build with threads (default: on)]),
        [tcl_ok=$enableval], [tcl_ok=yes])
 
     if test "${enable_threads+set}" = set; then
@@ -1499,7 +1502,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
            ;;
        HP-UX-*.11.*)
@@ -1610,7 +1613,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
            CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
 
            # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            AS_IF([test $doRpath = yes], [
                CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
@@ -1649,37 +1652,21 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
        OpenBSD-*)
            arch=`arch -s`
            case "$arch" in
-           vax)
-               SHLIB_SUFFIX=""
-               SHARED_LIB_SUFFIX=""
-               LDFLAGS=""
+           alpha|sparc64)
+               SHLIB_CFLAGS="-fPIC"
                ;;
            *)
-               case "$arch" in
-               alpha|sparc64)
-                   SHLIB_CFLAGS="-fPIC"
-                   ;;
-               *)
-                   SHLIB_CFLAGS="-fpic"
-                   ;;
-               esac
-               SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-               SHLIB_SUFFIX=".so"
-               AS_IF([test $doRpath = yes], [
-                   CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
-               LDFLAGS="-Wl,-export-dynamic"
-               ;;
-           esac
-           case "$arch" in
-           vax)
-               CFLAGS_OPTIMIZE="-O1"
-               ;;
-           *)
-               CFLAGS_OPTIMIZE="-O2"
+               SHLIB_CFLAGS="-fpic"
                ;;
            esac
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
+           LDFLAGS="-Wl,-export-dynamic"
+           CFLAGS_OPTIMIZE="-O2"
            AS_IF([test "${TCL_THREADS}" = "1"], [
                # On OpenBSD:   Compile with -pthread
                #               Don't link with -lpthread
@@ -1693,7 +1680,7 @@ AC_DEFUN([TEA_CONFIG_CFLAGS], [
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            LDFLAGS="$LDFLAGS -export-dynamic"
            AS_IF([test $doRpath = yes], [
@@ -2378,7 +2365,6 @@ closedir(d);
 
     # TEA specific:
     AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have <errno.h>?])])
-    AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have <float.h>?])])
     AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have <values.h>?])])
     AC_CHECK_HEADER(limits.h,
        [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have <limits.h>?])],
@@ -4236,6 +4222,114 @@ AC_DEFUN([TEA_PATH_CELIB], [
        fi
     fi
 ])
+
+###
+# Tip 430 - ZipFS Modifications
+###
+#------------------------------------------------------------------------
+# SC_ZIPFS_SUPPORT
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
+#              TCL_ZIPFS_FLAG
+#              ZIP_PROG
+#------------------------------------------------------------------------
+
+#------------------------------------------------------------------------
+# SC_PROG_ZIP
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              ZIP_PROG
+#       ZIP_PROG_OPTIONS
+#       ZIP_PROG_VFSSEARCH
+#       ZIP_INSTALL_OBJS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ZIPFS_SUPPORT], [
+    AC_MSG_CHECKING([for zipfs support])
+    ZIP_PROG=""
+    ZIP_PROG_OPTIONS=""
+    ZIP_PROG_VFSSEARCH=""
+    INSTALL_MSGS=""
+    # If our native tclsh processes the "install" command line option
+    # we can use it to mint zip files
+    AS_IF([$TCLSH_PROG install],[
+      ZIP_PROG=${TCLSH_PROG}
+      ZIP_PROG_OPTIONS="install mkzip"
+      ZIP_PROG_VFSSEARCH="."
+      AC_MSG_RESULT([Can use Native Tclsh for Zip encoding])
+    ])
+    if test "x$ZIP_PROG" = "x" ; then
+        AC_CACHE_VAL(ac_cv_path_zip, [
+        search_path=`echo ${PATH} | sed -e 's/:/ /g'`
+        for dir in $search_path ; do
+            for j in `ls -r $dir/zip 2> /dev/null` \
+                `ls -r $dir/zip 2> /dev/null` ; do
+            if test x"$ac_cv_path_zip" = x ; then
+                if test -f "$j" ; then
+                ac_cv_path_zip=$j
+                break
+                fi
+            fi
+            done
+        done
+        ])
+        if test -f "$ac_cv_path_zip" ; then
+            ZIP_PROG="$ac_cv_path_zip "
+            AC_MSG_RESULT([$ZIP_PROG])
+            ZIP_PROG_OPTIONS="-rq"
+            ZIP_PROG_VFSSEARCH="."
+            AC_MSG_RESULT([Found INFO Zip in environment])
+            # Use standard arguments for zip
+        fi
+    fi
+    if test "x$ZIP_PROG" = "x" ; then
+           # It is not an error if an installed version of Zip can't be located.
+        ZIP_PROG=""
+        ZIP_PROG_OPTIONS=""
+        ZIP_PROG_VFSSEARCH=""
+        TCL_ZIPFS_SUPPORT=0
+        TCL_ZIPFS_FLAG=
+    else
+        # ZIPFS Support
+       eval "TCL_ZIP_FILE=\"${TCL_ZIP_FILE}\""
+       if test ${TCL_ZIP_FILE} = "" ; then
+          TCL_ZIPFS_SUPPORT=0
+          TCL_ZIPFS_FLAG=
+          INSTALL_LIBRARIES=install-libraries
+          INSTALL_MSGS=install-msgs
+       else
+           if test ${SHARED_BUILD} = 1 ; then
+              TCL_ZIPFS_SUPPORT=1
+              INSTALL_LIBRARIES=install-libraries-zipfs-shared
+           else
+              TCL_ZIPFS_SUPPORT=2
+              INSTALL_LIBRARIES=install-libraries-zipfs-static
+           fi
+          TCL_ZIPFS_FLAG=-DTCL_ZIPFS_SUPPORT
+       fi
+    fi
+
+    AC_SUBST(TCL_ZIP_FILE)
+    AC_SUBST(TCL_ZIPFS_SUPPORT)
+    AC_SUBST(TCL_ZIPFS_FLAG)
+    AC_SUBST(ZIP_PROG)
+    AC_SUBST(ZIP_PROG_OPTIONS)
+    AC_SUBST(ZIP_PROG_VFSSEARCH)
+    AC_SUBST(INSTALL_LIBRARIES)
+    AC_SUBST(INSTALL_MSGS)
+])
+
 # Local Variables:
 # mode: autoconf
 # End:
diff --git a/pkgs/tdbcodbc1.0.6/win/makefile.vc b/pkgs/tdbcodbc1.0.6/win/makefile.vc
new file mode 100644 (file)
index 0000000..6f0c19b
--- /dev/null
@@ -0,0 +1,159 @@
+#------------------------------------------------------------- -*- makefile -*-
+#
+# Makefile for TBDC ODBC interface
+#
+# Basic build, test and install
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir install
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir test
+#
+# For other build options (debug, static etc.)
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+# 
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+#------------------------------------------------------------------------------
+
+PROJECT = tdbcodbc
+# Tcl 8.6 etc. compile with /DUNICODE. TDBC pre-nmake reform compiled
+# without -DUNICODE. Keep that behaviour for now.
+USE_WIDECHAR_API  = 0
+
+!include "rules-ext.vc"
+
+# nmakehelp -V <file> <tag> will search the file for tag, skips until a
+#      number and returns all character until a character not in [0-9.ab]
+#      is read.
+!if [echo REM = This file is generated from Makefile.vc > versions.vc]
+!endif
+!if [echo TCL_VERSION_REQ = \>> versions.vc] \
+   && [nmakehlp -V ..\configure.ac TCL_VERSION_REQ >> versions.vc]
+!endif
+!include "versions.vc"
+
+PRJ_OBJS = \
+       $(TMP_DIR)\tdbcodbc.obj \
+       $(TMP_DIR)\odbcStubInit.obj
+
+
+# Uncomment the following line if you want to build and install stubs
+# PRJ_STUBOBJS = $(TMP_DIR)\odbcStubInit.obj
+
+PRJ_HEADERS = \
+       $(GENERICDIR)\fakesql.h \
+       $(GENERICDIR)\odbcStubs.h
+
+# Locate TDBC headers and libraries.
+# In principle, we don't need the TDBC source directory, and an installed
+# TDBC should suffice. But that needs additional machinery not implemented
+# yet.
+!if [echo TDBC_DIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tdbcInt.h >> nmakehlp.out]
+!error Could not locate TDBC source directory.
+!endif
+!include nmakehlp.out
+
+# Get the TDBC version from its configure.ac
+!if [echo TDBC_DOTVERSION = \> versions.vc] \
+   && [nmakehlp -V "$(TDBC_DIR)\configure.ac" tdbc >> versions.vc]
+!error Could not retrieve TDBC version.
+!endif
+!include versions.vc
+
+TDBC_VERSION     = $(TDBC_DOTVERSION:.=)
+TDBC_GENERIC_DIR = $(TDBC_DIR)\generic
+TDBCSTUBLIBNAME         = tdbcstub$(TDBC_VERSION).lib
+TDBCSTUBLIB     = $(TDBC_DIR)\win\$(BUILDDIRTOP)\$(TDBCSTUBLIBNAME)
+TDBC_LIB_FILE   = tdbc$(TDBC_VERSION).dll
+TDBC_BIN_DIR     = $(TDBC_DIR)/win/$(BUILDDIRTOP)
+
+PRJ_INCLUDES   = -I"$(TDBC_GENERIC_DIR)"
+PRJ_DEFINES    = -Dinline=__inline
+
+!if !$(STATIC_BUILD)
+PRJ_LIBS  = $(TDBCSTUBLIB)
+!endif
+
+# Disable standard tes target because we have a custom one.
+DISABLE_TARGET_test = 1
+!include "$(_RULESDIR)\targets.vc"
+
+# Install needs some extra default actions.
+install: default-install-docs-n
+
+# The TIP 477 generation of pkgIndex.tcl from pkgIndex.tcl.in does not include
+# all replacements below so define our own it.
+pkgindex:   $(OUT_DIR)\pkgIndex.tcl
+$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in
+       @nmakehlp -s << $** > $@
+@PACKAGE_NAME@        $(PROJECT)
+@PACKAGE_VERSION@     $(DOTVERSION)
+@TCL_VERSION_REQ@     $(TCL_VERSION_REQ)
+@PKG_LIB_FILE@        $(PRJLIBNAME)
+<<
+
+test: test-jet test-sqlserver test-sqlite
+
+test: setup $(PROJECT)
+
+test-jet: setup $(PROJECT)
+       @echo testing tdbcodbc against Jet
+       @set TDBCODBC_TYPE=jet
+# the following is identical for all 3 tests
+        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
+        @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)
+       @set TDBC_LIBRARY=$(LIBDIR:\=/)
+       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)
+!if $(TCLINSTALL)
+        @set PATH=$(_TCLDIR)\bin;$(PATH)
+       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS)
+!else
+        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
+       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) \
+               -load "package ifneeded tdbc::odbc $(DOTVERSION) \
+                       {source {$(LIBDIR:\=/)/tdbcodbc.tcl};load {$(PRJLIB:\=/)} $(PROJECT)};\
+               package ifneeded tdbc $(TDBC_DOTVERSION) \
+                       {source {$(TDBC_BIN_DIR:\=/)/tdbc.tcl};load {$(TDBC_BIN_DIR:\=/)/$(TDBC_LIB_FILE)} tdbc}"
+!endif
+
+test-sqlserver: setup $(PROJECT)
+       @echo testing tdbcodbc against SQL Server
+       @set TDBCODBC_TYPE=sqlserver
+# the following is identical for all 3 tests
+        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
+        @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)
+       @set TDBC_LIBRARY=$(LIBDIR:\=/)
+       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)
+!if $(TCLINSTALL)
+        @set PATH=$(_TCLDIR)\bin;$(PATH)
+       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS)
+!else
+        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
+       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) \
+               -load "package ifneeded tdbc::odbc $(DOTVERSION) \
+                       {source {$(LIBDIR:\=/)/tdbcodbc.tcl};load {$(PRJLIB:\=/)} $(PROJECT)};\
+               package ifneeded tdbc $(TDBC_DOTVERSION) \
+                       {source {$(TDBC_BIN_DIR:\=/)/tdbc.tcl};load {$(TDBC_BIN_DIR:\=/)/$(TDBC_LIB_FILE)} tdbc}"
+!endif
+
+test-sqlite: setup $(PROJECT)
+       @echo testing tdbcodbc against SQLite
+       @set TDBCODBC_TYPE=sqlite
+# the following is identical for all 3 tests
+        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
+        @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)
+       @set TDBC_LIBRARY=$(LIBDIR:\=/)
+       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)
+!if $(TCLINSTALL)
+        @set PATH=$(_TCLDIR)\bin;$(PATH)
+       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS)
+!else
+        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
+       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) \
+               -load "package ifneeded tdbc::odbc $(DOTVERSION) \
+                       {source {$(LIBDIR:\=/)/tdbcodbc.tcl};load {$(PRJLIB:\=/)} $(PROJECT)};\
+               package ifneeded tdbc $(TDBC_DOTVERSION) \
+                       {source {$(TDBC_BIN_DIR:\=/)/tdbc.tcl};load {$(TDBC_BIN_DIR:\=/)/$(TDBC_LIB_FILE)} tdbc}"
+!endif
diff --git a/pkgs/tdbcodbc1.0.6/win/nmakehlp.c b/pkgs/tdbcodbc1.0.6/win/nmakehlp.c
new file mode 100644 (file)
index 0000000..025bb99
--- /dev/null
@@ -0,0 +1,814 @@
+/*
+ * ----------------------------------------------------------------------------
+ * nmakehlp.c --
+ *
+ *     This is used to fix limitations within nmake and the environment.
+ *
+ * Copyright (c) 2002 by David Gravereaux.
+ * Copyright (c) 2006 by Pat Thoyts
+ *
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ * ----------------------------------------------------------------------------
+ */
+
+#define _CRT_SECURE_NO_DEPRECATE
+#include <windows.h>
+#define NO_SHLWAPI_GDI
+#define NO_SHLWAPI_STREAM
+#define NO_SHLWAPI_REG
+#include <shlwapi.h>
+#pragma comment (lib, "user32.lib")
+#pragma comment (lib, "kernel32.lib")
+#pragma comment (lib, "shlwapi.lib")
+#include <stdio.h>
+#include <math.h>
+
+/*
+ * This library is required for x64 builds with _some_ versions of MSVC
+ */
+#if defined(_M_IA64) || defined(_M_AMD64)
+#if _MSC_VER >= 1400 && _MSC_VER < 1500
+#pragma comment(lib, "bufferoverflowU")
+#endif
+#endif
+
+/* ISO hack for dumb VC++ */
+#ifdef _MSC_VER
+#define   snprintf     _snprintf
+#endif
+
+
+/* protos */
+
+static int CheckForCompilerFeature(const char *option);
+static int CheckForLinkerFeature(const char **options, int count);
+static int IsIn(const char *string, const char *substring);
+static int SubstituteFile(const char *substs, const char *filename);
+static int QualifyPath(const char *path);
+static int LocateDependency(const char *keyfile);
+static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
+static DWORD WINAPI ReadFromPipe(LPVOID args);
+
+/* globals */
+
+#define CHUNK  25
+#define STATICBUFFERSIZE    1000
+typedef struct {
+    HANDLE pipe;
+    char buffer[STATICBUFFERSIZE];
+} pipeinfo;
+
+pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'};
+pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'};
+\f
+/*
+ * exitcodes: 0 == no, 1 == yes, 2 == error
+ */
+
+int
+main(
+    int argc,
+    char *argv[])
+{
+    char msg[300];
+    DWORD dwWritten;
+    int chars;
+    char *s;
+
+    /*
+     * Make sure children (cl.exe and link.exe) are kept quiet.
+     */
+
+    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
+
+    /*
+     * Make sure the compiler and linker aren't effected by the outside world.
+     */
+
+    SetEnvironmentVariable("CL", "");
+    SetEnvironmentVariable("LINK", "");
+
+    if (argc > 1 && *argv[1] == '-') {
+       switch (*(argv[1]+1)) {
+       case 'c':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -c <compiler option>\n"
+                       "Tests for whether cl.exe supports an option\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return CheckForCompilerFeature(argv[2]);
+       case 'l':
+           if (argc < 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -l <linker option> ?<mandatory option> ...?\n"
+                       "Tests for whether link.exe supports an option\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return CheckForLinkerFeature(&argv[2], argc-2);
+       case 'f':
+           if (argc == 2) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -f <string> <substring>\n"
+                       "Find a substring within another\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           } else if (argc == 3) {
+               /*
+                * If the string is blank, there is no match.
+                */
+
+               return 0;
+           } else {
+               return IsIn(argv[2], argv[3]);
+           }
+       case 's':
+           if (argc == 2) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -s <substitutions file> <file>\n"
+                       "Perform a set of string map type substutitions on a file\n"
+                       "exitcodes: 0\n",
+                       argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return SubstituteFile(argv[2], argv[3]);
+       case 'V':
+           if (argc != 4) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -V filename matchstring\n"
+                   "Extract a version from a file:\n"
+                   "eg: pkgIndex.tcl \"package ifneeded http\"",
+                   argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 0;
+           }
+           s = GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0');
+           if (s && *s) {
+               printf("%s\n", s);
+               return 0;
+           } else
+               return 1; /* Version not found. Return non-0 exit code */
+
+       case 'Q':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -Q path\n"
+                   "Emit the fully qualified path\n"
+                   "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return QualifyPath(argv[2]);
+
+       case 'L':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -L keypath\n"
+                   "Emit the fully qualified path of directory containing keypath\n"
+                   "exitcodes: 0 == success, 1 == not found, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return LocateDependency(argv[2]);
+       }
+    }
+    chars = snprintf(msg, sizeof(msg) - 1,
+           "usage: %s -c|-f|-l|-Q|-s|-V ...\n"
+           "This is a little helper app to equalize shell differences between WinNT and\n"
+           "Win9x and get nmake.exe to accomplish its job.\n",
+           argv[0]);
+    WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
+    return 2;
+}
+\f
+static int
+CheckForCompilerFeature(
+    const char *option)
+{
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;
+    SECURITY_ATTRIBUTES sa;
+    DWORD threadID;
+    char msg[300];
+    BOOL ok;
+    HANDLE hProcess, h, pipeThreads[2];
+    char cmdline[100];
+
+    hProcess = GetCurrentProcess();
+
+    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
+    ZeroMemory(&si, sizeof(STARTUPINFO));
+    si.cb = sizeof(STARTUPINFO);
+    si.dwFlags   = STARTF_USESTDHANDLES;
+    si.hStdInput = INVALID_HANDLE_VALUE;
+
+    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
+    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+    sa.lpSecurityDescriptor = NULL;
+    sa.bInheritHandle = FALSE;
+
+    /*
+     * Create a non-inheritible pipe.
+     */
+
+    CreatePipe(&Out.pipe, &h, &sa, 0);
+
+    /*
+     * Dupe the write side, make it inheritible, and close the original.
+     */
+
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Same as above, but for the error side.
+     */
+
+    CreatePipe(&Err.pipe, &h, &sa, 0);
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Base command line.
+     */
+
+    lstrcpy(cmdline, "cl.exe -nologo -c -TC -Zs -X -Fp.\\_junk.pch ");
+
+    /*
+     * Append our option for testing
+     */
+
+    lstrcat(cmdline, option);
+
+    /*
+     * Filename to compile, which exists, but is nothing and empty.
+     */
+
+    lstrcat(cmdline, " .\\nul");
+
+    ok = CreateProcess(
+           NULL,           /* Module name. */
+           cmdline,        /* Command line. */
+           NULL,           /* Process handle not inheritable. */
+           NULL,           /* Thread handle not inheritable. */
+           TRUE,           /* yes, inherit handles. */
+           DETACHED_PROCESS, /* No console for you. */
+           NULL,           /* Use parent's environment block. */
+           NULL,           /* Use parent's starting directory. */
+           &si,            /* Pointer to STARTUPINFO structure. */
+           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
+
+    if (!ok) {
+       DWORD err = GetLastError();
+       int chars = snprintf(msg, sizeof(msg) - 1,
+               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
+
+       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
+               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
+               (300-chars), 0);
+       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
+       return 2;
+    }
+
+    /*
+     * Close our references to the write handles that have now been inherited.
+     */
+
+    CloseHandle(si.hStdOutput);
+    CloseHandle(si.hStdError);
+
+    WaitForInputIdle(pi.hProcess, 5000);
+    CloseHandle(pi.hThread);
+
+    /*
+     * Start the pipe reader threads.
+     */
+
+    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
+    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
+
+    /*
+     * Block waiting for the process to end.
+     */
+
+    WaitForSingleObject(pi.hProcess, INFINITE);
+    CloseHandle(pi.hProcess);
+
+    /*
+     * Wait for our pipe to get done reading, should it be a little slow.
+     */
+
+    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
+    CloseHandle(pipeThreads[0]);
+    CloseHandle(pipeThreads[1]);
+
+    /*
+     * Look for the commandline warning code in both streams.
+     *  - in MSVC 6 & 7 we get D4002, in MSVC 8 we get D9002.
+     */
+
+    return !(strstr(Out.buffer, "D4002") != NULL
+             || strstr(Err.buffer, "D4002") != NULL
+             || strstr(Out.buffer, "D9002") != NULL
+             || strstr(Err.buffer, "D9002") != NULL
+             || strstr(Out.buffer, "D2021") != NULL
+             || strstr(Err.buffer, "D2021") != NULL);
+}
+\f
+static int
+CheckForLinkerFeature(
+    const char **options,
+    int count)
+{
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;
+    SECURITY_ATTRIBUTES sa;
+    DWORD threadID;
+    char msg[300];
+    BOOL ok;
+    HANDLE hProcess, h, pipeThreads[2];
+    int i;
+    char cmdline[255];
+
+    hProcess = GetCurrentProcess();
+
+    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
+    ZeroMemory(&si, sizeof(STARTUPINFO));
+    si.cb = sizeof(STARTUPINFO);
+    si.dwFlags   = STARTF_USESTDHANDLES;
+    si.hStdInput = INVALID_HANDLE_VALUE;
+
+    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
+    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+    sa.lpSecurityDescriptor = NULL;
+    sa.bInheritHandle = TRUE;
+
+    /*
+     * Create a non-inheritible pipe.
+     */
+
+    CreatePipe(&Out.pipe, &h, &sa, 0);
+
+    /*
+     * Dupe the write side, make it inheritible, and close the original.
+     */
+
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Same as above, but for the error side.
+     */
+
+    CreatePipe(&Err.pipe, &h, &sa, 0);
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Base command line.
+     */
+
+    lstrcpy(cmdline, "link.exe -nologo ");
+
+    /*
+     * Append our option for testing.
+     */
+
+    for (i = 0; i < count; i++) {
+       lstrcat(cmdline, " \"");
+       lstrcat(cmdline, options[i]);
+       lstrcat(cmdline, "\"");
+    }
+
+    ok = CreateProcess(
+           NULL,           /* Module name. */
+           cmdline,        /* Command line. */
+           NULL,           /* Process handle not inheritable. */
+           NULL,           /* Thread handle not inheritable. */
+           TRUE,           /* yes, inherit handles. */
+           DETACHED_PROCESS, /* No console for you. */
+           NULL,           /* Use parent's environment block. */
+           NULL,           /* Use parent's starting directory. */
+           &si,            /* Pointer to STARTUPINFO structure. */
+           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
+
+    if (!ok) {
+       DWORD err = GetLastError();
+       int chars = snprintf(msg, sizeof(msg) - 1,
+               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
+
+       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
+               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
+               (300-chars), 0);
+       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
+       return 2;
+    }
+
+    /*
+     * Close our references to the write handles that have now been inherited.
+     */
+
+    CloseHandle(si.hStdOutput);
+    CloseHandle(si.hStdError);
+
+    WaitForInputIdle(pi.hProcess, 5000);
+    CloseHandle(pi.hThread);
+
+    /*
+     * Start the pipe reader threads.
+     */
+
+    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
+    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
+
+    /*
+     * Block waiting for the process to end.
+     */
+
+    WaitForSingleObject(pi.hProcess, INFINITE);
+    CloseHandle(pi.hProcess);
+
+    /*
+     * Wait for our pipe to get done reading, should it be a little slow.
+     */
+
+    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
+    CloseHandle(pipeThreads[0]);
+    CloseHandle(pipeThreads[1]);
+
+    /*
+     * Look for the commandline warning code in the stderr stream.
+     */
+
+    return !(strstr(Out.buffer, "LNK1117") != NULL ||
+           strstr(Err.buffer, "LNK1117") != NULL ||
+           strstr(Out.buffer, "LNK4044") != NULL ||
+           strstr(Err.buffer, "LNK4044") != NULL ||
+           strstr(Out.buffer, "LNK4224") != NULL ||
+           strstr(Err.buffer, "LNK4224") != NULL);
+}
+\f
+static DWORD WINAPI
+ReadFromPipe(
+    LPVOID args)
+{
+    pipeinfo *pi = (pipeinfo *) args;
+    char *lastBuf = pi->buffer;
+    DWORD dwRead;
+    BOOL ok;
+
+  again:
+    if (lastBuf - pi->buffer + CHUNK > STATICBUFFERSIZE) {
+       CloseHandle(pi->pipe);
+       return (DWORD)-1;
+    }
+    ok = ReadFile(pi->pipe, lastBuf, CHUNK, &dwRead, 0L);
+    if (!ok || dwRead == 0) {
+       CloseHandle(pi->pipe);
+       return 0;
+    }
+    lastBuf += dwRead;
+    goto again;
+
+    return 0;  /* makes the compiler happy */
+}
+\f
+static int
+IsIn(
+    const char *string,
+    const char *substring)
+{
+    return (strstr(string, substring) != NULL);
+}
+\f
+/*
+ * GetVersionFromFile --
+ *     Looks for a match string in a file and then returns the version
+ *     following the match where a version is anything acceptable to
+ *     package provide or package ifneeded.
+ */
+
+static const char *
+GetVersionFromFile(
+    const char *filename,
+    const char *match,
+    int numdots)
+{
+    size_t cbBuffer = 100;
+    static char szBuffer[100];
+    char *szResult = NULL;
+    FILE *fp = fopen(filename, "rt");
+
+    if (fp != NULL) {
+       /*
+        * Read data until we see our match string.
+        */
+
+       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
+           LPSTR p, q;
+
+           p = strstr(szBuffer, match);
+           if (p != NULL) {
+               /*
+                * Skip to first digit after the match.
+                */
+
+               p += strlen(match);
+               while (*p && !isdigit(*p)) {
+                   ++p;
+               }
+
+               /*
+                * Find ending whitespace.
+                */
+
+               q = p;
+               while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q)
+                           && (!strchr("ab", q[-1])) || --numdots))) {
+                   ++q;
+               }
+
+               memcpy(szBuffer, p, q - p);
+               szBuffer[q-p] = 0;
+               szResult = szBuffer;
+               break;
+           }
+       }
+       fclose(fp);
+    }
+    return szResult;
+}
+\f
+/*
+ * List helpers for the SubstituteFile function
+ */
+
+typedef struct list_item_t {
+    struct list_item_t *nextPtr;
+    char * key;
+    char * value;
+} list_item_t;
+
+/* insert a list item into the list (list may be null) */
+static list_item_t *
+list_insert(list_item_t **listPtrPtr, const char *key, const char *value)
+{
+    list_item_t *itemPtr = malloc(sizeof(list_item_t));
+    if (itemPtr) {
+       itemPtr->key = strdup(key);
+       itemPtr->value = strdup(value);
+       itemPtr->nextPtr = NULL;
+
+       while(*listPtrPtr) {
+           listPtrPtr = &(*listPtrPtr)->nextPtr;
+       }
+       *listPtrPtr = itemPtr;
+    }
+    return itemPtr;
+}
+
+static void
+list_free(list_item_t **listPtrPtr)
+{
+    list_item_t *tmpPtr, *listPtr = *listPtrPtr;
+    while (listPtr) {
+       tmpPtr = listPtr;
+       listPtr = listPtr->nextPtr;
+       free(tmpPtr->key);
+       free(tmpPtr->value);
+       free(tmpPtr);
+    }
+}
+\f
+/*
+ * SubstituteFile --
+ *     As windows doesn't provide anything useful like sed and it's unreliable
+ *     to use the tclsh you are building against (consider x-platform builds -
+ *     eg compiling AMD64 target from IX86) we provide a simple substitution
+ *     option here to handle autoconf style substitutions.
+ *     The substitution file is whitespace and line delimited. The file should
+ *     consist of lines matching the regular expression:
+ *       \s*\S+\s+\S*$
+ *
+ *     Usage is something like:
+ *       nmakehlp -S << $** > $@
+ *        @PACKAGE_NAME@ $(PACKAGE_NAME)
+ *        @PACKAGE_VERSION@ $(PACKAGE_VERSION)
+ *        <<
+ */
+
+static int
+SubstituteFile(
+    const char *substitutions,
+    const char *filename)
+{
+    size_t cbBuffer = 1024;
+    static char szBuffer[1024], szCopy[1024];
+    char *szResult = NULL;
+    list_item_t *substPtr = NULL;
+    FILE *fp, *sp;
+
+    fp = fopen(filename, "rt");
+    if (fp != NULL) {
+
+       /*
+        * Build a list of substutitions from the first filename
+        */
+
+       sp = fopen(substitutions, "rt");
+       if (sp != NULL) {
+           while (fgets(szBuffer, cbBuffer, sp) != NULL) {
+               unsigned char *ks, *ke, *vs, *ve;
+               ks = (unsigned char*)szBuffer;
+               while (ks && *ks && isspace(*ks)) ++ks;
+               ke = ks;
+               while (ke && *ke && !isspace(*ke)) ++ke;
+               vs = ke;
+               while (vs && *vs && isspace(*vs)) ++vs;
+               ve = vs;
+               while (ve && *ve && !(*ve == '\r' || *ve == '\n')) ++ve;
+               *ke = 0, *ve = 0;
+               list_insert(&substPtr, (char*)ks, (char*)vs);
+           }
+           fclose(sp);
+       }
+
+       /* debug: dump the list */
+#ifdef _DEBUG
+       {
+           int n = 0;
+           list_item_t *p = NULL;
+           for (p = substPtr; p != NULL; p = p->nextPtr, ++n) {
+               fprintf(stderr, "% 3d '%s' => '%s'\n", n, p->key, p->value);
+           }
+       }
+#endif
+
+       /*
+        * Run the substitutions over each line of the input
+        */
+
+       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
+           list_item_t *p = NULL;
+           for (p = substPtr; p != NULL; p = p->nextPtr) {
+               char *m = strstr(szBuffer, p->key);
+               if (m) {
+                   char *cp, *op, *sp;
+                   cp = szCopy;
+                   op = szBuffer;
+                   while (op != m) *cp++ = *op++;
+                   sp = p->value;
+                   while (sp && *sp) *cp++ = *sp++;
+                   op += strlen(p->key);
+                   while (*op) *cp++ = *op++;
+                   *cp = 0;
+                   memcpy(szBuffer, szCopy, sizeof(szCopy));
+               }
+           }
+           printf(szBuffer);
+       }
+
+       list_free(&substPtr);
+    }
+    fclose(fp);
+    return 0;
+}
+\f
+/*
+ * QualifyPath --
+ *
+ *     This composes the current working directory with a provided path
+ *     and returns the fully qualified and normalized path.
+ *     Mostly needed to setup paths for testing.
+ */
+
+static int
+QualifyPath(
+    const char *szPath)
+{
+    char szCwd[MAX_PATH + 1];
+    char szTmp[MAX_PATH + 1];
+    char *p;
+    GetCurrentDirectory(MAX_PATH, szCwd);
+    while ((p = strchr(szPath, '/')) && *p)
+       *p = '\\';
+    PathCombine(szTmp, szCwd, szPath);
+    PathCanonicalize(szCwd, szTmp);
+    printf("%s\n", szCwd);
+    return 0;
+}
+
+/*
+ * Implements LocateDependency for a single directory. See that command
+ * for an explanation.
+ * Returns 0 if found after printing the directory.
+ * Returns 1 if not found but no errors.
+ * Returns 2 on any kind of error
+ * Basically, these are used as exit codes for the process.
+ */
+static int LocateDependencyHelper(const char *dir, const char *keypath)
+{
+    HANDLE hSearch;
+    char path[MAX_PATH+1];
+    int dirlen, keylen, ret;
+    WIN32_FIND_DATA finfo;
+
+    if (dir == NULL || keypath == NULL)
+       return 2; /* Have no real error reporting mechanism into nmake */
+    dirlen = strlen(dir);
+    if ((dirlen + 3) > sizeof(path))
+       return 2;
+    strncpy(path, dir, dirlen);
+    strncpy(path+dirlen, "\\*", 3);    /* Including terminating \0 */
+    keylen = strlen(keypath);
+
+#if 0 /* This function is not available in Visual C++ 6 */
+    /*
+     * Use numerics 0 -> FindExInfoStandard,
+     * 1 -> FindExSearchLimitToDirectories, 
+     * as these are not defined in Visual C++ 6
+     */
+    hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0);
+#else
+    hSearch = FindFirstFile(path, &finfo);
+#endif
+    if (hSearch == INVALID_HANDLE_VALUE)
+       return 1; /* Not found */
+
+    /* Loop through all subdirs checking if the keypath is under there */
+    ret = 1; /* Assume not found */
+    do {
+       int sublen;
+       /*
+        * We need to check it is a directory despite the 
+        * FindExSearchLimitToDirectories in the above call. See SDK docs
+        */
+       if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
+           continue;
+       sublen = strlen(finfo.cFileName);
+       if ((dirlen+1+sublen+1+keylen+1) > sizeof(path))
+           continue;           /* Path does not fit, assume not matched */
+       strncpy(path+dirlen+1, finfo.cFileName, sublen);
+       path[dirlen+1+sublen] = '\\';
+       strncpy(path+dirlen+1+sublen+1, keypath, keylen+1);
+       if (PathFileExists(path)) {
+           /* Found a match, print to stdout */
+           path[dirlen+1+sublen] = '\0';
+           QualifyPath(path);
+           ret = 0;
+           break;
+       }
+    } while (FindNextFile(hSearch, &finfo));
+    FindClose(hSearch);
+    return ret;
+}
+
+/*
+ * LocateDependency --
+ *
+ *     Locates a dependency for a package.
+ *        keypath - a relative path within the package directory
+ *          that is used to confirm it is the correct directory.
+ *     The search path for the package directory is currently only
+ *      the parent and grandparent of the current working directory.
+ *      If found, the command prints 
+ *         name_DIRPATH=<full path of located directory>
+ *      and returns 0. If not found, does not print anything and returns 1.
+ */
+static int LocateDependency(const char *keypath)
+{
+    int i, ret;
+    static char *paths[] = {"..", "..\\..", "..\\..\\.."};
+    
+    for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) {
+       ret = LocateDependencyHelper(paths[i], keypath);
+       if (ret == 0)
+           return ret;
+    }
+    return ret;
+}
+
+
+/*
+ * Local variables:
+ *   mode: c
+ *   c-basic-offset: 4
+ *   fill-column: 78
+ *   indent-tabs-mode: t
+ *   tab-width: 8
+ * End:
+ */
diff --git a/pkgs/tdbcodbc1.0.6/win/rules-ext.vc b/pkgs/tdbcodbc1.0.6/win/rules-ext.vc
new file mode 100644 (file)
index 0000000..ab86876
--- /dev/null
@@ -0,0 +1,118 @@
+# This file should only be included in makefiles for Tcl extensions,
+# NOT in the makefile for Tcl itself.
+
+!ifndef _RULES_EXT_VC
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+!if "$(PROJECT)" == "tcl"
+!error The rules-ext.vc file is not intended for Tcl itself.
+!endif
+
+# We extract version numbers using the nmakehlp program. For now use
+# the local copy of nmakehlp. Once we locate Tcl, we will use that
+# one if it is newer.
+!if [$(CC) -nologo "nmakehlp.c" -link -subsystem:console > nul]
+!endif
+
+# First locate the Tcl directory that we are working with.
+!ifdef TCLDIR
+
+_RULESDIR = $(TCLDIR:/=\)
+
+!else
+
+# If an installation path is specified, that is also the Tcl directory.
+# Also Tk never builds against an installed Tcl, it needs Tcl sources
+!if defined(INSTALLDIR) && "$(PROJECT)" != "tk"
+_RULESDIR=$(INSTALLDIR:/=\)
+!else
+# Locate Tcl sources
+!if [echo _RULESDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+_RULESDIR = ..\..\tcl
+!else
+!include nmakehlp.out
+!endif
+
+!endif # defined(INSTALLDIR)....
+
+!endif # ifndef TCLDIR
+
+# Now look for the targets.vc file under the Tcl root. Note we check this
+# file and not rules.vc because the latter also exists on older systems.
+!if exist("$(_RULESDIR)\lib\nmake\targets.vc") # Building against installed Tcl
+_RULESDIR = $(_RULESDIR)\lib\nmake
+!elseif exist("$(_RULESDIR)\win\targets.vc")   # Building against Tcl sources
+_RULESDIR = $(_RULESDIR)\win
+!else
+# If we have not located Tcl's targets file, most likely we are compiling
+# against an older version of Tcl and so must use our own support files.
+_RULESDIR = .
+!endif
+
+!if "$(_RULESDIR)" != "."
+# Potentially using Tcl's support files. If this extension has its own
+# nmake support files, need to compare the versions and pick newer.
+
+!if exist("rules.vc") # The extension has its own copy
+
+!if [echo TCL_RULES_MAJOR = \> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo TCL_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+
+!if [echo OUR_RULES_MAJOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo OUR_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+!include versions.vc
+# We have a newer version of the support files, use them
+!if ($(TCL_RULES_MAJOR) != $(OUR_RULES_MAJOR)) || ($(TCL_RULES_MINOR) < $(OUR_RULES_MINOR))
+_RULESDIR = .
+!endif
+
+!endif # if exist("rules.vc")
+
+!endif # if $(_RULESDIR) != "."
+
+# Let rules.vc know what copy of nmakehlp.c to use.
+NMAKEHLPC = $(_RULESDIR)\nmakehlp.c
+
+# Get rid of our internal defines before calling rules.vc
+!undef TCL_RULES_MAJOR
+!undef TCL_RULES_MINOR
+!undef OUR_RULES_MAJOR
+!undef OUR_RULES_MINOR
+
+!if exist("$(_RULESDIR)\rules.vc")
+!message *** Using $(_RULESDIR)\rules.vc
+!include "$(_RULESDIR)\rules.vc"
+!else
+!error *** Could not locate rules.vc in $(_RULESDIR)
+!endif
+
+!endif # _RULES_EXT_VC
\ No newline at end of file
diff --git a/pkgs/tdbcodbc1.0.6/win/rules.vc b/pkgs/tdbcodbc1.0.6/win/rules.vc
new file mode 100644 (file)
index 0000000..bbb412d
--- /dev/null
@@ -0,0 +1,1723 @@
+#------------------------------------------------------------- -*- makefile -*-
+# rules.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file does all the hard work in terms of parsing build options,
+# compiler switches, defining common targets and macros. The Tcl makefile
+# directly includes this. Extensions include it via "rules-ext.vc".
+#
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# Copyright (c) 2001-2003 David Gravereaux.
+# Copyright (c) 2003-2008 Patrick Thoyts
+# Copyright (c) 2017      Ashok P. Nadkarni
+#------------------------------------------------------------------------------
+
+!ifndef _RULES_VC
+_RULES_VC = 1
+
+# The following macros define the version of the rules.vc nmake build system
+# For modifications that are not backward-compatible, you *must* change
+# the major version.
+RULES_VERSION_MAJOR = 1
+RULES_VERSION_MINOR = 0
+
+# The PROJECT macro must be defined by parent makefile.
+!if "$(PROJECT)" == ""
+!error *** Error: Macro PROJECT not defined! Please define it before including rules.vc
+!endif
+
+!if "$(PRJ_PACKAGE_TCLNAME)" == ""
+PRJ_PACKAGE_TCLNAME = $(PROJECT)
+!endif
+
+# Also special case Tcl and Tk to save some typing later
+DOING_TCL = 0
+DOING_TK  = 0
+!if "$(PROJECT)" == "tcl"
+DOING_TCL = 1
+!elseif "$(PROJECT)" == "tk"
+DOING_TK = 1
+!endif
+
+!ifndef NEED_TK
+# Backwards compatibility
+!ifdef PROJECT_REQUIRES_TK
+NEED_TK = $(PROJECT_REQUIRES_TK)
+!else
+NEED_TK = 0
+!endif
+!endif
+
+!ifndef NEED_TCL_SOURCE
+NEED_TCL_SOURCE = 0
+!endif
+
+!ifdef NEED_TK_SOURCE
+!if $(NEED_TK_SOURCE)
+NEED_TK = 1
+!endif
+!else
+NEED_TK_SOURCE = 0
+!endif
+
+################################################################
+# Nmake is a pretty weak environment in syntax and capabilities
+# so this file is necessarily verbose. It's broken down into
+# the following parts.
+#
+# 0. Sanity check that compiler environment is set up and initialize
+#    any built-in settings from the parent makefile
+# 1. First define the external tools used for compiling, copying etc.
+#    as this is independent of everything else.
+# 2. Figure out our build structure in terms of the directory, whether
+#    we are building Tcl or an extension, etc.
+# 3. Determine the compiler and linker versions
+# 4. Build the nmakehlp helper application
+# 5. Determine the supported compiler options and features
+# 6. Parse the OPTS macro value for user-specified build configuration
+# 7. Parse the STATS macro value for statistics instrumentation
+# 8. Parse the CHECKS macro for additional compilation checks
+# 9. Extract Tcl, and possibly Tk, version numbers from the headers
+# 10. Based on this selected configuration, construct the output
+#     directory and file paths
+# 11. Construct the paths where the package is to be installed
+# 12. Set up the actual options passed to compiler and linker based
+#     on the information gathered above.
+# 13. Define some standard build targets and implicit rules. These may
+#     be optionally disabled by the parent makefile.
+# 14. (For extensions only.) Compare the configuration of the target
+#     Tcl and the extensions and warn against discrepancies.
+#
+# One final note about the macro names used. They are as they are
+# for historical reasons. We would like legacy extensions to
+# continue to work with this make include file so be wary of
+# changing them for consistency or clarity.
+
+# 0. Sanity check compiler environment
+
+# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
+# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
+
+!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)
+MSG = ^
+Visual C++ compiler environment not initialized.
+!error $(MSG)
+!endif
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+
+################################################################
+# 1. Define external programs being used
+
+#----------------------------------------------------------
+# Set the proper copy method to avoid overwrite questions
+# to the user when copying files and selecting the right
+# "delete all" method.
+#----------------------------------------------------------
+
+RMDIR  = rmdir /S /Q
+CPY    = xcopy /i /y >NUL
+CPYDIR  = xcopy /e /i /y >NUL
+COPY   = copy /y >NUL
+MKDIR   = mkdir
+
+######################################################################
+# 2. Figure out our build environment in terms of what we're building.
+#
+# (a) Tcl itself
+# (b) Tk
+# (c) a Tcl extension using libraries/includes from an *installed* Tcl
+# (d) a Tcl extension using libraries/includes from Tcl source directory
+#
+# This last is needed because some extensions still need
+# some Tcl interfaces that are not publicly exposed.
+#
+# The fragment will set the following macros:
+# ROOT - root of this module sources
+# COMPATDIR - source directory that holds compatibility sources
+# DOCDIR - source directory containing documentation files
+# GENERICDIR - platform-independent source directory
+# WINDIR - Windows-specific source directory
+# TESTDIR - directory containing test files
+# TOOLSDIR - directory containing build tools
+# _TCLDIR - root of the Tcl installation OR the Tcl sources. Not set
+#    when building Tcl itself.
+# _INSTALLDIR - native form of the installation path. For Tcl
+#    this will be the root of the Tcl installation. For extensions
+#    this will be the lib directory under the root.
+# TCLINSTALL  - set to 1 if _TCLDIR refers to
+#    headers and libraries from an installed Tcl, and 0 if built against
+#    Tcl sources. Not set when building Tcl itself. Yes, not very well
+#    named.
+# _TCL_H - native path to the tcl.h file
+#
+# If Tk is involved, also sets the following
+# _TKDIR - native form Tk installation OR Tk source. Not set if building
+#    Tk itself.
+# TKINSTALL - set 1 if _TKDIR refers to installed Tk and 0 if Tk sources
+# _TK_H - native path to the tk.h file
+
+# Root directory for sources and assumed subdirectories
+ROOT = $(MAKEDIR)\..
+# The following paths CANNOT have spaces in them as they appear on the
+# left side of implicit rules.
+!ifndef COMPATDIR
+COMPATDIR      = $(ROOT)\compat
+!endif
+!ifndef DOCDIR
+DOCDIR         = $(ROOT)\doc
+!endif
+!ifndef GENERICDIR
+GENERICDIR     = $(ROOT)\generic
+!endif
+!ifndef TOOLSDIR
+TOOLSDIR       = $(ROOT)\tools
+!endif
+!ifndef TESTDIR
+TESTDIR        = $(ROOT)\tests
+!endif
+!ifndef LIBDIR
+!if exist("$(ROOT)\library")
+LIBDIR          = $(ROOT)\library
+!else
+LIBDIR          = $(ROOT)\lib
+!endif
+!endif
+!ifndef DEMODIR
+!if exist("$(LIBDIR)\demos")
+DEMODIR                = $(LIBDIR)\demos
+!else
+DEMODIR                = $(ROOT)\demos
+!endif
+!endif # ifndef DEMODIR
+# Do NOT enclose WINDIR in a !ifndef because Windows always defines
+# WINDIR env var to point to c:\windows!
+# TBD - This is a potentially dangerous conflict, rename WINDIR to
+# something else
+WINDIR         = $(ROOT)\win
+
+!ifndef RCDIR
+!if exist("$(WINDIR)\rc")
+RCDIR           = $(WINDIR)\rc
+!else
+RCDIR           = $(WINDIR)
+!endif
+!endif
+RCDIR = $(RCDIR:/=\)
+
+# The target directory where the built packages and binaries will be installed.
+# INSTALLDIR is the (optional) path specified by the user.
+# _INSTALLDIR is INSTALLDIR using the backslash separator syntax
+!ifdef INSTALLDIR
+### Fix the path separators.
+_INSTALLDIR    = $(INSTALLDIR:/=\)
+!else
+### Assume the normal default.
+_INSTALLDIR    = $(HOMEDRIVE)\Tcl
+!endif
+
+!if $(DOING_TCL)
+
+# BEGIN Case 2(a) - Building Tcl itself
+
+# Only need to define _TCL_H
+_TCL_H = ..\generic\tcl.h
+
+# END Case 2(a) - Building Tcl itself
+
+!elseif $(DOING_TK)
+
+# BEGIN Case 2(b) - Building Tk
+
+TCLINSTALL = 0 # Tk always builds against Tcl source, not an installed Tcl
+!if "$(TCLDIR)" == ""
+!if [echo TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+!endif # TCLDIR == ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+_TCL_H  = $(_TCLDIR)\generic\tcl.h
+!if !exist("$(_TCL_H)")
+!error Could not locate tcl.h. Please set the TCLDIR macro to point to the Tcl *source* directory.
+!endif
+
+_TK_H = ..\generic\tk.h
+
+# END Case 2(b) - Building Tk
+
+!else
+
+# BEGIN Case 2(c) or (d) - Building an extension other than Tk
+
+# If command line has specified Tcl location through TCLDIR, use it
+# else default to the INSTALLDIR setting
+!if "$(TCLDIR)" != ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+!if exist("$(_TCLDIR)\include\tcl.h") # Case 2(c) with TCLDIR defined
+TCLINSTALL     = 1
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+!elseif exist("$(_TCLDIR)\generic\tcl.h") # Case 2(d) with TCLDIR defined
+TCLINSTALL     = 0
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+!endif
+
+!else  #  # Case 2(c) for extensions with TCLDIR undefined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tcl.h") && !$(NEED_TCL_SOURCE)
+
+TCLINSTALL     = 1
+TCLDIR          = $(_INSTALLDIR)\..
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TCLDIR                = $(_INSTALLDIR)\..
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+
+!else # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!if [echo _TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+TCLINSTALL      = 0
+TCLDIR         = $(_TCLDIR)
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+
+!endif # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!endif # TCLDIR
+
+!ifndef _TCL_H
+MSG =^
+Failed to find tcl.h. The TCLDIR macro is set incorrectly or is not set and default path does not contain tcl.h.
+!error $(MSG)
+!endif
+
+# Now do the same to locate Tk headers and libs if project requires Tk
+!if $(NEED_TK)
+
+!if "$(TKDIR)" != ""
+
+_TKDIR = $(TKDIR:/=\)
+!if exist("$(_TKDIR)\include\tk.h")
+TKINSTALL      = 1
+_TK_H          = $(_TKDIR)\include\tk.h
+!elseif exist("$(_TKDIR)\generic\tk.h")
+TKINSTALL      = 0
+_TK_H          = $(_TKDIR)\generic\tk.h
+!endif
+
+!else # TKDIR not defined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+TKINSTALL      = 1
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TKDIR         = $(_INSTALLDIR)\..
+_TK_H          = $(_TKDIR)\include\tk.h
+TKDIR          = $(_TKDIR)
+
+!else # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!if [echo _TKDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tk.h >> nmakehlp.out]
+!error *** Could not locate Tk source directory.
+!endif
+!include nmakehlp.out
+TKINSTALL      = 0
+TKDIR          = $(_TKDIR)
+_TK_H          = $(_TKDIR)\generic\tk.h
+
+!endif # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!endif # TKDIR
+
+!ifndef _TK_H
+MSG =^
+Failed to find tk.h. The TKDIR macro is set incorrectly or is not set and default path does not contain tk.h.
+!error $(MSG)
+!endif
+
+!endif # NEED_TK
+
+!if $(NEED_TCL_SOURCE) && $(TCLINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tcl.^
+*** Please set the TCLDIR macro to point to the Tcl sources.
+!error $(MSG)
+!endif
+
+!if $(NEED_TK_SOURCE)
+!if $(TKINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tk.^
+*** Please set the TKDIR macro to point to the Tk sources.
+!error $(MSG)
+!endif
+!endif
+
+
+# If INSTALLDIR set to tcl installation root dir then reset to the
+# lib dir for installing extensions 
+!if exist("$(_INSTALLDIR)\include\tcl.h")
+_INSTALLDIR=$(_INSTALLDIR)\lib
+!endif
+
+# END Case 2(c) or (d) - Building an extension
+!endif # if $(DOING_TCL)
+
+################################################################
+# 3. Determine compiler version and architecture
+# In this section, we figure out the compiler version and the
+# architecture for which we are building. This sets the
+# following macros:
+# VCVERSION - the internal compiler version as 1200, 1400, 1910 etc.
+#     This is also printed by the compiler in dotted form 19.10 etc.
+# VCVER - the "marketing version", for example Visual C++ 6 for internal
+#     compiler version 1200. This is kept only for legacy reasons as it
+#     does not make sense for recent Microsoft compilers. Only used for
+#     output directory names.
+# ARCH - set to IX86 or AMD64 depending on 32- or 64-bit target
+# NATIVE_ARCH - set to IX86 or AMD64 for the host machine
+# MACHINE - same as $(ARCH) - legacy
+# _VC_MANIFEST_EMBED_{DLL,EXE} - commands for embedding a manifest if needed
+# CFG_ENCODING - set to an character encoding.
+#   TBD - this is passed to compiler as TCL_CFGVAL_ENCODING but can't
+#   see where it is used
+
+cc32           = $(CC)   # built-in default.
+link32         = link
+lib32          = lib
+rc32           = $(RC)   # built-in default.
+
+#----------------------------------------------------------------
+# Figure out the compiler architecture and version by writing
+# the C macros to a file, preprocessing them with the C
+# preprocessor and reading back the created file
+
+_HASH=^#
+_VC_MANIFEST_EMBED_EXE=
+_VC_MANIFEST_EMBED_DLL=
+VCVER=0
+!if ![echo VCVERSION=_MSC_VER > vercl.x] \
+    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
+    && ![echo ARCH=IX86 >> vercl.x] \
+    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
+    && ![echo ARCH=AMD64 >> vercl.x] \
+    && ![echo $(_HASH)endif >> vercl.x] \
+    && ![$(cc32) -nologo -TC -P vercl.x 2>NUL]
+!include vercl.i
+!if $(VCVERSION) < 1900
+!if ![echo VCVER= ^\> vercl.vc] \
+    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
+!include vercl.vc
+!endif
+!else
+# The simple calculation above does not apply to new Visual Studio releases
+# Keep the compiler version in its native form.
+VCVER = $(VCVERSION)
+!endif
+!endif
+
+!if ![del 2>NUL /q/f vercl.x vercl.i vercl.vc]
+!endif
+
+#----------------------------------------------------------------
+# The MACHINE macro is used by legacy makefiles so set it as well
+!ifdef MACHINE
+!if "$(MACHINE)" == "x86"
+!undef MACHINE
+MACHINE = IX86
+!elseif "$(MACHINE)" == "x64"
+!undef MACHINE
+MACHINE = AMD64
+!endif
+!if "$(MACHINE)" != "$(ARCH)"
+!error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH).
+!endif
+!else
+MACHINE=$(ARCH)
+!endif
+
+#------------------------------------------------------------
+# Figure out the *host* architecture by reading the registry
+
+!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]
+NATIVE_ARCH=IX86
+!else
+NATIVE_ARCH=AMD64
+!endif
+
+# Since MSVC8 we must deal with manifest resources.
+!if $(VCVERSION) >= 1400
+_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1
+_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2
+!endif
+
+!ifndef CFG_ENCODING
+CFG_ENCODING   = \"cp1252\"
+!endif
+
+################################################################
+# 4. Build the nmakehlp program
+# This is a helper app we need to overcome nmake's limiting
+# environment. We will call out to it to get various bits of
+# information about supported compiler options etc.
+#
+# Tcl itself will always use the nmakehlp.c program which is
+# in its own source. This is the "master" copy and kept updated.
+#
+# Extensions built against an installed Tcl will use the installed
+# copy of Tcl's nmakehlp.c if there is one and their own version
+# otherwise. In the latter case, they would also be using their own
+# rules.vc. Note that older versions of Tcl do not install nmakehlp.c
+# or rules.vc.
+#
+# Extensions built against Tcl sources will use the one from the Tcl source.
+#
+# When building an extension using a sufficiently new version of Tcl,
+# rules-ext.vc will define NMAKEHLPC appropriately to point to the
+# copy of nmakehlp.c to be used.
+
+!ifndef NMAKEHLPC
+# Default to the one in the current directory (the extension's own nmakehlp.c)
+NMAKEHLPC = nmakehlp.c
+
+!if !$(DOING_TCL)
+!if $(TCLINSTALL)
+!if exist("$(_TCLDIR)\lib\nmake\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\lib\nmake\nmakehlp.c
+!endif
+!else # ! $(TCLINSTALL)
+!if exist("$(_TCLDIR)\win\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\win\nmakehlp.c
+!endif
+!endif # $(TCLINSTALL)
+!endif # !$(DOING_TCL)
+
+!endif # NMAKEHLPC
+
+# We always build nmakehlp even if it exists since we do not know
+# what source it was built from.
+!message *** Using $(NMAKEHLPC)
+!if [$(cc32) -nologo "$(NMAKEHLPC)" -link -subsystem:console > nul]
+!endif
+
+################################################################
+# 5. Test for compiler features
+# Visual C++ compiler options have changed over the years. Check
+# which options are supported by the compiler in use.
+#
+# The following macros are set:
+# OPTIMIZATIONS - the compiler flags to be used for optimized builds
+# DEBUGFLAGS - the compiler flags to be used for debug builds
+# LINKERFLAGS - Flags passed to the linker 
+#
+# Note that these are the compiler settings *available*, not those
+# that will be *used*. The latter depends on the OPTS macro settings
+# which we have not yet parsed.
+#
+# Also note that some of the flags in OPTIMIZATIONS are not really
+# related to optimization. They are placed there only for legacy reasons
+# as some extensions expect them to be included in that macro.
+
+# -Op improves float consistency. Note only needed for older compilers
+# Newer compilers do not need or support this option.
+!if [nmakehlp -c -Op]
+FPOPTS  = -Op
+!endif
+
+# Strict floating point semantics - present in newer compilers in lieu of -Op
+!if [nmakehlp -c -fp:strict]
+FPOPTS  = $(FPOPTS) -fp:strict
+!endif
+
+!if "$(MACHINE)" == "IX86"
+### test for pentium errata
+!if [nmakehlp -c -QI0f]
+!message *** Compiler has 'Pentium 0x0f fix'
+FPOPTS  = $(FPOPTS) -QI0f
+!else
+!message *** Compiler does not have 'Pentium 0x0f fix'
+!endif
+!endif
+
+### test for optimizations
+# /O2 optimization includes /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy as per
+# documentation. Note we do NOT want /Gs as that inserts a _chkstk
+# stack probe at *every* function entry, not just those with more than
+# a page of stack allocation resulting in a performance hit.  However,
+# /O2 documentation is misleading as its stack probes are simply the
+# default page size locals allocation probes and not what is implied
+# by an explicit /Gs option.
+
+OPTIMIZATIONS = $(FPOPTS)
+
+!if [nmakehlp -c -O2]
+!message *** Compiler has 'Optimizations'
+OPTIMIZING = 1
+OPTIMIZATIONS   = $(OPTIMIZATIONS) -O2
+!else
+# Legacy, really. All modern compilers support this
+!message *** Compiler does not have 'Optimizations'
+OPTIMIZING = 0
+!endif
+
+# Checks for buffer overflows in local arrays
+!if [nmakehlp -c -GS]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS
+!endif
+
+# Link time optimization. Note that this option (potentially) makes
+# generated libraries only usable by the specific VC++ version that
+# created it. Requires /LTCG linker option
+!if [nmakehlp -c -GL]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL
+CC_GL_OPT_ENABLED = 1
+!else
+# In newer compilers -GL and -YX are incompatible.
+!if [nmakehlp -c -YX]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX
+!endif
+!endif # [nmakehlp -c -GL]
+
+DEBUGFLAGS     = $(FPOPTS)
+
+# Run time error checks. Not available or valid in a release, non-debug build
+# RTC is for modern compilers, -GZ is legacy
+!if [nmakehlp -c -RTC1]
+DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1
+!elseif [nmakehlp -c -GZ]
+DEBUGFLAGS     = $(DEBUGFLAGS) -GZ
+!endif
+
+#----------------------------------------------------------------
+# Linker flags
+
+# LINKER_TESTFLAGS are for internal use when we call nmakehlp to test
+# if the linker supports a specific option. Without these flags link will
+# return "LNK1561: entry point must be defined" error compiling from VS-IDE:
+# They are not passed through to the actual application / extension
+# link rules.
+!ifndef LINKER_TESTFLAGS
+LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmakehlp.out
+!endif
+
+LINKERFLAGS     =
+
+# If compiler has enabled link time optimization, linker must too with -ltcg
+!ifdef CC_GL_OPT_ENABLED
+!if [nmakehlp -l -ltcg $(LINKER_TESTFLAGS)]
+LINKERFLAGS     = $(LINKERFLAGS) -ltcg
+!endif
+!endif
+
+########################################################################
+# 6. Parse the OPTS macro to work out the requested build configuration.
+# Based on this, we will construct the actual switches to be passed to the
+# compiler and linker using the macros defined in the previous section.
+# The following macros are defined by this section based on OPTS
+# STATIC_BUILD - 0 -> Tcl is to be built as a shared library
+#                1 -> build as a static library and shell
+# TCL_THREADS - legacy but always 1 on Windows since winsock requires it.
+# DEBUG - 1 -> debug build, 0 -> release builds
+# SYMBOLS - 1 -> generate PDB's, 0 -> no PDB's
+# PROFILE - 1 -> generate profiling info, 0 -> no profiling
+# PGO     - 1 -> profile based optimization, 0 -> no
+# MSVCRT  - 1 -> link to dynamic C runtime even when building static Tcl build
+#           0 -> link to static C runtime for static Tcl build.
+#           Does not impact shared Tcl builds (STATIC_BUILD == 0)
+# TCL_USE_STATIC_PACKAGES - 1 -> statically link the registry and dde extensions
+#           in the Tcl shell. 0 -> keep them as shared libraries
+#           Does not impact shared Tcl builds.
+# USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation.
+#           0 -> Use the non-thread allocator.
+# UNCHECKED - 1 -> when doing a debug build with symbols, use the release
+#           C runtime, 0 -> use the debug C runtime.
+# USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking
+# CONFIG_CHECK - 1 -> check current build configuration against Tcl
+#           configuration (ignored for Tcl itself)
+# Further, LINKERFLAGS are modified based on above.
+
+# Default values for all the above
+STATIC_BUILD   = 0
+TCL_THREADS    = 1
+DEBUG          = 0
+SYMBOLS                = 0
+PROFILE                = 0
+PGO            = 0
+MSVCRT         = 1
+TCL_USE_STATIC_PACKAGES        = 0
+USE_THREAD_ALLOC = 1
+UNCHECKED      = 0
+CONFIG_CHECK    = 1
+!if $(DOING_TCL)
+USE_STUBS       = 0
+!else
+USE_STUBS       = 1
+!endif
+
+# If OPTS is not empty AND does not contain "none" which turns off all OPTS
+# set the above macros based on OPTS content
+!if "$(OPTS)" != "" && ![nmakehlp -f "$(OPTS)" "none"]
+
+# OPTS are specified, parse them
+
+!if [nmakehlp -f $(OPTS) "static"]
+!message *** Doing static
+STATIC_BUILD   = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "nostubs"]
+!message *** Not using stubs
+USE_STUBS      = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nomsvcrt"]
+!message *** Doing nomsvcrt
+MSVCRT         = 0
+!else
+!if [nmakehlp -f $(OPTS) "msvcrt"]
+!message *** Doing msvcrt
+MSVCRT         = 1
+!else
+!if !$(STATIC_BUILD)
+MSVCRT         = 1
+!else
+MSVCRT         = 0
+!endif
+!endif
+!endif # [nmakehlp -f $(OPTS) "nomsvcrt"]
+
+!if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD)
+!message *** Doing staticpkg
+TCL_USE_STATIC_PACKAGES        = 1
+!else
+TCL_USE_STATIC_PACKAGES        = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nothreads"]
+!message *** Compile explicitly for non-threaded tcl
+TCL_THREADS    = 0
+USE_THREAD_ALLOC= 0
+!else
+TCL_THREADS    = 1
+USE_THREAD_ALLOC= 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "symbols"]
+!message *** Doing symbols
+DEBUG          = 1
+!else
+DEBUG          = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pdbs"]
+!message *** Doing pdbs
+SYMBOLS                = 1
+!else
+SYMBOLS                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "profile"]
+!message *** Doing profile
+PROFILE                = 1
+!else
+PROFILE                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pgi"]
+!message *** Doing profile guided optimization instrumentation
+PGO            = 1
+!elseif [nmakehlp -f $(OPTS) "pgo"]
+!message *** Doing profile guided optimization
+PGO            = 2
+!else
+PGO            = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "loimpact"]
+!message *** Warning: ignoring option "loimpact" - deprecated on modern Windows.
+!endif
+
+# TBD - should get rid of this option
+!if [nmakehlp -f $(OPTS) "thrdalloc"]
+!message *** Doing thrdalloc
+USE_THREAD_ALLOC = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "tclalloc"]
+USE_THREAD_ALLOC = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "unchecked"]
+!message *** Doing unchecked
+UNCHECKED = 1
+!else
+UNCHECKED = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "noconfigcheck"]
+CONFIG_CHECK = 1
+!else
+CONFIG_CHECK = 0
+!endif
+
+!endif # "$(OPTS)" != ""  && ... parsing of OPTS
+
+# Set linker flags based on above
+
+!if $(PGO) > 1
+!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!elseif $(PGO) > 0
+!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!endif
+
+################################################################
+# 7. Parse the STATS macro to configure code instrumentation
+# The following macros are set by this section:
+# TCL_MEM_DEBUG - 1 -> enables memory allocation instrumentation
+#                 0 -> disables
+# TCL_COMPILE_DEBUG - 1 -> enables byte compiler logging
+#                     0 -> disables
+
+# Default both are off
+TCL_MEM_DEBUG      = 0
+TCL_COMPILE_DEBUG   = 0
+
+!if "$(STATS)" != "" && ![nmakehlp -f "$(STATS)" "none"]
+
+!if [nmakehlp -f $(STATS) "memdbg"]
+!message *** Doing memdbg
+TCL_MEM_DEBUG      = 1
+!else
+TCL_MEM_DEBUG      = 0
+!endif
+
+!if [nmakehlp -f $(STATS) "compdbg"]
+!message *** Doing compdbg
+TCL_COMPILE_DEBUG   = 1
+!else
+TCL_COMPILE_DEBUG   = 0
+!endif
+
+!endif
+
+####################################################################
+# 8. Parse the CHECKS macro to configure additional compiler checks
+# The following macros are set by this section:
+# WARNINGS - compiler switches that control the warnings level
+# TCL_NO_DEPRECATED - 1 -> disable support for deprecated functions
+#                     0 -> enable deprecated functions
+
+# Defaults - Permit deprecated functions and warning level 3
+TCL_NO_DEPRECATED          = 0
+WARNINGS                   = -W3
+
+!if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"]
+
+!if [nmakehlp -f $(CHECKS) "nodep"]
+!message *** Doing nodep check
+TCL_NO_DEPRECATED          = 1
+!endif
+
+!if [nmakehlp -f $(CHECKS) "fullwarn"]
+!message *** Doing full warnings check
+WARNINGS                   = -W4
+!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)]
+LINKERFLAGS                = $(LINKERFLAGS) -warn:3
+!endif
+!endif
+
+!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]
+!message *** Doing 64bit portability warnings
+WARNINGS                   = $(WARNINGS) -Wp64
+!endif
+
+!endif
+
+################################################################
+# 9. Extract various version numbers
+# For Tcl and Tk, version numbers are extracted from tcl.h and tk.h
+# respectively. For extensions, versions are extracted from the
+# configure.in or configure.ac from the TEA configuration if it
+# exists, and unset otherwise.
+# Sets the following macros:
+# TCL_MAJOR_VERSION
+# TCL_MINOR_VERSION
+# TCL_PATCH_LEVEL
+# TCL_VERSION
+# TK_MAJOR_VERSION
+# TK_MINOR_VERSION
+# TK_PATCH_LEVEL
+# TK_VERSION
+# DOTVERSION - set as (for example) 2.5
+# VERSION - set as (for example 25)
+#--------------------------------------------------------------
+
+!if [echo REM = This file is generated from rules.vc > versions.vc]
+!endif
+!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]
+!endif
+
+!if defined(_TK_H)
+!if [echo TK_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]
+!endif
+!endif # _TK_H
+
+!include versions.vc
+
+TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)
+TCL_DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!if defined(_TK_H)
+TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)
+TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+
+# Set DOTVERSION and VERSION
+!if $(DOING_TCL)
+
+DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+VERSION = $(TCL_VERSION)
+
+!elseif $(DOING_TK)
+
+DOTVERSION = $(TK_DOTVERSION)
+VERSION = $(TK_VERSION)
+
+!else # Doing a non-Tk extension
+
+# If parent makefile has not defined DOTVERSION, try to get it from TEA
+# first from a configure.in file, and then from configure.ac
+!ifndef DOTVERSION
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.in ^[$(PROJECT)^] >> versions.vc]
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.ac ^[$(PROJECT)^] >> versions.vc]
+!error *** Could not figure out extension version. Please define DOTVERSION in parent makefile before including rules.vc.
+!endif
+!endif
+!include versions.vc
+!endif # DOTVERSION
+VERSION         = $(DOTVERSION:.=)
+
+!endif # $(DOING_TCL) ... etc.
+
+################################################################
+# 10. Construct output directory and file paths
+# Figure-out how to name our intermediate and output directories.
+# In order to avoid inadvertent mixing of object files built using
+# different compilers, build configurations etc.,
+#
+# Naming convention (suffixes):
+#   t = full thread support.
+#   s = static library (as opposed to an import library)
+#   g = linked to the debug enabled C run-time.
+#   x = special static build when it links to the dynamic C run-time.
+#
+# The following macros are set in this section:
+# SUFX - the suffix to use for binaries based on above naming convention
+# BUILDDIRTOP - the toplevel default output directory
+#      is of the form {Release,Debug}[_AMD64][_COMPILERVERSION]
+# TMP_DIR - directory where object files are created
+# OUT_DIR - directory where output executables are created
+# Both TMP_DIR and OUT_DIR are defaulted only if not defined by the
+# parent makefile (or command line). The default values are
+# based on BUILDDIRTOP.
+# STUBPREFIX - name of the stubs library for this project
+# PRJIMPLIB - output path of the generated project import library
+# PRJLIBNAME - name of generated project library
+# PRJLIB     - output path of generated project library
+# PRJSTUBLIBNAME - name of the generated project stubs library
+# PRJSTUBLIB - output path of the generated project stubs library
+# RESFILE - output resource file (only if not static build)
+
+SUFX       = tsgx
+
+!if $(DEBUG)
+BUILDDIRTOP = Debug
+!else
+BUILDDIRTOP = Release
+!endif
+
+!if "$(MACHINE)" != "IX86"
+BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)
+!endif
+!if $(VCVER) > 6
+BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)
+!endif
+
+!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)
+SUFX       = $(SUFX:g=)
+!endif
+
+TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
+
+!if !$(STATIC_BUILD)
+TMP_DIRFULL = $(TMP_DIRFULL:Static=)
+SUFX       = $(SUFX:s=)
+EXT        = dll
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!else
+TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
+EXT        = lib
+!if !$(MSVCRT)
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!endif
+!endif
+
+!if !$(TCL_THREADS)
+TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)
+SUFX       = $(SUFX:t=)
+!endif
+
+!ifndef TMP_DIR
+TMP_DIR            = $(TMP_DIRFULL)
+!ifndef OUT_DIR
+OUT_DIR            = .\$(BUILDDIRTOP)
+!endif
+!else
+!ifndef OUT_DIR
+OUT_DIR            = $(TMP_DIR)
+!endif
+!endif
+
+# Relative paths -> absolute
+!if [echo OUT_DIR = \> nmakehlp.out] \
+   || [nmakehlp -Q "$(OUT_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path OUT_DIR=$(OUT_DIR)
+!endif
+!if [echo TMP_DIR = \>> nmakehlp.out] \
+   || [nmakehlp -Q "$(TMP_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path TMP_DIR=$(TMP_DIR)
+!endif
+!include nmakehlp.out
+
+# The name of the stubs library for the project being built
+STUBPREFIX      = $(PROJECT)stub
+
+# Set up paths to various Tcl executables and libraries needed by extensions
+!if $(DOING_TCL)
+
+TCLSHNAME       = $(PROJECT)sh$(TCL_VERSION)$(SUFX).exe
+TCLSH          = $(OUT_DIR)\$(TCLSHNAME)
+TCLIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+TCLLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+TCLLIB         = $(OUT_DIR)\$(TCLLIBNAME)
+
+TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+TCLSTUBLIB     = $(OUT_DIR)\$(TCLSTUBLIBNAME)
+TCL_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+
+TCLSH          = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist("$(TCLSH)") && $(TCL_THREADS)
+TCLSH           = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\lib
+TCLREGLIB      = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target
+TCL_INCLUDES    = -I"$(_TCLDIR)\include"
+
+!else # Building against Tcl sources
+
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist($(TCLSH)) && $(TCL_THREADS)
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\library
+TCLREGLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = $(_TCLDIR)\tools
+TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"
+
+!endif # TCLINSTALL
+
+tcllibs = "$(TCLSTUBLIB)" "$(TCLIMPLIB)"
+
+!endif # $(DOING_TCL)
+
+# We need a tclsh that will run on the host machine as part of the build.
+# IX86 runs on all architectures.
+!ifndef TCLSH_NATIVE
+!if "$(MACHINE)" == "IX86" || "$(MACHINE)" == "$(NATIVE_ARCH)"
+TCLSH_NATIVE   = $(TCLSH)
+!else
+!error You must explicitly set TCLSH_NATIVE for cross-compilation
+!endif
+!endif
+
+# Do the same for Tk and Tk extensions that require the Tk libraries
+!if $(DOING_TK) || $(NEED_TK)
+WISHNAMEPREFIX = wish
+WISHNAME = $(WISHNAMEPREFIX)$(TK_VERSION)$(SUFX).exe
+TKLIBNAME      = $(PROJECT)$(TK_VERSION)$(SUFX).$(EXT)
+TKSTUBLIBNAME  = tkstub$(TK_VERSION).lib
+TKIMPLIBNAME   = tk$(TK_VERSION)$(SUFX).lib
+
+!if $(DOING_TK)
+WISH           = $(OUT_DIR)\$(WISHNAME)
+TKSTUBLIB      = $(OUT_DIR)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(OUT_DIR)\$(TKIMPLIBNAME)
+TKLIB          = $(OUT_DIR)\$(TKLIBNAME)
+TK_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # effectively NEED_TK
+
+!if $(TKINSTALL) # Building against installed Tk
+WISH           = $(_TKDIR)\bin\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\lib\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\lib\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\include"
+!else # Building against Tk sources
+WISH           = $(_TKDIR)\win\$(BUILDDIRTOP)\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
+!endif # TKINSTALL
+tklibs = "$(TKSTUBLIB)" "$(TKIMPLIB)"
+
+!endif # $(DOING_TK)
+!endif # $(DOING_TK) || $(NEED_TK)
+
+# Various output paths
+PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)
+
+PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)
+
+# If extension parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+!if !$(DOING_TCL) && !$(DOING_TK) && !$(STATIC_BUILD)
+!ifdef RCFILE
+RESFILE = $(TMP_DIR)\$(RCFILE:.rc=.res)
+!else
+RESFILE = $(TMP_DIR)\$(PROJECT).res
+!endif
+!endif
+
+###################################################################
+# 11. Construct the paths for the installation directories
+# The following macros get defined in this section:
+# LIB_INSTALL_DIR - where libraries should be installed
+# BIN_INSTALL_DIR - where the executables should be installed
+# DOC_INSTALL_DIR - where documentation should be installed
+# SCRIPT_INSTALL_DIR - where scripts should be installed
+# INCLUDE_INSTALL_DIR - where C include files should be installed
+# DEMO_INSTALL_DIR - where demos should be installed
+# PRJ_INSTALL_DIR - where package will be installed (not set for tcl and tk)
+
+!if $(DOING_TCL) || $(DOING_TK)
+LIB_INSTALL_DIR                = $(_INSTALLDIR)\lib
+BIN_INSTALL_DIR                = $(_INSTALLDIR)\bin
+DOC_INSTALL_DIR                = $(_INSTALLDIR)\doc
+!if $(DOING_TCL)
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!else # DOING_TK
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+DEMO_INSTALL_DIR       = $(SCRIPT_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\include
+
+!else # extension other than Tk
+
+PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)
+LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)
+DEMO_INSTALL_DIR       = $(PRJ_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include
+
+!endif
+
+###################################################################
+# 12. Set up actual options to be passed to the compiler and linker
+# Now we have all the information we need, set up the actual flags and
+# options that we will pass to the compiler and linker. The main
+# makefile should use these in combination with whatever other flags
+# and switches are specific to it.
+# The following macros are defined, names are for historical compatibility:
+# OPTDEFINES - /Dxxx C macro flags based on user-specified OPTS
+# COMPILERFLAGS - /Dxxx C macro flags independent of any configuration opttions
+# crt - Compiler switch that selects the appropriate C runtime
+# cdebug - Compiler switches related to debug AND optimizations
+# cwarn - Compiler switches that set warning levels
+# cflags - complete compiler switches (subsumes cdebug and cwarn)
+# ldebug - Linker switches controlling debug information and optimization
+# lflags - complete linker switches (subsumes ldebug) except subsystem type
+# dlllflags - complete linker switches to build DLLs (subsumes lflags)
+# conlflags - complete linker switches for console program (subsumes lflags)
+# guilflags - complete linker switches for GUI program (subsumes lflags)
+# baselibs - minimum Windows libraries required. Parent makefile can
+#    define PRJ_LIBS before including rules.rc if additional libs are needed
+
+OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS
+
+!if $(TCL_MEM_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG
+!endif
+!if $(TCL_COMPILE_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
+!endif
+!if $(TCL_THREADS)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1
+!if $(USE_THREAD_ALLOC)
+OPTDEFINES     = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1
+!endif
+!endif
+!if $(STATIC_BUILD)
+OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD
+!endif
+!if $(TCL_NO_DEPRECATED)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED
+!endif
+
+!if $(USE_STUBS)
+# Note we do not define USE_TCL_STUBS even when building tk since some
+# test targets in tk do not use stubs
+!if ! $(DOING_TCL)
+USE_STUBS_DEFS  = -DUSE_TCL_STUBS -DUSE_TCLOO_STUBS
+!if $(NEED_TK)
+USE_STUBS_DEFS  = $(USE_STUBS_DEFS) -DUSE_TK_STUBS
+!endif
+!endif
+!endif # USE_STUBS
+
+!if !$(DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DNDEBUG
+!if $(OPTIMIZING)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
+!endif
+!endif
+!if $(PROFILE)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED
+!endif
+!if "$(MACHINE)" == "AMD64"
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT
+!endif
+!if $(VCVERSION) < 1300
+OPTDEFINES     = $(OPTDEFINES) -DNO_STRTOI64
+!endif
+
+# _ATL_XP_TARGETING - Newer SDK's need this to build for XP
+COMPILERFLAGS  = /D_ATL_XP_TARGETING
+
+# Following is primarily for the benefit of extensions. Tcl 8.5 builds
+# Tcl without /DUNICODE, while 8.6 builds with it defined. When building
+# an extension, it is advisable (but not mandated) to use the same Windows
+# API as the Tcl build. This is accordingly defaulted below. A particular
+# extension can override this by pre-definining USE_WIDECHAR_API.
+!ifndef USE_WIDECHAR_API
+!if $(TCL_VERSION) > 85
+USE_WIDECHAR_API = 1
+!else
+USE_WIDECHAR_API = 0
+!endif
+!endif
+
+!if $(USE_WIDECHAR_API)
+COMPILERFLAGS = $(COMPILERFLAGS) /DUNICODE /D_UNICODE 
+!endif
+
+# Like the TEA system only set this non empty for non-Tk extensions
+# Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME
+# so we pass both
+!if !$(DOING_TCL) && !$(DOING_TK)
+PKGNAMEFLAGS = -DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_TCLNAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \
+               -DMODULE_SCOPE=extern 
+!endif
+
+# crt picks the C run time based on selected OPTS
+!if $(MSVCRT)
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MDd
+!else
+crt = -MD
+!endif
+!else
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MTd
+!else
+crt = -MT
+!endif
+!endif
+
+# cdebug includes compiler options for debugging as well as optimization.
+!if $(DEBUG)
+
+# In debugging mode, optimizations need to be disabled
+cdebug = -Zi -Od $(DEBUGFLAGS)
+
+!else
+
+cdebug = $(OPTIMIZATIONS)
+!if $(SYMBOLS)
+cdebug = $(cdebug) -Zi
+!endif
+
+!endif # $(DEBUG)
+
+# cwarn includes default warning levels.
+cwarn = $(WARNINGS)
+
+!if "$(MACHINE)" == "AMD64"
+# Disable pointer<->int warnings related to cast between different sizes
+# There are a gadzillion of these due to use of ClientData and
+# clutter up compiler
+# output increasing chance of a real warning getting lost. So disable them.
+# Eventually some day, Tcl will be 64-bit clean.
+cwarn = $(cwarn) -wd4311 -wd4312
+!endif
+
+### Common compiler options that are architecture specific
+!if "$(MACHINE)" == "ARM"
+carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
+!else
+carch =
+!endif
+
+!if $(DEBUG)
+# Turn warnings into errors
+cwarn = $(cwarn) -WX
+!endif
+
+INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES)
+!if !$(DOING_TCL) && !$(DOING_TK)
+INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WINDIR)" -I"$(COMPATDIR)"
+!endif
+
+# These flags are defined roughly in the order of the pre-reform
+# rules.vc/makefile.vc to help visually compare that the pre- and
+# post-reform build logs
+
+# cflags contains generic flags used for building practically all object files
+cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\ $(cdebug)
+
+# appcflags contains $(cflags) and flags for building the application
+# object files (e.g. tclsh, or wish) pkgcflags contains $(cflags) plus
+# flags used for building shared object files The two differ in the
+# BUILD_$(PROJECT) macro which should be defined only for the shared
+# library *implementation* and not for its caller interface
+
+appcflags = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES) $(USE_STUBS_DEFS)
+appcflags_nostubs = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES)
+pkgcflags = $(appcflags) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+pkgcflags_nostubs = $(appcflags_nostubs) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+
+# stubscflags contains $(cflags) plus flags used for building a stubs
+# library for the package.  Note: -DSTATIC_BUILD is defined in
+# $(OPTDEFINES) only if the OPTS configuration indicates a static
+# library. However the stubs library is ALWAYS static hence included
+# here irrespective of the OPTS setting.
+#
+# TBD - tclvfs has a comment that stubs libs should not be compiled with -GL
+# without stating why. Tcl itself compiled stubs libs with this flag.
+# so we do not remove it from cflags. -GL may prevent extensions
+# compiled with one VC version to fail to link against stubs library
+# compiled with another VC version. Check for this and fix accordingly.
+stubscflags = $(cflags) $(PKGNAMEFLAGS) $(PRJ_DEFINES) $(OPTDEFINES) -Zl -DSTATIC_BUILD $(INCLUDES)
+
+# Link flags 
+
+!if $(DEBUG)
+ldebug = -debug -debugtype:cv
+!else
+ldebug = -release -opt:ref -opt:icf,3
+!if $(SYMBOLS)
+ldebug = $(ldebug) -debug -debugtype:cv
+!endif
+!endif
+
+# Note: Profiling is currently only possible with the Visual Studio Enterprise
+!if $(PROFILE)
+ldebug= $(ldebug) -profile
+!endif
+
+### Declarations common to all linker versions 
+lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+lflags = $(lflags) -nodefaultlib:libucrt.lib
+!endif
+
+# Old linkers (Visual C++ 6 in particular) will link for fast loading
+# on Win98. Since we do not support Win98 any more, we specify nowin98
+# as recommended for NT and later. However, this is only required by
+# IX86 on older compilers and only needed if we are not doing a static build.
+
+!if "$(MACHINE)" == "IX86" && !$(STATIC_BUILD)
+!if [nmakehlp -l -opt:nowin98 $(LINKER_TESTFLAGS)]
+# Align sections for PE size savings.
+lflags = $(lflags) -opt:nowin98
+!endif
+!endif
+
+dlllflags = $(lflags) -dll
+conlflags = $(lflags) -subsystem:console
+guilflags = $(lflags) -subsystem:windows
+
+# Libraries that are required for every image.
+# Extensions should define any additional libraries with $(PRJ_LIBS)
+winlibs   = kernel32.lib advapi32.lib
+
+!if $(NEED_TK)
+winlibs = $(winlibs) gdi32.lib user32.lib uxtheme.lib
+!endif
+
+# Avoid 'unresolved external symbol __security_cookie' errors.
+# c.f. http://support.microsoft.com/?id=894573
+!if "$(MACHINE)" == "AMD64"
+!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500
+winlibs   = $(winlibs) bufferoverflowU.lib
+!endif
+!endif
+
+baselibs = $(winlibs) $(PRJ_LIBS)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+baselibs   = $(baselibs) ucrt.lib
+!endif
+
+################################################################
+# 13. Define standard commands, common make targets and implicit rules
+
+CCPKGCMD = $(cc32) $(pkgcflags) -Fo$(TMP_DIR)^\
+CCAPPCMD = $(cc32) $(appcflags) -Fo$(TMP_DIR)^\
+CCSTUBSCMD = $(cc32) $(stubscflags) -Fo$(TMP_DIR)^\
+
+LIBCMD = $(lib32) -nologo $(LINKERFLAGS) -out:$@
+DLLCMD = $(link32) $(dlllflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+
+CONEXECMD = $(link32) $(conlflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+GUIEXECMD = $(link32) $(guilflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+RESCMD  = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \
+           $(TCL_INCLUDES) \
+           -DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \
+           -DCOMMAVERSION=$(DOTVERSION:.=,),0 \
+           -DDOTVERSION=\"$(DOTVERSION)\" \
+           -DVERSION=\"$(VERSION)\" \
+           -DSUFX=\"$(SUFX)\" \
+            -DPROJECT=\"$(PROJECT)\" \
+            -DPRJLIBNAME=\"$(PRJLIBNAME)\" 
+
+!ifndef DEFAULT_BUILD_TARGET
+DEFAULT_BUILD_TARGET = $(PROJECT)
+!endif
+
+default-target: $(DEFAULT_BUILD_TARGET)
+
+default-pkgindex:
+       @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \
+           [list load [file join $$dir $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl
+
+default-pkgindex-tea:
+       @if exist $(ROOT)\pkgIndex.tcl.in nmakehlp -s << $(ROOT)\pkgIndex.tcl.in > $(OUT_DIR)\pkgIndex.tcl
+@PACKAGE_VERSION@    $(DOTVERSION)
+@PACKAGE_NAME@       $(PRJ_PACKAGE_TCLNAME)
+@PACKAGE_TCLNAME@    $(PRJ_PACKAGE_TCLNAME)
+@PKG_LIB_FILE@       $(PRJLIBNAME)
+<<
+
+
+default-install: default-install-binaries default-install-libraries
+
+default-install-binaries: $(PRJLIB)
+       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-libraries: $(OUT_DIR)\pkgIndex.tcl
+       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
+       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
+       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
+       @$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)
+
+default-install-stubs:
+       @echo Installing stubs library to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJSTUBLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-docs-html:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.html" "$(DOCDIR)\*.css" "$(DOCDIR)\*.png") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-docs-n:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.n") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-demos:
+       @echo Installing demos to '$(DEMO_INSTALL_DIR)'
+       @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)"
+       @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)"
+
+default-clean:
+       @echo Cleaning $(TMP_DIR)\* ...
+       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)
+       @echo Cleaning $(WINDIR)\nmakehlp.obj, nmakehlp.exe ...
+       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj
+       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe
+       @if exist $(WINDIR)\nmakehlp.out del $(WINDIR)\nmakehlp.out
+       @echo Cleaning $(WINDIR)\nmhlp-out.txt ...
+       @if exist $(WINDIR)\nmhlp-out.txt del $(WINDIR)\nmhlp-out.txt
+       @echo Cleaning $(WINDIR)\_junk.pch ...
+       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch
+       @echo Cleaning $(WINDIR)\vercl.x, vercl.i ...
+       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x
+       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i
+       @echo Cleaning $(WINDIR)\versions.vc, version.vc ...
+       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc
+       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc
+
+default-hose: default-clean
+       @echo Hosing $(OUT_DIR)\* ...
+       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)
+
+# Only for backward compatibility
+default-distclean: default-hose
+
+default-setup:
+       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
+       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
+
+!if "$(TESTPAT)" != ""
+TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
+!endif
+
+default-test: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS)
+
+default-shell: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       $(DEBUGGER) $(TCLSH)
+
+# Generation of Windows version resource 
+!ifdef RCFILE
+
+# Note: don't use $** in below rule because there may be other dependencies
+# and only the "master" rc must be passed to the resource compiler
+$(TMP_DIR)\$(PROJECT).res: $(RCDIR)\$(PROJECT).rc
+       $(RESCMD) $(RCDIR)\$(PROJECT).rc
+
+!else
+
+# If parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+$(TMP_DIR)\$(PROJECT).res: $(TMP_DIR)\$(PROJECT).rc
+
+$(TMP_DIR)\$(PROJECT).rc:
+       @$(COPY) << $(TMP_DIR)\$(PROJECT).rc
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION   COMMAVERSION
+ PRODUCTVERSION        COMMAVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef DEBUG
+ FILEFLAGS     VS_FF_DEBUG
+#else
+ FILEFLAGS     0x0L
+#endif
+ FILEOS                VOS_NT_WINDOWS32
+ FILETYPE      VFT_DLL
+ FILESUBTYPE   0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "FileDescription",  "Tcl extension " PROJECT
+            VALUE "OriginalFilename", PRJLIBNAME
+            VALUE "FileVersion",      DOTVERSION
+            VALUE "ProductName",      "Package " PROJECT " for Tcl"
+            VALUE "ProductVersion",   DOTVERSION 
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+<<
+
+!endif # ifdef RCFILE
+
+!ifndef DISABLE_IMPLICIT_RULES
+DISABLE_IMPLICIT_RULES = 0
+!endif
+
+!if !$(DISABLE_IMPLICIT_RULES)
+# Implicit rule definitions - only for building library objects. For stubs and
+# main application, the master makefile should define explicit rules.
+
+{$(ROOT)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(WINDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(RCDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(WINDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(TMP_DIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+.SUFFIXES:
+.SUFFIXES:.c .rc
+
+!endif
+
+################################################################
+# 14. Sanity check selected options against Tcl build options
+# When building an extension, certain configuration options should
+# match the ones used when Tcl was built. Here we check and
+# warn on a mismatch.
+!if ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+!if exist("$(_TCLDIR)\lib\nmake\tcl.nmake")
+TCLNMAKECONFIG = "$(_TCLDIR)\lib\nmake\tcl.nmake"
+!endif
+!else # ! $(TCLINSTALL) - building against Tcl source
+!if exist("$(OUT_DIR)\tcl.nmake")
+TCLNMAKECONFIG = "$(OUT_DIR)\tcl.nmake"
+!endif
+!endif # TCLINSTALL
+
+!if $(CONFIG_CHECK)
+!ifdef TCLNMAKECONFIG
+!include $(TCLNMAKECONFIG)
+
+!if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)"
+!error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)).
+!endif
+!if defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC)
+!message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)).
+!endif
+!if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG)
+!message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)).
+!endif
+!endif
+
+!endif # TCLNMAKECONFIG
+
+!endif # ! $(DOING_TCL)
+
+
+#----------------------------------------------------------
+# Display stats being used.
+#----------------------------------------------------------
+
+!if !$(DOING_TCL)
+!message *** Building against Tcl at '$(_TCLDIR)'
+!endif
+!if !$(DOING_TK) && $(NEED_TK)
+!message *** Building against Tk at '$(_TKDIR)'
+!endif
+!message *** Intermediate directory will be '$(TMP_DIR)'
+!message *** Output directory will be '$(OUT_DIR)'
+!message *** Installation, if selected, will be in '$(_INSTALLDIR)'
+!message *** Suffix for binaries will be '$(SUFX)'
+!message *** Compiler version $(VCVER). Target machine is $(MACHINE)
+!message *** Host architecture is $(NATIVE_ARCH)
+
+!endif # ifdef _RULES_VC
diff --git a/pkgs/tdbcodbc1.0.6/win/targets.vc b/pkgs/tdbcodbc1.0.6/win/targets.vc
new file mode 100644 (file)
index 0000000..312022d
--- /dev/null
@@ -0,0 +1,98 @@
+#------------------------------------------------------------- -*- makefile -*-
+# targets.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file defines some standard targets for the convenience of extensions
+# and can be optionally included by the extension makefile.
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for docs.
+
+$(PROJECT): setup pkgindex $(PRJLIB)
+
+!ifdef PRJ_STUBOBJS
+$(PROJECT): $(PRJSTUBLIB)
+$(PRJSTUBLIB): $(PRJ_STUBOBJS)
+       $(LIBCMD) $**
+
+$(PRJ_STUBOBJS):
+       $(CCSTUBSCMD) %s
+!endif # PRJ_STUBOBJS
+
+!ifdef PRJ_MANIFEST
+$(PROJECT): $(PRJLIB).manifest
+$(PRJLIB).manifest: $(PRJ_MANIFEST)
+       @nmakehlp -s << $** >$@
+@MACHINE@        $(MACHINE:IX86=X86)
+<<
+!endif
+
+!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"
+$(PRJLIB): $(PRJ_OBJS) $(RESFILE)
+!if $(STATIC_BUILD)
+       $(LIBCMD) $**
+!else
+       $(DLLCMD) $**
+       $(_VC_MANIFEST_EMBED_DLL)
+!endif
+       -@del $*.exp
+!endif
+
+!if "$(PRJ_HEADERS)" != "" && "$(PRJ_OBJS)" != ""
+$(PRJ_OBJS): $(PRJ_HEADERS)
+!endif
+
+# If parent makefile has defined stub objects, add their installation
+# to the default install
+!if "$(PRJ_STUBOBJS)" != ""
+default-install: default-install-stubs
+!endif
+
+# Unlike the other default targets, these cannot be in rules.vc because
+# the executed command depends on existence of macro PRJ_HEADERS_PUBLIC
+# that the parent makefile will not define until after including rules-ext.vc
+!if "$(PRJ_HEADERS_PUBLIC)" != ""
+default-install: default-install-headers
+default-install-headers:
+       @echo Installing headers to '$(INCLUDE_INSTALL_DIR)'
+       @for %f in ($(PRJ_HEADERS_PUBLIC)) do @$(COPY) %f "$(INCLUDE_INSTALL_DIR)"
+!endif
+
+!if "$(DISABLE_STANDARD_TARGETS)" == ""
+DISABLE_STANDARD_TARGETS = 0
+!endif
+
+!if "$(DISABLE_TARGET_setup)" == ""
+DISABLE_TARGET_setup = 0
+!endif
+!if "$(DISABLE_TARGET_install)" == ""
+DISABLE_TARGET_install = 0
+!endif
+!if "$(DISABLE_TARGET_clean)" == ""
+DISABLE_TARGET_clean = 0
+!endif
+!if "$(DISABLE_TARGET_test)" == ""
+DISABLE_TARGET_test = 0
+!endif
+!if "$(DISABLE_TARGET_shell)" == ""
+DISABLE_TARGET_shell = 0
+!endif
+
+!if !$(DISABLE_STANDARD_TARGETS)
+!if !$(DISABLE_TARGET_setup)
+setup: default-setup
+!endif
+!if !$(DISABLE_TARGET_install)
+install: default-install
+!endif
+!if !$(DISABLE_TARGET_clean)
+clean: default-clean
+realclean: hose
+hose: default-hose
+distclean: realclean default-distclean
+!endif
+!if !$(DISABLE_TARGET_test)
+test: default-test
+!endif
+!if !$(DISABLE_TARGET_shell)
+shell: default-shell
+!endif
+!endif # DISABLE_STANDARD_TARGETS
diff --git a/pkgs/tdbcpostgres1.0.5/tclconfig/tcl.m4 b/pkgs/tdbcpostgres1.0.5/tclconfig/tcl.m4
deleted file mode 100644 (file)
index 203a05d..0000000
+++ /dev/null
@@ -1,4241 +0,0 @@
-# tcl.m4 --
-#
-#      This file provides a set of autoconf macros to help TEA-enable
-#      a Tcl extension.
-#
-# Copyright (c) 1999-2000 Ajuba Solutions.
-# Copyright (c) 2002-2005 ActiveState Corporation.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-
-AC_PREREQ(2.57)
-
-dnl TEA extensions pass us the version of TEA they think they
-dnl are compatible with (must be set in TEA_INIT below)
-dnl TEA_VERSION="3.10"
-
-# Possible values for key variables defined:
-#
-# TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem')
-# TEA_PLATFORM        - windows unix
-# TEA_TK_EXTENSION    - True if this is a Tk extension
-#
-
-#------------------------------------------------------------------------
-# TEA_PATH_TCLCONFIG --
-#
-#      Locate the tclConfig.sh file and perform a sanity check on
-#      the Tcl compile flags
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-tcl=...
-#
-#      Defines the following vars:
-#              TCL_BIN_DIR     Full path to the directory containing
-#                              the tclConfig.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_TCLCONFIG], [
-    dnl TEA specific: Make sure we are initialized
-    AC_REQUIRE([TEA_INIT])
-    #
-    # Ok, lets find the tcl configuration
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-tcl
-    #
-
-    if test x"${no_tcl}" = x ; then
-       # we reset no_tcl in case something fails here
-       no_tcl=true
-       AC_ARG_WITH(tcl,
-           AC_HELP_STRING([--with-tcl],
-               [directory containing tcl configuration (tclConfig.sh)]),
-           with_tclconfig="${withval}")
-       AC_MSG_CHECKING([for Tcl configuration])
-       AC_CACHE_VAL(ac_cv_c_tclconfig,[
-
-           # First check to see if --with-tcl was specified.
-           if test x"${with_tclconfig}" != x ; then
-               case "${with_tclconfig}" in
-                   */tclConfig.sh )
-                       if test -f "${with_tclconfig}"; then
-                           AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself])
-                           with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`"
-                       fi ;;
-               esac
-               if test -f "${with_tclconfig}/tclConfig.sh" ; then
-                   ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`"
-               else
-                   AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
-               fi
-           fi
-
-           # then check for a private Tcl installation
-           if test x"${ac_cv_c_tclconfig}" = x ; then
-               for i in \
-                       ../tcl \
-                       `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../tcl \
-                       `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../../tcl \
-                       `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # on Darwin, check in Framework installation locations
-           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
-               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
-                       `ls -d /Library/Frameworks 2>/dev/null` \
-                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
-                       `ls -d /System/Library/Frameworks 2>/dev/null` \
-                       ; do
-                   if test -f "$i/Tcl.framework/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # TEA specific: on Windows, check in common installation locations
-           if test "${TEA_PLATFORM}" = "windows" \
-               -a x"${ac_cv_c_tclconfig}" = x ; then
-               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
-                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few common install locations
-           if test x"${ac_cv_c_tclconfig}" = x ; then
-               for i in `ls -d ${libdir} 2>/dev/null` \
-                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
-                       `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
-                       `ls -d /usr/contrib/lib 2>/dev/null` \
-                       `ls -d /usr/lib 2>/dev/null` \
-                       `ls -d /usr/lib64 2>/dev/null` \
-                       `ls -d /usr/lib/tcl8.6 2>/dev/null` \
-                       `ls -d /usr/lib/tcl8.5 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few other private locations
-           if test x"${ac_cv_c_tclconfig}" = x ; then
-               for i in \
-                       ${srcdir}/../tcl \
-                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-       ])
-
-       if test x"${ac_cv_c_tclconfig}" = x ; then
-           TCL_BIN_DIR="# no Tcl configs found"
-           AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh])
-       else
-           no_tcl=
-           TCL_BIN_DIR="${ac_cv_c_tclconfig}"
-           AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PATH_TKCONFIG --
-#
-#      Locate the tkConfig.sh file
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-tk=...
-#
-#      Defines the following vars:
-#              TK_BIN_DIR      Full path to the directory containing
-#                              the tkConfig.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_TKCONFIG], [
-    #
-    # Ok, lets find the tk configuration
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-tk
-    #
-
-    if test x"${no_tk}" = x ; then
-       # we reset no_tk in case something fails here
-       no_tk=true
-       AC_ARG_WITH(tk,
-           AC_HELP_STRING([--with-tk],
-               [directory containing tk configuration (tkConfig.sh)]),
-           with_tkconfig="${withval}")
-       AC_MSG_CHECKING([for Tk configuration])
-       AC_CACHE_VAL(ac_cv_c_tkconfig,[
-
-           # First check to see if --with-tkconfig was specified.
-           if test x"${with_tkconfig}" != x ; then
-               case "${with_tkconfig}" in
-                   */tkConfig.sh )
-                       if test -f "${with_tkconfig}"; then
-                           AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself])
-                           with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`"
-                       fi ;;
-               esac
-               if test -f "${with_tkconfig}/tkConfig.sh" ; then
-                   ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`"
-               else
-                   AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
-               fi
-           fi
-
-           # then check for a private Tk library
-           if test x"${ac_cv_c_tkconfig}" = x ; then
-               for i in \
-                       ../tk \
-                       `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../tk \
-                       `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../../tk \
-                       `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # on Darwin, check in Framework installation locations
-           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then
-               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
-                       `ls -d /Library/Frameworks 2>/dev/null` \
-                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
-                       `ls -d /System/Library/Frameworks 2>/dev/null` \
-                       ; do
-                   if test -f "$i/Tk.framework/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few common install locations
-           if test x"${ac_cv_c_tkconfig}" = x ; then
-               for i in `ls -d ${libdir} 2>/dev/null` \
-                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
-                       `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
-                       `ls -d /usr/contrib/lib 2>/dev/null` \
-                       `ls -d /usr/lib 2>/dev/null` \
-                       `ls -d /usr/lib64 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # TEA specific: on Windows, check in common installation locations
-           if test "${TEA_PLATFORM}" = "windows" \
-               -a x"${ac_cv_c_tkconfig}" = x ; then
-               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
-                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few other private locations
-           if test x"${ac_cv_c_tkconfig}" = x ; then
-               for i in \
-                       ${srcdir}/../tk \
-                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-       ])
-
-       if test x"${ac_cv_c_tkconfig}" = x ; then
-           TK_BIN_DIR="# no Tk configs found"
-           AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh])
-       else
-           no_tk=
-           TK_BIN_DIR="${ac_cv_c_tkconfig}"
-           AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_TCLCONFIG --
-#
-#      Load the tclConfig.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              TCL_BIN_DIR
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TCL_BIN_DIR
-#              TCL_SRC_DIR
-#              TCL_LIB_FILE
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_TCLCONFIG], [
-    AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh])
-
-    if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
-        AC_MSG_RESULT([loading])
-       . "${TCL_BIN_DIR}/tclConfig.sh"
-    else
-        AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh])
-    fi
-
-    # eval is required to do the TCL_DBGX substitution
-    eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
-    eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
-
-    # If the TCL_BIN_DIR is the build directory (not the install directory),
-    # then set the common variable name to the value of the build variables.
-    # For example, the variable TCL_LIB_SPEC will be set to the value
-    # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
-    # instead of TCL_BUILD_LIB_SPEC since it will work with both an
-    # installed and uninstalled version of Tcl.
-    if test -f "${TCL_BIN_DIR}/Makefile" ; then
-        TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}"
-        TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}"
-        TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}"
-    elif test "`uname -s`" = "Darwin"; then
-       # If Tcl was built as a framework, attempt to use the libraries
-       # from the framework at the given location so that linking works
-       # against Tcl.framework installed in an arbitrary location.
-       case ${TCL_DEFS} in
-           *TCL_FRAMEWORK*)
-               if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
-                   for i in "`cd "${TCL_BIN_DIR}"; pwd`" \
-                            "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do
-                       if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then
-                           TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}"
-                           break
-                       fi
-                   done
-               fi
-               if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then
-                   TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}"
-                   TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"
-               fi
-               ;;
-       esac
-    fi
-
-    # eval is required to do the TCL_DBGX substitution
-    eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
-    eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
-    eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
-    eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
-
-    AC_SUBST(TCL_VERSION)
-    AC_SUBST(TCL_PATCH_LEVEL)
-    AC_SUBST(TCL_BIN_DIR)
-    AC_SUBST(TCL_SRC_DIR)
-
-    AC_SUBST(TCL_LIB_FILE)
-    AC_SUBST(TCL_LIB_FLAG)
-    AC_SUBST(TCL_LIB_SPEC)
-
-    AC_SUBST(TCL_STUB_LIB_FILE)
-    AC_SUBST(TCL_STUB_LIB_FLAG)
-    AC_SUBST(TCL_STUB_LIB_SPEC)
-
-    AC_MSG_CHECKING([platform])
-    hold_cc=$CC; CC="$TCL_CC"
-    AC_TRY_COMPILE(,[
-           #ifdef _WIN32
-               #error win32
-           #endif
-       ], [
-           TEA_PLATFORM="unix"
-           CYGPATH=echo
-       ], [
-           TEA_PLATFORM="windows"
-           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)   ]
-    )
-    CC=$hold_cc
-    AC_MSG_RESULT($TEA_PLATFORM)
-
-    # The BUILD_$pkg is to define the correct extern storage class
-    # handling when making this package
-    AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [],
-           [Building extension source?])
-    # Do this here as we have fully defined TEA_PLATFORM now
-    if test "${TEA_PLATFORM}" = "windows" ; then
-       EXEEXT=".exe"
-       CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp"
-    fi
-
-    # TEA specific:
-    AC_SUBST(CLEANFILES)
-    AC_SUBST(TCL_LIBS)
-    AC_SUBST(TCL_DEFS)
-    AC_SUBST(TCL_EXTRA_CFLAGS)
-    AC_SUBST(TCL_LD_FLAGS)
-    AC_SUBST(TCL_SHLIB_LD_LIBS)
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_TKCONFIG --
-#
-#      Load the tkConfig.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              TK_BIN_DIR
-#
-# Results:
-#
-#      Sets the following vars that should be in tkConfig.sh:
-#              TK_BIN_DIR
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_TKCONFIG], [
-    AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh])
-
-    if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then
-        AC_MSG_RESULT([loading])
-       . "${TK_BIN_DIR}/tkConfig.sh"
-    else
-        AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh])
-    fi
-
-    # eval is required to do the TK_DBGX substitution
-    eval "TK_LIB_FILE=\"${TK_LIB_FILE}\""
-    eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\""
-
-    # If the TK_BIN_DIR is the build directory (not the install directory),
-    # then set the common variable name to the value of the build variables.
-    # For example, the variable TK_LIB_SPEC will be set to the value
-    # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC
-    # instead of TK_BUILD_LIB_SPEC since it will work with both an
-    # installed and uninstalled version of Tcl.
-    if test -f "${TK_BIN_DIR}/Makefile" ; then
-        TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}"
-        TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}"
-        TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}"
-    elif test "`uname -s`" = "Darwin"; then
-       # If Tk was built as a framework, attempt to use the libraries
-       # from the framework at the given location so that linking works
-       # against Tk.framework installed in an arbitrary location.
-       case ${TK_DEFS} in
-           *TK_FRAMEWORK*)
-               if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then
-                   for i in "`cd "${TK_BIN_DIR}"; pwd`" \
-                            "`cd "${TK_BIN_DIR}"/../..; pwd`"; do
-                       if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then
-                           TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}"
-                           break
-                       fi
-                   done
-               fi
-               if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then
-                   TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}"
-                   TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"
-               fi
-               ;;
-       esac
-    fi
-
-    # eval is required to do the TK_DBGX substitution
-    eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\""
-    eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\""
-    eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\""
-    eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\""
-
-    # TEA specific: Ensure windowingsystem is defined
-    if test "${TEA_PLATFORM}" = "unix" ; then
-       case ${TK_DEFS} in
-           *MAC_OSX_TK*)
-               AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?])
-               TEA_WINDOWINGSYSTEM="aqua"
-               ;;
-           *)
-               TEA_WINDOWINGSYSTEM="x11"
-               ;;
-       esac
-    elif test "${TEA_PLATFORM}" = "windows" ; then
-       TEA_WINDOWINGSYSTEM="win32"
-    fi
-
-    AC_SUBST(TK_VERSION)
-    AC_SUBST(TK_BIN_DIR)
-    AC_SUBST(TK_SRC_DIR)
-
-    AC_SUBST(TK_LIB_FILE)
-    AC_SUBST(TK_LIB_FLAG)
-    AC_SUBST(TK_LIB_SPEC)
-
-    AC_SUBST(TK_STUB_LIB_FILE)
-    AC_SUBST(TK_STUB_LIB_FLAG)
-    AC_SUBST(TK_STUB_LIB_SPEC)
-
-    # TEA specific:
-    AC_SUBST(TK_LIBS)
-    AC_SUBST(TK_XINCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_PROG_TCLSH
-#      Determine the fully qualified path name of the tclsh executable
-#      in the Tcl build directory or the tclsh installed in a bin
-#      directory. This macro will correctly determine the name
-#      of the tclsh executable even if tclsh has not yet been
-#      built in the build directory. The tclsh found is always
-#      associated with a tclConfig.sh file. This tclsh should be used
-#      only for running extension test cases. It should never be
-#      or generation of files (like pkgIndex.tcl) at build time.
-#
-# Arguments:
-#      none
-#
-# Results:
-#      Substitutes the following vars:
-#              TCLSH_PROG
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PROG_TCLSH], [
-    AC_MSG_CHECKING([for tclsh])
-    if test -f "${TCL_BIN_DIR}/Makefile" ; then
-        # tclConfig.sh is in Tcl build directory
-        if test "${TEA_PLATFORM}" = "windows"; then
-          if test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
-          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}"
-          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}"
-          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}"
-          fi
-        else
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh"
-        fi
-    else
-        # tclConfig.sh is in install location
-        if test "${TEA_PLATFORM}" = "windows"; then
-            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
-        else
-            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}"
-        fi
-        list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \
-              `ls -d ${TCL_BIN_DIR}/..     2>/dev/null` \
-              `ls -d ${TCL_PREFIX}/bin     2>/dev/null`"
-        for i in $list ; do
-            if test -f "$i/${TCLSH_PROG}" ; then
-                REAL_TCL_BIN_DIR="`cd "$i"; pwd`/"
-                break
-            fi
-        done
-        TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}"
-    fi
-    AC_MSG_RESULT([${TCLSH_PROG}])
-    AC_SUBST(TCLSH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_PROG_WISH
-#      Determine the fully qualified path name of the wish executable
-#      in the Tk build directory or the wish installed in a bin
-#      directory. This macro will correctly determine the name
-#      of the wish executable even if wish has not yet been
-#      built in the build directory. The wish found is always
-#      associated with a tkConfig.sh file. This wish should be used
-#      only for running extension test cases. It should never be
-#      or generation of files (like pkgIndex.tcl) at build time.
-#
-# Arguments:
-#      none
-#
-# Results:
-#      Substitutes the following vars:
-#              WISH_PROG
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PROG_WISH], [
-    AC_MSG_CHECKING([for wish])
-    if test -f "${TK_BIN_DIR}/Makefile" ; then
-        # tkConfig.sh is in Tk build directory
-        if test "${TEA_PLATFORM}" = "windows"; then
-          if test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
-          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}s${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}$s{EXEEXT}"
-          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}"
-          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}"
-          fi
-        else
-            WISH_PROG="${TK_BIN_DIR}/wish"
-        fi
-    else
-        # tkConfig.sh is in install location
-        if test "${TEA_PLATFORM}" = "windows"; then
-            WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
-        else
-            WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}"
-        fi
-        list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \
-              `ls -d ${TK_BIN_DIR}/..     2>/dev/null` \
-              `ls -d ${TK_PREFIX}/bin     2>/dev/null`"
-        for i in $list ; do
-            if test -f "$i/${WISH_PROG}" ; then
-                REAL_TK_BIN_DIR="`cd "$i"; pwd`/"
-                break
-            fi
-        done
-        WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}"
-    fi
-    AC_MSG_RESULT([${WISH_PROG}])
-    AC_SUBST(WISH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_SHARED --
-#
-#      Allows the building of shared libraries
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-shared=yes|no
-#              --enable-stubs=yes|no
-#
-#      Defines the following vars:
-#              STATIC_BUILD    Used for building import/export libraries
-#                              on Windows.
-#
-#      Sets the following vars:
-#              SHARED_BUILD    Value of 1 or 0
-#               STUBS_BUILD     Value if 1 or 0
-#               USE_TCL_STUBS   Value true: if SHARED_BUILD or --enable-stubs
-#               USE_TCLOO_STUBS Value true: if SHARED_BUILD or --enable-stubs
-#               USE_TK_STUBS    Value true: if SHARED_BUILD or --enable-stubs
-#                                AND TEA_WINDOWING_SYSTEM != ""
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ENABLE_SHARED], [
-    AC_MSG_CHECKING([how to build libraries])
-    AC_ARG_ENABLE(shared,
-       AC_HELP_STRING([--enable-shared],
-           [build and link with shared libraries (default: on)]),
-       [shared_ok=$enableval], [shared_ok=yes])
-
-    if test "${enable_shared+set}" = set; then
-       enableval="$enable_shared"
-       shared_ok=$enableval
-    else
-       shared_ok=yes
-    fi
-
-    AC_ARG_ENABLE(stubs,
-       AC_HELP_STRING([--enable-stubs],
-           [build and link with stub libraries. Always true for shared builds (default: on)]),
-       [stubs_ok=$enableval], [stubs_ok=yes])
-
-    if test "${enable_stubs+set}" = set; then
-       enableval="$enable_stubs"
-       stubs_ok=$enableval
-    else
-       stubs_ok=yes
-    fi
-
-    # Stubs are always enabled for shared builds
-    if test "$shared_ok" = "yes" ; then
-       AC_MSG_RESULT([shared])
-       SHARED_BUILD=1
-        STUBS_BUILD=1
-    else
-       AC_MSG_RESULT([static])
-       SHARED_BUILD=0
-       AC_DEFINE(STATIC_BUILD, 1, [This a static build])
-        if test "$stubs_ok" = "yes" ; then
-          STUBS_BUILD=1
-        else
-          STUBS_BUILD=0
-        fi
-    fi
-    if test "${STUBS_BUILD}" = "1" ; then
-      AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs])
-      AC_DEFINE(USE_TCLOO_STUBS, 1, [Use TclOO stubs])
-      if test "${TEA_WINDOWINGSYSTEM}" != ""; then
-        AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs])
-      fi
-    fi
-
-    AC_SUBST(SHARED_BUILD)
-    AC_SUBST(STUBS_BUILD)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_THREADS --
-#
-#      Specify if thread support should be enabled.  If "yes" is specified
-#      as an arg (optional), threads are enabled by default, "no" means
-#      threads are disabled.  "yes" is the default.
-#
-#      TCL_THREADS is checked so that if you are compiling an extension
-#      against a threaded core, your extension must be compiled threaded
-#      as well.
-#
-#      Note that it is legal to have a thread enabled extension run in a
-#      threaded or non-threaded Tcl core, but a non-threaded extension may
-#      only run in a non-threaded Tcl core.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-threads
-#
-#      Sets the following vars:
-#              THREADS_LIBS    Thread library(s)
-#
-#      Defines the following vars:
-#              TCL_THREADS
-#              _REENTRANT
-#              _THREAD_SAFE
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_THREADS], [
-    AC_ARG_ENABLE(threads,
-       AC_HELP_STRING([--enable-threads],
-           [build with threads]),
-       [tcl_ok=$enableval], [tcl_ok=yes])
-
-    if test "${enable_threads+set}" = set; then
-       enableval="$enable_threads"
-       tcl_ok=$enableval
-    else
-       tcl_ok=yes
-    fi
-
-    if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
-       TCL_THREADS=1
-
-       if test "${TEA_PLATFORM}" != "windows" ; then
-           # We are always OK on Windows, so check what this platform wants:
-
-           # USE_THREAD_ALLOC tells us to try the special thread-based
-           # allocator that significantly reduces lock contention
-           AC_DEFINE(USE_THREAD_ALLOC, 1,
-               [Do we want to use the threaded memory allocator?])
-           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
-           if test "`uname -s`" = "SunOS" ; then
-               AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
-                       [Do we really want to follow the standard? Yes we do!])
-           fi
-           AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?])
-           AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
-           if test "$tcl_ok" = "no"; then
-               # Check a little harder for __pthread_mutex_init in the same
-               # library, as some systems hide it there until pthread.h is
-               # defined.  We could alternatively do an AC_TRY_COMPILE with
-               # pthread.h, but that will work with libpthread really doesn't
-               # exist, like AIX 4.2.  [Bug: 4359]
-               AC_CHECK_LIB(pthread, __pthread_mutex_init,
-                   tcl_ok=yes, tcl_ok=no)
-           fi
-
-           if test "$tcl_ok" = "yes"; then
-               # The space is needed
-               THREADS_LIBS=" -lpthread"
-           else
-               AC_CHECK_LIB(pthreads, pthread_mutex_init,
-                   tcl_ok=yes, tcl_ok=no)
-               if test "$tcl_ok" = "yes"; then
-                   # The space is needed
-                   THREADS_LIBS=" -lpthreads"
-               else
-                   AC_CHECK_LIB(c, pthread_mutex_init,
-                       tcl_ok=yes, tcl_ok=no)
-                   if test "$tcl_ok" = "no"; then
-                       AC_CHECK_LIB(c_r, pthread_mutex_init,
-                           tcl_ok=yes, tcl_ok=no)
-                       if test "$tcl_ok" = "yes"; then
-                           # The space is needed
-                           THREADS_LIBS=" -pthread"
-                       else
-                           TCL_THREADS=0
-                           AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled])
-                       fi
-                   fi
-               fi
-           fi
-       fi
-    else
-       TCL_THREADS=0
-    fi
-    # Do checking message here to not mess up interleaved configure output
-    AC_MSG_CHECKING([for building with threads])
-    if test "${TCL_THREADS}" = 1; then
-       AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?])
-       AC_MSG_RESULT([yes (default)])
-    else
-       AC_MSG_RESULT([no])
-    fi
-    # TCL_THREADS sanity checking.  See if our request for building with
-    # threads is the same as the way Tcl was built.  If not, warn the user.
-    case ${TCL_DEFS} in
-       *THREADS=1*)
-           if test "${TCL_THREADS}" = "0"; then
-               AC_MSG_WARN([
-    Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
-    that IS thread-enabled.  It is recommended to use --enable-threads.])
-           fi
-           ;;
-       *)
-           if test "${TCL_THREADS}" = "1"; then
-               AC_MSG_WARN([
-    --enable-threads requested, but building against a Tcl that is NOT
-    thread-enabled.  This is an OK configuration that will also run in
-    a thread-enabled core.])
-           fi
-           ;;
-    esac
-    AC_SUBST(TCL_THREADS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_SYMBOLS --
-#
-#      Specify if debugging symbols should be used.
-#      Memory (TCL_MEM_DEBUG) debugging can also be enabled.
-#
-# Arguments:
-#      none
-#
-#      TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives
-#      the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted.
-#      Requires the following vars to be set in the Makefile:
-#              CFLAGS_DEFAULT
-#              LDFLAGS_DEFAULT
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-symbols
-#
-#      Defines the following vars:
-#              CFLAGS_DEFAULT  Sets to $(CFLAGS_DEBUG) if true
-#                              Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false
-#              LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
-#                              Sets to $(LDFLAGS_OPTIMIZE) if false
-#              DBGX            Formerly used as debug library extension;
-#                              always blank now.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_SYMBOLS], [
-    dnl TEA specific: Make sure we are initialized
-    AC_REQUIRE([TEA_CONFIG_CFLAGS])
-    AC_MSG_CHECKING([for build with symbols])
-    AC_ARG_ENABLE(symbols,
-       AC_HELP_STRING([--enable-symbols],
-           [build with debugging symbols (default: off)]),
-       [tcl_ok=$enableval], [tcl_ok=no])
-    DBGX=""
-    if test "$tcl_ok" = "no"; then
-       CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG"
-       LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
-       AC_MSG_RESULT([no])
-    else
-       CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
-       LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
-       if test "$tcl_ok" = "yes"; then
-           AC_MSG_RESULT([yes (standard debugging)])
-       fi
-    fi
-    # TEA specific:
-    if test "${TEA_PLATFORM}" != "windows" ; then
-       LDFLAGS_DEFAULT="${LDFLAGS}"
-    fi
-    AC_SUBST(CFLAGS_DEFAULT)
-    AC_SUBST(LDFLAGS_DEFAULT)
-    AC_SUBST(TCL_DBGX)
-
-    if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
-       AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?])
-    fi
-
-    if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
-       if test "$tcl_ok" = "all"; then
-           AC_MSG_RESULT([enabled symbols mem debugging])
-       else
-           AC_MSG_RESULT([enabled $tcl_ok debugging])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_LANGINFO --
-#
-#      Allows use of modern nl_langinfo check for better l10n.
-#      This is only relevant for Unix.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-langinfo=yes|no (default is yes)
-#
-#      Defines the following vars:
-#              HAVE_LANGINFO   Triggers use of nl_langinfo if defined.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_LANGINFO], [
-    AC_ARG_ENABLE(langinfo,
-       AC_HELP_STRING([--enable-langinfo],
-           [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]),
-       [langinfo_ok=$enableval], [langinfo_ok=yes])
-
-    HAVE_LANGINFO=0
-    if test "$langinfo_ok" = "yes"; then
-       AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no])
-    fi
-    AC_MSG_CHECKING([whether to use nl_langinfo])
-    if test "$langinfo_ok" = "yes"; then
-       AC_CACHE_VAL(tcl_cv_langinfo_h, [
-           AC_TRY_COMPILE([#include <langinfo.h>], [nl_langinfo(CODESET);],
-                   [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])])
-       AC_MSG_RESULT([$tcl_cv_langinfo_h])
-       if test $tcl_cv_langinfo_h = yes; then
-           AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?])
-       fi
-    else
-       AC_MSG_RESULT([$langinfo_ok])
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_CONFIG_SYSTEM
-#
-#      Determine what the system is (some things cannot be easily checked
-#      on a feature-driven basis, alas). This can usually be done via the
-#      "uname" command.
-#
-# Arguments:
-#      none
-#
-# Results:
-#      Defines the following var:
-#
-#      system -        System/platform/version identification code.
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_CONFIG_SYSTEM], [
-    AC_CACHE_CHECK([system version], tcl_cv_sys_version, [
-       # TEA specific:
-       if test "${TEA_PLATFORM}" = "windows" ; then
-           tcl_cv_sys_version=windows
-       else
-           tcl_cv_sys_version=`uname -s`-`uname -r`
-           if test "$?" -ne 0 ; then
-               AC_MSG_WARN([can't find uname command])
-               tcl_cv_sys_version=unknown
-           else
-               if test "`uname -s`" = "AIX" ; then
-                   tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
-               fi
-           fi
-       fi
-    ])
-    system=$tcl_cv_sys_version
-])
-
-#--------------------------------------------------------------------
-# TEA_CONFIG_CFLAGS
-#
-#      Try to determine the proper flags to pass to the compiler
-#      for building shared libraries and other such nonsense.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines and substitutes the following vars:
-#
-#      DL_OBJS, DL_LIBS - removed for TEA, only needed by core.
-#       LDFLAGS -      Flags to pass to the compiler when linking object
-#                       files into an executable application binary such
-#                       as tclsh.
-#       LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
-#                       that tell the run-time dynamic linker where to look
-#                       for shared libraries such as libtcl.so.  Depends on
-#                       the variable LIB_RUNTIME_DIR in the Makefile. Could
-#                       be the same as CC_SEARCH_FLAGS if ${CC} is used to link.
-#       CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib",
-#                       that tell the run-time dynamic linker where to look
-#                       for shared libraries such as libtcl.so.  Depends on
-#                       the variable LIB_RUNTIME_DIR in the Makefile.
-#       SHLIB_CFLAGS -  Flags to pass to cc when compiling the components
-#                       of a shared library (may request position-independent
-#                       code, among other things).
-#       SHLIB_LD -      Base command to use for combining object files
-#                       into a shared library.
-#       SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
-#                       creating shared libraries.  This symbol typically
-#                       goes at the end of the "ld" commands that build
-#                       shared libraries. The value of the symbol defaults to
-#                       "${LIBS}" if all of the dependent libraries should
-#                       be specified when creating a shared library.  If
-#                       dependent libraries should not be specified (as on
-#                       SunOS 4.x, where they cause the link to fail, or in
-#                       general if Tcl and Tk aren't themselves shared
-#                       libraries), then this symbol has an empty string
-#                       as its value.
-#       SHLIB_SUFFIX -  Suffix to use for the names of dynamically loadable
-#                       extensions.  An empty string means we don't know how
-#                       to use shared libraries on this platform.
-#       LIB_SUFFIX -    Specifies everything that comes after the "libfoo"
-#                       in a static or shared library name, using the $PACKAGE_VERSION variable
-#                       to put the version in the right place.  This is used
-#                       by platforms that need non-standard library names.
-#                       Examples:  ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs
-#                       to have a version after the .so, and ${PACKAGE_VERSION}.a
-#                       on AIX, since a shared library needs to have
-#                       a .a extension whereas shared objects for loadable
-#                       extensions have a .so extension.  Defaults to
-#                       ${PACKAGE_VERSION}${SHLIB_SUFFIX}.
-#      CFLAGS_DEBUG -
-#                      Flags used when running the compiler in debug mode
-#      CFLAGS_OPTIMIZE -
-#                      Flags used when running the compiler in optimize mode
-#      CFLAGS -        Additional CFLAGS added as necessary (usually 64-bit)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_CONFIG_CFLAGS], [
-    dnl TEA specific: Make sure we are initialized
-    AC_REQUIRE([TEA_INIT])
-
-    # Step 0.a: Enable 64 bit support?
-
-    AC_MSG_CHECKING([if 64bit support is requested])
-    AC_ARG_ENABLE(64bit,
-       AC_HELP_STRING([--enable-64bit],
-           [enable 64bit support (default: off)]),
-       [do64bit=$enableval], [do64bit=no])
-    AC_MSG_RESULT([$do64bit])
-
-    # Step 0.b: Enable Solaris 64 bit VIS support?
-
-    AC_MSG_CHECKING([if 64bit Sparc VIS support is requested])
-    AC_ARG_ENABLE(64bit-vis,
-       AC_HELP_STRING([--enable-64bit-vis],
-           [enable 64bit Sparc VIS support (default: off)]),
-       [do64bitVIS=$enableval], [do64bitVIS=no])
-    AC_MSG_RESULT([$do64bitVIS])
-    # Force 64bit on with VIS
-    AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes])
-
-    # Step 0.c: Check if visibility support is available. Do this here so
-    # that platform specific alternatives can be used below if this fails.
-
-    AC_CACHE_CHECK([if compiler supports visibility "hidden"],
-       tcl_cv_cc_visibility_hidden, [
-       hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror"
-       AC_TRY_LINK([
-           extern __attribute__((__visibility__("hidden"))) void f(void);
-           void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes,
-           tcl_cv_cc_visibility_hidden=no)
-       CFLAGS=$hold_cflags])
-    AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [
-       AC_DEFINE(MODULE_SCOPE,
-           [extern __attribute__((__visibility__("hidden")))],
-           [Compiler support for module scope symbols])
-       AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols])
-    ])
-
-    # Step 0.d: Disable -rpath support?
-
-    AC_MSG_CHECKING([if rpath support is requested])
-    AC_ARG_ENABLE(rpath,
-       AC_HELP_STRING([--disable-rpath],
-           [disable rpath support (default: on)]),
-       [doRpath=$enableval], [doRpath=yes])
-    AC_MSG_RESULT([$doRpath])
-
-    # TEA specific: Cross-compiling options for Windows/CE builds?
-
-    AS_IF([test "${TEA_PLATFORM}" = windows], [
-       AC_MSG_CHECKING([if Windows/CE build is requested])
-       AC_ARG_ENABLE(wince,
-           AC_HELP_STRING([--enable-wince],
-               [enable Win/CE support (where applicable)]),
-           [doWince=$enableval], [doWince=no])
-       AC_MSG_RESULT([$doWince])
-    ])
-
-    # Set the variable "system" to hold the name and version number
-    # for the system.
-
-    TEA_CONFIG_SYSTEM
-
-    # Require ranlib early so we can override it in special cases below.
-
-    AC_REQUIRE([AC_PROG_RANLIB])
-
-    # Set configuration options based on system name and version.
-    # This is similar to Tcl's unix/tcl.m4 except that we've added a
-    # "windows" case and removed some core-only vars.
-
-    do64bit_ok=no
-    # default to '{$LIBS}' and set to "" on per-platform necessary basis
-    SHLIB_LD_LIBS='${LIBS}'
-    # When ld needs options to work in 64-bit mode, put them in
-    # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load]
-    # is disabled by the user. [Bug 1016796]
-    LDFLAGS_ARCH=""
-    UNSHARED_LIB_SUFFIX=""
-    # TEA specific: use PACKAGE_VERSION instead of VERSION
-    TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
-    ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
-    TCL_LIB_VERSIONS_OK=ok
-    CFLAGS_DEBUG=-g
-    AS_IF([test "$GCC" = yes], [
-       CFLAGS_OPTIMIZE=-O2
-       CFLAGS_WARNING="-Wall"
-    ], [
-       CFLAGS_OPTIMIZE=-O
-       CFLAGS_WARNING=""
-    ])
-    AC_CHECK_TOOL(AR, ar)
-    STLIB_LD='${AR} cr'
-    LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
-    AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION=""],[SHLIB_VERSION=".$SHLIB_VERSION"])
-    case $system in
-       # TEA specific:
-       windows)
-           # This is a 2-stage check to make sure we have the 64-bit SDK
-           # We have to know where the SDK is installed.
-           # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs
-           # MACHINE is IX86 for LINK, but this is used by the manifest,
-           # which requires x86|amd64|ia64.
-           MACHINE="X86"
-           if test "$do64bit" != "no" ; then
-               if test "x${MSSDK}x" = "xx" ; then
-                   MSSDK="C:/Progra~1/Microsoft Platform SDK"
-               fi
-               MSSDK=`echo "$MSSDK" | sed -e  's!\\\!/!g'`
-               PATH64=""
-               case "$do64bit" in
-                   amd64|x64|yes)
-                       MACHINE="AMD64" ; # default to AMD64 64-bit build
-                       PATH64="${MSSDK}/Bin/Win64/x86/AMD64"
-                       ;;
-                   ia64)
-                       MACHINE="IA64"
-                       PATH64="${MSSDK}/Bin/Win64"
-                       ;;
-               esac
-               if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then
-                   AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode])
-                   AC_MSG_WARN([Ensure latest Platform SDK is installed])
-                   do64bit="no"
-               else
-                   AC_MSG_RESULT([   Using 64-bit $MACHINE mode])
-                   do64bit_ok="yes"
-               fi
-           fi
-
-           if test "$doWince" != "no" ; then
-               if test "$do64bit" != "no" ; then
-                   AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible])
-               fi
-               if test "$GCC" = "yes" ; then
-                   AC_MSG_ERROR([Windows/CE and GCC builds incompatible])
-               fi
-               TEA_PATH_CELIB
-               # Set defaults for common evc4/PPC2003 setup
-               # Currently Tcl requires 300+, possibly 420+ for sockets
-               CEVERSION=420;          # could be 211 300 301 400 420 ...
-               TARGETCPU=ARMV4;        # could be ARMV4 ARM MIPS SH3 X86 ...
-               ARCH=ARM;               # could be ARM MIPS X86EM ...
-               PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
-               if test "$doWince" != "yes"; then
-                   # If !yes then the user specified something
-                   # Reset ARCH to allow user to skip specifying it
-                   ARCH=
-                   eval `echo $doWince | awk -F, '{ \
-           if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \
-           if ([$]1 < 400)   { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
-           if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \
-           if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \
-           if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \
-                   }'`
-                   if test "x${ARCH}" = "x" ; then
-                       ARCH=$TARGETCPU;
-                   fi
-               fi
-               OSVERSION=WCE$CEVERSION;
-               if test "x${WCEROOT}" = "x" ; then
-                       WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
-                   if test ! -d "${WCEROOT}" ; then
-                       WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
-                   fi
-               fi
-               if test "x${SDKROOT}" = "x" ; then
-                   SDKROOT="C:/Program Files/Windows CE Tools"
-                   if test ! -d "${SDKROOT}" ; then
-                       SDKROOT="C:/Windows CE Tools"
-                   fi
-               fi
-               WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
-               SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
-               if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \
-                   -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
-                   AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]])
-                   doWince="no"
-               else
-                   # We could PATH_NOSPACE these, but that's not important,
-                   # as long as we quote them when used.
-                   CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
-                   if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
-                       CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
-                   fi
-                   CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
-               fi
-           fi
-
-           if test "$GCC" != "yes" ; then
-               if test "${SHARED_BUILD}" = "0" ; then
-                   runtime=-MT
-               else
-                   runtime=-MD
-               fi
-               case "x`echo \${VisualStudioVersion}`" in
-                   x1[[4-9]]*)
-                       lflags="${lflags} -nodefaultlib:libucrt.lib"
-                       TEA_ADD_LIBS([ucrt.lib])
-                   ;;
-                   *)
-                   ;;
-               esac
-
-                if test "$do64bit" != "no" ; then
-                   # All this magic is necessary for the Win64 SDK RC1 - hobbs
-                   CC="\"${PATH64}/cl.exe\""
-                   CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\""
-                   RC="\"${MSSDK}/bin/rc.exe\""
-                   lflags="${lflags} -nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\""
-                   LINKBIN="\"${PATH64}/link.exe\""
-                   CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d"
-                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
-                   # Avoid 'unresolved external symbol __security_cookie'
-                   # errors, c.f. http://support.microsoft.com/?id=894573
-                   TEA_ADD_LIBS([bufferoverflowU.lib])
-               elif test "$doWince" != "no" ; then
-                   CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
-                   if test "${TARGETCPU}" = "X86"; then
-                       CC="\"${CEBINROOT}/cl.exe\""
-                   else
-                       CC="\"${CEBINROOT}/cl${ARCH}.exe\""
-                   fi
-                   CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
-                   RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
-                   arch=`echo ${ARCH} | awk '{print tolower([$]0)}'`
-                   defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS"
-                   if test "${SHARED_BUILD}" = "1" ; then
-                       # Static CE builds require static celib as well
-                       defs="${defs} _DLL"
-                   fi
-                   for i in $defs ; do
-                       AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i)
-                   done
-                   AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version])
-                   AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version])
-                   CFLAGS_DEBUG="-nologo -Zi -Od"
-                   CFLAGS_OPTIMIZE="-nologo -Ox"
-                   lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
-                   lflags="${lflags} -MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
-                   LINKBIN="\"${CEBINROOT}/link.exe\""
-                   AC_SUBST(CELIB_DIR)
-               else
-                   RC="rc"
-                   lflags="${lflags} -nologo"
-                   LINKBIN="link"
-                   CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d"
-                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
-               fi
-           fi
-
-           if test "$GCC" = "yes"; then
-               # mingw gcc mode
-               AC_CHECK_TOOL(RC, windres)
-               CFLAGS_DEBUG="-g"
-               CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
-               SHLIB_LD='${CC} -shared'
-               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
-               LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}"
-               LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}"
-
-               AC_CACHE_CHECK(for cross-compile version of gcc,
-                       ac_cv_cross,
-                       AC_TRY_COMPILE([
-                           #ifdef _WIN32
-                               #error cross-compiler
-                           #endif
-                       ], [],
-                       ac_cv_cross=yes,
-                       ac_cv_cross=no)
-                     )
-                     if test "$ac_cv_cross" = "yes"; then
-                       case "$do64bit" in
-                           amd64|x64|yes)
-                               CC="x86_64-w64-mingw32-gcc"
-                               LD="x86_64-w64-mingw32-ld"
-                               AR="x86_64-w64-mingw32-ar"
-                               RANLIB="x86_64-w64-mingw32-ranlib"
-                               RC="x86_64-w64-mingw32-windres"
-                           ;;
-                           *)
-                               CC="i686-w64-mingw32-gcc"
-                               LD="i686-w64-mingw32-ld"
-                               AR="i686-w64-mingw32-ar"
-                               RANLIB="i686-w64-mingw32-ranlib"
-                               RC="i686-w64-mingw32-windres"
-                           ;;
-                       esac
-               fi
-
-           else
-               SHLIB_LD="${LINKBIN} -dll ${lflags}"
-               # link -lib only works when -lib is the first arg
-               STLIB_LD="${LINKBIN} -lib ${lflags}"
-               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib'
-               PATHTYPE=-w
-               # For information on what debugtype is most useful, see:
-               # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
-               # and also
-               # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx
-               # This essentially turns it all on.
-               LDFLAGS_DEBUG="-debug -debugtype:cv"
-               LDFLAGS_OPTIMIZE="-release"
-               if test "$doWince" != "no" ; then
-                   LDFLAGS_CONSOLE="-link ${lflags}"
-                   LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
-               else
-                   LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
-                   LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
-               fi
-           fi
-
-           SHLIB_SUFFIX=".dll"
-           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll'
-
-           TCL_LIB_VERSIONS_OK=nodots
-           ;;
-       AIX-*)
-           AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [
-               # AIX requires the _r compiler when gcc isn't being used
-               case "${CC}" in
-                   *_r|*_r\ *)
-                       # ok ...
-                       ;;
-                   *)
-                       # Make sure only first arg gets _r
-                       CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'`
-                       ;;
-               esac
-               AC_MSG_RESULT([Using $CC for compiling with threads])
-           ])
-           LIBS="$LIBS -lc"
-           SHLIB_CFLAGS=""
-           SHLIB_SUFFIX=".so"
-
-           LD_LIBRARY_PATH_VAR="LIBPATH"
-
-           # Check to enable 64-bit flags for compiler/linker
-           AS_IF([test "$do64bit" = yes], [
-               AS_IF([test "$GCC" = yes], [
-                   AC_MSG_WARN([64bit mode not supported with GCC on $system])
-               ], [
-                   do64bit_ok=yes
-                   CFLAGS="$CFLAGS -q64"
-                   LDFLAGS_ARCH="-q64"
-                   RANLIB="${RANLIB} -X64"
-                   AR="${AR} -X64"
-                   SHLIB_LD_FLAGS="-b64"
-               ])
-           ])
-
-           AS_IF([test "`uname -m`" = ia64], [
-               # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
-               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
-               AS_IF([test "$GCC" = yes], [
-                   CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               ], [
-                   CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
-               ])
-               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
-           ], [
-               AS_IF([test "$GCC" = yes], [
-                   SHLIB_LD='${CC} -shared -Wl,-bexpall'
-               ], [
-                   SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry"
-                   LDFLAGS="$LDFLAGS -brtl"
-               ])
-               SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}"
-               CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ])
-           ;;
-       BeOS*)
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -nostart'
-           SHLIB_SUFFIX=".so"
-
-           #-----------------------------------------------------------
-           # Check for inet_ntoa in -lbind, for BeOS (which also needs
-           # -lsocket, even if the network functions are in -lnet which
-           # is always linked to, for compatibility.
-           #-----------------------------------------------------------
-           AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"])
-           ;;
-       BSD/OS-4.*)
-           SHLIB_CFLAGS="-export-dynamic -fPIC"
-           SHLIB_LD='${CC} -shared'
-           SHLIB_SUFFIX=".so"
-           LDFLAGS="$LDFLAGS -export-dynamic"
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       CYGWIN_*)
-           SHLIB_CFLAGS=""
-           SHLIB_LD='${CC} -shared'
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$[@].a"
-           SHLIB_SUFFIX=".dll"
-           EXEEXT=".exe"
-           do64bit_ok=yes
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       Haiku*)
-           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
-           AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
-           ;;
-       HP-UX-*.11.*)
-           # Use updated header definitions where possible
-           AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?])
-           # TEA specific: Needed by Tcl, but not most extensions
-           #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
-           #LIBS="$LIBS -lxnet"               # Use the XOPEN network library
-
-           AS_IF([test "`uname -m`" = ia64], [
-               SHLIB_SUFFIX=".so"
-               # Use newer C++ library for C++ extensions
-               #if test "$GCC" != "yes" ; then
-               #   CPPFLAGS="-AA"
-               #fi
-           ], [
-               SHLIB_SUFFIX=".sl"
-           ])
-           AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
-           AS_IF([test "$tcl_ok" = yes], [
-               LDFLAGS="$LDFLAGS -Wl,-E"
-               CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
-               LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
-               LD_LIBRARY_PATH_VAR="SHLIB_PATH"
-           ])
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_LD='${CC} -shared'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ], [
-               CFLAGS="$CFLAGS -z"
-               # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
-               #CFLAGS="$CFLAGS +DAportable"
-               SHLIB_CFLAGS="+z"
-               SHLIB_LD="ld -b"
-           ])
-
-           # Check to enable 64-bit flags for compiler/linker
-           AS_IF([test "$do64bit" = "yes"], [
-               AS_IF([test "$GCC" = yes], [
-                   case `${CC} -dumpmachine` in
-                       hppa64*)
-                           # 64-bit gcc in use.  Fix flags for GNU ld.
-                           do64bit_ok=yes
-                           SHLIB_LD='${CC} -shared'
-                           AS_IF([test $doRpath = yes], [
-                               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-                           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-                           ;;
-                       *)
-                           AC_MSG_WARN([64bit mode not supported with GCC on $system])
-                           ;;
-                   esac
-               ], [
-                   do64bit_ok=yes
-                   CFLAGS="$CFLAGS +DD64"
-                   LDFLAGS_ARCH="+DD64"
-               ])
-           ]) ;;
-       IRIX-6.*)
-           SHLIB_CFLAGS=""
-           SHLIB_LD="ld -n32 -shared -rdata_shared"
-           SHLIB_SUFFIX=".so"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
-           AS_IF([test "$GCC" = yes], [
-               CFLAGS="$CFLAGS -mabi=n32"
-               LDFLAGS="$LDFLAGS -mabi=n32"
-           ], [
-               case $system in
-                   IRIX-6.3)
-                       # Use to build 6.2 compatible binaries on 6.3.
-                       CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
-                       ;;
-                   *)
-                       CFLAGS="$CFLAGS -n32"
-                       ;;
-               esac
-               LDFLAGS="$LDFLAGS -n32"
-           ])
-           ;;
-       IRIX64-6.*)
-           SHLIB_CFLAGS=""
-           SHLIB_LD="ld -n32 -shared -rdata_shared"
-           SHLIB_SUFFIX=".so"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
-
-           # Check to enable 64-bit flags for compiler/linker
-
-           AS_IF([test "$do64bit" = yes], [
-               AS_IF([test "$GCC" = yes], [
-                   AC_MSG_WARN([64bit mode not supported by gcc])
-               ], [
-                   do64bit_ok=yes
-                   SHLIB_LD="ld -64 -shared -rdata_shared"
-                   CFLAGS="$CFLAGS -64"
-                   LDFLAGS_ARCH="-64"
-               ])
-           ])
-           ;;
-       Linux*|GNU*|NetBSD-Debian)
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_SUFFIX=".so"
-
-           # TEA specific:
-           CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
-
-           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
-           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"])
-           AS_IF([test $do64bit = yes], [
-               AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [
-                   hold_cflags=$CFLAGS
-                   CFLAGS="$CFLAGS -m64"
-                   AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no)
-                   CFLAGS=$hold_cflags])
-               AS_IF([test $tcl_cv_cc_m64 = yes], [
-                   CFLAGS="$CFLAGS -m64"
-                   do64bit_ok=yes
-               ])
-          ])
-
-           # The combo of gcc + glibc has a bug related to inlining of
-           # functions like strtod(). The -fno-builtin flag should address
-           # this problem but it does not work. The -fno-inline flag is kind
-           # of overkill but it works. Disable inlining only when one of the
-           # files in compat/*.c is being linked in.
-
-           AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"])
-           ;;
-       Lynx*)
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_SUFFIX=".so"
-           CFLAGS_OPTIMIZE=-02
-           SHLIB_LD='${CC} -shared'
-           LD_FLAGS="-Wl,--export-dynamic"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           ;;
-       OpenBSD-*)
-           arch=`arch -s`
-           case "$arch" in
-           vax)
-               SHLIB_SUFFIX=""
-               SHARED_LIB_SUFFIX=""
-               LDFLAGS=""
-               ;;
-           *)
-               case "$arch" in
-               alpha|sparc64)
-                   SHLIB_CFLAGS="-fPIC"
-                   ;;
-               *)
-                   SHLIB_CFLAGS="-fpic"
-                   ;;
-               esac
-               SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-               SHLIB_SUFFIX=".so"
-               AS_IF([test $doRpath = yes], [
-                   CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
-               LDFLAGS="-Wl,-export-dynamic"
-               ;;
-           esac
-           case "$arch" in
-           vax)
-               CFLAGS_OPTIMIZE="-O1"
-               ;;
-           *)
-               CFLAGS_OPTIMIZE="-O2"
-               ;;
-           esac
-           AS_IF([test "${TCL_THREADS}" = "1"], [
-               # On OpenBSD:   Compile with -pthread
-               #               Don't link with -lpthread
-               LIBS=`echo $LIBS | sed s/-lpthread//`
-               CFLAGS="$CFLAGS -pthread"
-           ])
-           # OpenBSD doesn't do version numbers with dots.
-           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
-           TCL_LIB_VERSIONS_OK=nodots
-           ;;
-       NetBSD-*)
-           # NetBSD has ELF and can use 'cc -shared' to build shared libs
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-           SHLIB_SUFFIX=".so"
-           LDFLAGS="$LDFLAGS -export-dynamic"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           AS_IF([test "${TCL_THREADS}" = "1"], [
-               # The -pthread needs to go in the CFLAGS, not LIBS
-               LIBS=`echo $LIBS | sed s/-pthread//`
-               CFLAGS="$CFLAGS -pthread"
-               LDFLAGS="$LDFLAGS -pthread"
-           ])
-           ;;
-       FreeBSD-*)
-           # This configuration from FreeBSD Ports.
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD="${CC} -shared"
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$[@]"
-           SHLIB_SUFFIX=".so"
-           LDFLAGS=""
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           AS_IF([test "${TCL_THREADS}" = "1"], [
-               # The -pthread needs to go in the LDFLAGS, not LIBS
-               LIBS=`echo $LIBS | sed s/-pthread//`
-               CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-               LDFLAGS="$LDFLAGS $PTHREAD_LIBS"])
-           case $system in
-           FreeBSD-3.*)
-               # Version numbers are dot-stripped by system policy.
-               TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .`
-               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1'
-               TCL_LIB_VERSIONS_OK=nodots
-               ;;
-           esac
-           ;;
-       Darwin-*)
-           CFLAGS_OPTIMIZE="-Os"
-           SHLIB_CFLAGS="-fno-common"
-           # To avoid discrepancies between what headers configure sees during
-           # preprocessing tests and compiling tests, move any -isysroot and
-           # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
-           CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
-               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
-               if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`"
-           CFLAGS="`echo " ${CFLAGS}" | \
-               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
-               if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`"
-           AS_IF([test $do64bit = yes], [
-               case `arch` in
-                   ppc)
-                       AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag],
-                               tcl_cv_cc_arch_ppc64, [
-                           hold_cflags=$CFLAGS
-                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
-                           AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes,
-                                   tcl_cv_cc_arch_ppc64=no)
-                           CFLAGS=$hold_cflags])
-                       AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [
-                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
-                           do64bit_ok=yes
-                       ]);;
-                   i386)
-                       AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag],
-                               tcl_cv_cc_arch_x86_64, [
-                           hold_cflags=$CFLAGS
-                           CFLAGS="$CFLAGS -arch x86_64"
-                           AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes,
-                                   tcl_cv_cc_arch_x86_64=no)
-                           CFLAGS=$hold_cflags])
-                       AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [
-                           CFLAGS="$CFLAGS -arch x86_64"
-                           do64bit_ok=yes
-                       ]);;
-                   *)
-                       AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);;
-               esac
-           ], [
-               # Check for combined 32-bit and 64-bit fat build
-               AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \
-                   && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [
-                   fat_32_64=yes])
-           ])
-           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}'
-           AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [
-               hold_ldflags=$LDFLAGS
-               LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
-               AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no)
-               LDFLAGS=$hold_ldflags])
-           AS_IF([test $tcl_cv_ld_single_module = yes], [
-               SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
-           ])
-           # TEA specific: link shlib with current and compatibility version flags
-           vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d`
-           SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}"
-           SHLIB_SUFFIX=".dylib"
-           # Don't use -prebind when building for Mac OS X 10.4 or later only:
-           AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \
-               "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [
-               LDFLAGS="$LDFLAGS -prebind"])
-           LDFLAGS="$LDFLAGS -headerpad_max_install_names"
-           AC_CACHE_CHECK([if ld accepts -search_paths_first flag],
-                   tcl_cv_ld_search_paths_first, [
-               hold_ldflags=$LDFLAGS
-               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
-               AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes,
-                       tcl_cv_ld_search_paths_first=no)
-               LDFLAGS=$hold_ldflags])
-           AS_IF([test $tcl_cv_ld_search_paths_first = yes], [
-               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
-           ])
-           AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
-               AC_DEFINE(MODULE_SCOPE, [__private_extern__],
-                   [Compiler support for module scope symbols])
-               tcl_cv_cc_visibility_hidden=yes
-           ])
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
-           # TEA specific: for combined 32 & 64 bit fat builds of Tk
-           # extensions, verify that 64-bit build is possible.
-           AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [
-               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [
-                   AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
-                       done
-                       CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
-                       LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
-                       AC_TRY_LINK([#include <X11/Xlib.h>], [XrmInitialize();],
-                           tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no)
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval $v'="$hold_'$v'"'
-                       done])
-               ])
-               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [
-                   AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
-                       done
-                       CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}"
-                       LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}"
-                       AC_TRY_LINK([#include <tk.h>], [Tk_InitStubs(NULL, "", 0);],
-                           tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no)
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval $v'="$hold_'$v'"'
-                       done])
-               ])
-               # remove 64-bit arch flags from CFLAGS et al. if configuration
-               # does not support 64-bit.
-               AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [
-                   AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags])
-                   for v in CFLAGS CPPFLAGS LDFLAGS; do
-                       eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"'
-                   done])
-           ])
-           ;;
-       OS/390-*)
-           CFLAGS_OPTIMIZE=""          # Optimizer is buggy
-           AC_DEFINE(_OE_SOCKETS, 1,   # needed in sys/socket.h
-               [Should OS/390 do the right thing with sockets?])
-           ;;
-       OSF1-V*)
-           # Digital OSF/1
-           SHLIB_CFLAGS=""
-           AS_IF([test "$SHARED_BUILD" = 1], [
-               SHLIB_LD='ld -shared -expect_unresolved "*"'
-           ], [
-               SHLIB_LD='ld -non_shared -expect_unresolved "*"'
-           ])
-           SHLIB_SUFFIX=".so"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
-           AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [
-               CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"])
-           # see pthread_intro(3) for pthread support on osf1, k.furukawa
-           AS_IF([test "${TCL_THREADS}" = 1], [
-               CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
-               CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
-               LIBS=`echo $LIBS | sed s/-lpthreads//`
-               AS_IF([test "$GCC" = yes], [
-                   LIBS="$LIBS -lpthread -lmach -lexc"
-               ], [
-                   CFLAGS="$CFLAGS -pthread"
-                   LDFLAGS="$LDFLAGS -pthread"
-               ])
-           ])
-           ;;
-       QNX-6*)
-           # QNX RTP
-           # This may work for all QNX, but it was only reported for v6.
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD="ld -Bshareable -x"
-           SHLIB_LD_LIBS=""
-           SHLIB_SUFFIX=".so"
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       SCO_SV-3.2*)
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_CFLAGS="-fPIC -melf"
-               LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
-           ], [
-               SHLIB_CFLAGS="-Kpic -belf"
-               LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
-           ])
-           SHLIB_LD="ld -G"
-           SHLIB_LD_LIBS=""
-           SHLIB_SUFFIX=".so"
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       SunOS-5.[[0-6]])
-           # Careful to not let 5.10+ fall into this case
-
-           # Note: If _REENTRANT isn't defined, then Solaris
-           # won't define thread-safe library routines.
-
-           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
-           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
-               [Do we really want to follow the standard? Yes we do!])
-
-           SHLIB_CFLAGS="-KPIC"
-           SHLIB_SUFFIX=".so"
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_LD='${CC} -shared'
-               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ], [
-               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
-               CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ])
-           ;;
-       SunOS-5*)
-           # Note: If _REENTRANT isn't defined, then Solaris
-           # won't define thread-safe library routines.
-
-           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
-           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
-               [Do we really want to follow the standard? Yes we do!])
-
-           SHLIB_CFLAGS="-KPIC"
-
-           # Check to enable 64-bit flags for compiler/linker
-           AS_IF([test "$do64bit" = yes], [
-               arch=`isainfo`
-               AS_IF([test "$arch" = "sparcv9 sparc"], [
-                   AS_IF([test "$GCC" = yes], [
-                       AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [
-                           AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system])
-                       ], [
-                           do64bit_ok=yes
-                           CFLAGS="$CFLAGS -m64 -mcpu=v9"
-                           LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
-                           SHLIB_CFLAGS="-fPIC"
-                       ])
-                   ], [
-                       do64bit_ok=yes
-                       AS_IF([test "$do64bitVIS" = yes], [
-                           CFLAGS="$CFLAGS -xarch=v9a"
-                           LDFLAGS_ARCH="-xarch=v9a"
-                       ], [
-                           CFLAGS="$CFLAGS -xarch=v9"
-                           LDFLAGS_ARCH="-xarch=v9"
-                       ])
-                       # Solaris 64 uses this as well
-                       #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
-                   ])
-               ], [AS_IF([test "$arch" = "amd64 i386"], [
-                   AS_IF([test "$GCC" = yes], [
-                       case $system in
-                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
-                               do64bit_ok=yes
-                               CFLAGS="$CFLAGS -m64"
-                               LDFLAGS="$LDFLAGS -m64";;
-                           *)
-                               AC_MSG_WARN([64bit mode not supported with GCC on $system]);;
-                       esac
-                   ], [
-                       do64bit_ok=yes
-                       case $system in
-                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
-                               CFLAGS="$CFLAGS -m64"
-                               LDFLAGS="$LDFLAGS -m64";;
-                           *)
-                               CFLAGS="$CFLAGS -xarch=amd64"
-                               LDFLAGS="$LDFLAGS -xarch=amd64";;
-                       esac
-                   ])
-               ], [AC_MSG_WARN([64bit mode not supported for $arch])])])
-           ])
-
-           SHLIB_SUFFIX=".so"
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_LD='${CC} -shared'
-               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               AS_IF([test "$do64bit_ok" = yes], [
-                   AS_IF([test "$arch" = "sparcv9 sparc"], [
-                       # We need to specify -static-libgcc or we need to
-                       # add the path to the sparv9 libgcc.
-                       # JH: static-libgcc is necessary for core Tcl, but may
-                       # not be necessary for extensions.
-                       SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
-                       # for finding sparcv9 libgcc, get the regular libgcc
-                       # path, remove so name and append 'sparcv9'
-                       #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
-                       #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
-                   ], [AS_IF([test "$arch" = "amd64 i386"], [
-                       # JH: static-libgcc is necessary for core Tcl, but may
-                       # not be necessary for extensions.
-                       SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
-                   ])])
-               ])
-           ], [
-               case $system in
-                   SunOS-5.[[1-9]][[0-9]]*)
-                       # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-                       SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';;
-                   *)
-                       SHLIB_LD='/usr/ccs/bin/ld -G -z text';;
-               esac
-               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
-           ])
-           ;;
-       UNIX_SV* | UnixWare-5*)
-           SHLIB_CFLAGS="-KPIC"
-           SHLIB_LD='${CC} -G'
-           SHLIB_LD_LIBS=""
-           SHLIB_SUFFIX=".so"
-           # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
-           # that don't grok the -Bexport option.  Test that it does.
-           AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [
-               hold_ldflags=$LDFLAGS
-               LDFLAGS="$LDFLAGS -Wl,-Bexport"
-               AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no)
-               LDFLAGS=$hold_ldflags])
-           AS_IF([test $tcl_cv_ld_Bexport = yes], [
-               LDFLAGS="$LDFLAGS -Wl,-Bexport"
-           ])
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-    esac
-
-    AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [
-       AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform])
-    ])
-
-dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so
-dnl # until the end of configure, as configure's compile and link tests use
-dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's
-dnl # preprocessing tests use only CPPFLAGS.
-    AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""])
-
-    # Add in the arch flags late to ensure it wasn't removed.
-    # Not necessary in TEA, but this is aligned with core
-    LDFLAGS="$LDFLAGS $LDFLAGS_ARCH"
-
-    # If we're running gcc, then change the C flags for compiling shared
-    # libraries to the right flags for gcc, instead of those for the
-    # standard manufacturer compiler.
-
-    AS_IF([test "$GCC" = yes], [
-       case $system in
-           AIX-*) ;;
-           BSD/OS*) ;;
-           CYGWIN_*|MINGW32_*) ;;
-           IRIX*) ;;
-           NetBSD-*|FreeBSD-*|OpenBSD-*) ;;
-           Darwin-*) ;;
-           SCO_SV-3.2*) ;;
-           windows) ;;
-           *) SHLIB_CFLAGS="-fPIC" ;;
-       esac])
-
-    AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
-       AC_DEFINE(MODULE_SCOPE, [extern],
-           [No Compiler support for module scope symbols])
-    ])
-
-    AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [
-    # TEA specific: use PACKAGE_VERSION instead of VERSION
-    SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}'])
-    AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [
-    # TEA specific: use PACKAGE_VERSION instead of VERSION
-    UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'])
-
-    if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then
-       AC_CACHE_CHECK(for SEH support in compiler,
-           tcl_cv_seh,
-       AC_TRY_RUN([
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-
-           int main(int argc, char** argv) {
-               int a, b = 0;
-               __try {
-                   a = 666 / b;
-               }
-               __except (EXCEPTION_EXECUTE_HANDLER) {
-                   return 0;
-               }
-               return 1;
-           }
-       ],
-           tcl_cv_seh=yes,
-           tcl_cv_seh=no,
-           tcl_cv_seh=no)
-       )
-       if test "$tcl_cv_seh" = "no" ; then
-           AC_DEFINE(HAVE_NO_SEH, 1,
-                   [Defined when mingw does not support SEH])
-       fi
-
-       #
-       # Check to see if the excpt.h include file provided contains the
-       # definition for EXCEPTION_DISPOSITION; if not, which is the case
-       # with Cygwin's version as of 2002-04-10, define it to be int,
-       # sufficient for getting the current code to work.
-       #
-       AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files,
-           tcl_cv_eh_disposition,
-           AC_TRY_COMPILE([
-#          define WIN32_LEAN_AND_MEAN
-#          include <windows.h>
-#          undef WIN32_LEAN_AND_MEAN
-           ],[
-               EXCEPTION_DISPOSITION x;
-           ],
-               tcl_cv_eh_disposition=yes,
-               tcl_cv_eh_disposition=no)
-       )
-       if test "$tcl_cv_eh_disposition" = "no" ; then
-       AC_DEFINE(EXCEPTION_DISPOSITION, int,
-               [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION])
-       fi
-
-       # Check to see if winnt.h defines CHAR, SHORT, and LONG
-       # even if VOID has already been #defined. The win32api
-       # used by mingw and cygwin is known to do this.
-
-       AC_CACHE_CHECK(for winnt.h that ignores VOID define,
-           tcl_cv_winnt_ignore_void,
-           AC_TRY_COMPILE([
-#define VOID void
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-           ], [
-               CHAR c;
-               SHORT s;
-               LONG l;
-           ],
-        tcl_cv_winnt_ignore_void=yes,
-        tcl_cv_winnt_ignore_void=no)
-       )
-       if test "$tcl_cv_winnt_ignore_void" = "yes" ; then
-           AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1,
-                   [Defined when cygwin/mingw ignores VOID define in winnt.h])
-       fi
-    fi
-
-       # See if the compiler supports casting to a union type.
-       # This is used to stop gcc from printing a compiler
-       # warning when initializing a union member.
-
-       AC_CACHE_CHECK(for cast to union support,
-           tcl_cv_cast_to_union,
-           AC_TRY_COMPILE([],
-           [
-                 union foo { int i; double d; };
-                 union foo f = (union foo) (int) 0;
-           ],
-           tcl_cv_cast_to_union=yes,
-           tcl_cv_cast_to_union=no)
-       )
-       if test "$tcl_cv_cast_to_union" = "yes"; then
-           AC_DEFINE(HAVE_CAST_TO_UNION, 1,
-                   [Defined when compiler supports casting to union type.])
-       fi
-
-    AC_SUBST(CFLAGS_DEBUG)
-    AC_SUBST(CFLAGS_OPTIMIZE)
-    AC_SUBST(CFLAGS_WARNING)
-
-    AC_SUBST(STLIB_LD)
-    AC_SUBST(SHLIB_LD)
-
-    AC_SUBST(SHLIB_LD_LIBS)
-    AC_SUBST(SHLIB_CFLAGS)
-
-    AC_SUBST(LD_LIBRARY_PATH_VAR)
-
-    # These must be called after we do the basic CFLAGS checks and
-    # verify any possible 64-bit or similar switches are necessary
-    TEA_TCL_EARLY_FLAGS
-    TEA_TCL_64BIT_FLAGS
-])
-
-#--------------------------------------------------------------------
-# TEA_SERIAL_PORT
-#
-#      Determine which interface to use to talk to the serial port.
-#      Note that #include lines must begin in leftmost column for
-#      some compilers to recognize them as preprocessor directives,
-#      and some build environments have stdin not pointing at a
-#      pseudo-terminal (usually /dev/null instead.)
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines only one of the following vars:
-#              HAVE_SYS_MODEM_H
-#              USE_TERMIOS
-#              USE_TERMIO
-#              USE_SGTTY
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_SERIAL_PORT], [
-    AC_CHECK_HEADERS(sys/modem.h)
-    AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [
-    AC_TRY_RUN([
-#include <termios.h>
-
-int main() {
-    struct termios t;
-    if (tcgetattr(0, &t) == 0) {
-       cfsetospeed(&t, 0);
-       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    if test $tcl_cv_api_serial = no ; then
-       AC_TRY_RUN([
-#include <termio.h>
-
-int main() {
-    struct termio t;
-    if (ioctl(0, TCGETA, &t) == 0) {
-       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no ; then
-       AC_TRY_RUN([
-#include <sgtty.h>
-
-int main() {
-    struct sgttyb t;
-    if (ioctl(0, TIOCGETP, &t) == 0) {
-       t.sg_ospeed = 0;
-       t.sg_flags |= ODDP | EVENP | RAW;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no ; then
-       AC_TRY_RUN([
-#include <termios.h>
-#include <errno.h>
-
-int main() {
-    struct termios t;
-    if (tcgetattr(0, &t) == 0
-       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
-       cfsetospeed(&t, 0);
-       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no; then
-       AC_TRY_RUN([
-#include <termio.h>
-#include <errno.h>
-
-int main() {
-    struct termio t;
-    if (ioctl(0, TCGETA, &t) == 0
-       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
-       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-    }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no; then
-       AC_TRY_RUN([
-#include <sgtty.h>
-#include <errno.h>
-
-int main() {
-    struct sgttyb t;
-    if (ioctl(0, TIOCGETP, &t) == 0
-       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
-       t.sg_ospeed = 0;
-       t.sg_flags |= ODDP | EVENP | RAW;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none)
-    fi])
-    case $tcl_cv_api_serial in
-       termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);;
-       termio)  AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);;
-       sgtty)   AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);;
-    esac
-])
-
-#--------------------------------------------------------------------
-# TEA_MISSING_POSIX_HEADERS
-#
-#      Supply substitutes for missing POSIX header files.  Special
-#      notes:
-#          - stdlib.h doesn't define strtol, strtoul, or
-#            strtod in some versions of SunOS
-#          - some versions of string.h don't declare procedures such
-#            as strstr
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines some of the following vars:
-#              NO_DIRENT_H
-#              NO_ERRNO_H
-#              NO_VALUES_H
-#              HAVE_LIMITS_H or NO_LIMITS_H
-#              NO_STDLIB_H
-#              NO_STRING_H
-#              NO_SYS_WAIT_H
-#              NO_DLFCN_H
-#              HAVE_SYS_PARAM_H
-#
-#              HAVE_STRING_H ?
-#
-# tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and
-# CHECK on limits.h
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [
-    AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [
-    AC_TRY_LINK([#include <sys/types.h>
-#include <dirent.h>], [
-#ifndef _POSIX_SOURCE
-#   ifdef __Lynx__
-       /*
-        * Generate compilation error to make the test fail:  Lynx headers
-        * are only valid if really in the POSIX environment.
-        */
-
-       missing_procedure();
-#   endif
-#endif
-DIR *d;
-struct dirent *entryPtr;
-char *p;
-d = opendir("foobar");
-entryPtr = readdir(d);
-p = entryPtr->d_name;
-closedir(d);
-], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)])
-
-    if test $tcl_cv_dirent_h = no; then
-       AC_DEFINE(NO_DIRENT_H, 1, [Do we have <dirent.h>?])
-    fi
-
-    # TEA specific:
-    AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have <errno.h>?])])
-    AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have <float.h>?])])
-    AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have <values.h>?])])
-    AC_CHECK_HEADER(limits.h,
-       [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have <limits.h>?])],
-       [AC_DEFINE(NO_LIMITS_H, 1, [Do we have <limits.h>?])])
-    AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
-    AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
-    AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
-    AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
-    if test $tcl_ok = 0; then
-       AC_DEFINE(NO_STDLIB_H, 1, [Do we have <stdlib.h>?])
-    fi
-    AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
-    AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
-    AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
-
-    # See also memmove check below for a place where NO_STRING_H can be
-    # set and why.
-
-    if test $tcl_ok = 0; then
-       AC_DEFINE(NO_STRING_H, 1, [Do we have <string.h>?])
-    fi
-
-    AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have <sys/wait.h>?])])
-    AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have <dlfcn.h>?])])
-
-    # OS/390 lacks sys/param.h (and doesn't need it, by chance).
-    AC_HAVE_HEADERS(sys/param.h)
-])
-
-#--------------------------------------------------------------------
-# TEA_PATH_X
-#
-#      Locate the X11 header files and the X11 library archive.  Try
-#      the ac_path_x macro first, but if it doesn't find the X stuff
-#      (e.g. because there's no xmkmf program) then check through
-#      a list of possible directories.  Under some conditions the
-#      autoconf macro will return an include directory that contains
-#      no include files, so double-check its result just to be safe.
-#
-#      This should be called after TEA_CONFIG_CFLAGS as setting the
-#      LIBS line can confuse some configure macro magic.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Sets the following vars:
-#              XINCLUDES
-#              XLIBSW
-#              PKG_LIBS (appends to)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_X], [
-    if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then
-       TEA_PATH_UNIX_X
-    fi
-])
-
-AC_DEFUN([TEA_PATH_UNIX_X], [
-    AC_PATH_X
-    not_really_there=""
-    if test "$no_x" = ""; then
-       if test "$x_includes" = ""; then
-           AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes")
-       else
-           if test ! -r $x_includes/X11/Xlib.h; then
-               not_really_there="yes"
-           fi
-       fi
-    fi
-    if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
-       AC_MSG_CHECKING([for X11 header files])
-       found_xincludes="no"
-       AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no")
-       if test "$found_xincludes" = "no"; then
-           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"
-           for i in $dirs ; do
-               if test -r $i/X11/Xlib.h; then
-                   AC_MSG_RESULT([$i])
-                   XINCLUDES=" -I$i"
-                   found_xincludes="yes"
-                   break
-               fi
-           done
-       fi
-    else
-       if test "$x_includes" != ""; then
-           XINCLUDES="-I$x_includes"
-           found_xincludes="yes"
-       fi
-    fi
-    if test "$found_xincludes" = "no"; then
-       AC_MSG_RESULT([couldn't find any!])
-    fi
-
-    if test "$no_x" = yes; then
-       AC_MSG_CHECKING([for X11 libraries])
-       XLIBSW=nope
-       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"
-       for i in $dirs ; do
-           if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then
-               AC_MSG_RESULT([$i])
-               XLIBSW="-L$i -lX11"
-               x_libraries="$i"
-               break
-           fi
-       done
-    else
-       if test "$x_libraries" = ""; then
-           XLIBSW=-lX11
-       else
-           XLIBSW="-L$x_libraries -lX11"
-       fi
-    fi
-    if test "$XLIBSW" = nope ; then
-       AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
-    fi
-    if test "$XLIBSW" = nope ; then
-       AC_MSG_RESULT([could not find any!  Using -lX11.])
-       XLIBSW=-lX11
-    fi
-    # TEA specific:
-    if test x"${XLIBSW}" != x ; then
-       PKG_LIBS="${PKG_LIBS} ${XLIBSW}"
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_BLOCKING_STYLE
-#
-#      The statements below check for systems where POSIX-style
-#      non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
-#      On these systems (mostly older ones), use the old BSD-style
-#      FIONBIO approach instead.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines some of the following vars:
-#              HAVE_SYS_IOCTL_H
-#              HAVE_SYS_FILIO_H
-#              USE_FIONBIO
-#              O_NONBLOCK
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_BLOCKING_STYLE], [
-    AC_CHECK_HEADERS(sys/ioctl.h)
-    AC_CHECK_HEADERS(sys/filio.h)
-    TEA_CONFIG_SYSTEM
-    AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
-    case $system in
-       OSF*)
-           AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?])
-           AC_MSG_RESULT([FIONBIO])
-           ;;
-       *)
-           AC_MSG_RESULT([O_NONBLOCK])
-           ;;
-    esac
-])
-
-#--------------------------------------------------------------------
-# TEA_TIME_HANDLER
-#
-#      Checks how the system deals with time.h, what time structures
-#      are used on the system, and what fields the structures have.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines some of the following vars:
-#              USE_DELTA_FOR_TZ
-#              HAVE_TM_GMTOFF
-#              HAVE_TM_TZADJ
-#              HAVE_TIMEZONE_VAR
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TIME_HANDLER], [
-    AC_CHECK_HEADERS(sys/time.h)
-    AC_HEADER_TIME
-    AC_STRUCT_TIMEZONE
-
-    AC_CHECK_FUNCS(gmtime_r localtime_r)
-
-    AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [
-       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
-           tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)])
-    if test $tcl_cv_member_tm_tzadj = yes ; then
-       AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?])
-    fi
-
-    AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [
-       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
-           tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)])
-    if test $tcl_cv_member_tm_gmtoff = yes ; then
-       AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?])
-    fi
-
-    #
-    # Its important to include time.h in this check, as some systems
-    # (like convex) have timezone functions, etc.
-    #
-    AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [
-       AC_TRY_COMPILE([#include <time.h>],
-           [extern long timezone;
-           timezone += 1;
-           exit (0);],
-           tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)])
-    if test $tcl_cv_timezone_long = yes ; then
-       AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
-    else
-       #
-       # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
-       #
-       AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [
-           AC_TRY_COMPILE([#include <time.h>],
-               [extern time_t timezone;
-               timezone += 1;
-               exit (0);],
-               tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)])
-       if test $tcl_cv_timezone_time = yes ; then
-           AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
-       fi
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_BUGGY_STRTOD
-#
-#      Under Solaris 2.4, strtod returns the wrong value for the
-#      terminating character under some conditions.  Check for this
-#      and if the problem exists use a substitute procedure
-#      "fixstrtod" (provided by Tcl) that corrects the error.
-#      Also, on Compaq's Tru64 Unix 5.0,
-#      strtod(" ") returns 0.0 instead of a failure to convert.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Might defines some of the following vars:
-#              strtod (=fixstrtod)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_BUGGY_STRTOD], [
-    AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0)
-    if test "$tcl_strtod" = 1; then
-       AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[
-           AC_TRY_RUN([
-               extern double strtod();
-               int main() {
-                   char *infString="Inf", *nanString="NaN", *spaceString=" ";
-                   char *term;
-                   double value;
-                   value = strtod(infString, &term);
-                   if ((term != infString) && (term[-1] == 0)) {
-                       exit(1);
-                   }
-                   value = strtod(nanString, &term);
-                   if ((term != nanString) && (term[-1] == 0)) {
-                       exit(1);
-                   }
-                   value = strtod(spaceString, &term);
-                   if (term == (spaceString+1)) {
-                       exit(1);
-                   }
-                   exit(0);
-               }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy,
-                   tcl_cv_strtod_buggy=buggy)])
-       if test "$tcl_cv_strtod_buggy" = buggy; then
-           AC_LIBOBJ([fixstrtod])
-           USE_COMPAT=1
-           AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?])
-       fi
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_LINK_LIBS
-#
-#      Search for the libraries needed to link the Tcl shell.
-#      Things like the math library (-lm) and socket stuff (-lsocket vs.
-#      -lnsl) are dealt with here.
-#
-# Arguments:
-#      Requires the following vars to be set in the Makefile:
-#              DL_LIBS (not in TEA, only needed in core)
-#              LIBS
-#              MATH_LIBS
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TCL_LIBS
-#              MATH_LIBS
-#
-#      Might append to the following vars:
-#              LIBS
-#
-#      Might define the following vars:
-#              HAVE_NET_ERRNO_H
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TCL_LINK_LIBS], [
-    #--------------------------------------------------------------------
-    # On a few very rare systems, all of the libm.a stuff is
-    # already in libc.a.  Set compiler flags accordingly.
-    # Also, Linux requires the "ieee" library for math to work
-    # right (and it must appear before "-lm").
-    #--------------------------------------------------------------------
-
-    AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
-    AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
-
-    #--------------------------------------------------------------------
-    # Interactive UNIX requires -linet instead of -lsocket, plus it
-    # needs net/errno.h to define the socket-related error codes.
-    #--------------------------------------------------------------------
-
-    AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
-    AC_CHECK_HEADER(net/errno.h, [
-       AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have <net/errno.h>?])])
-
-    #--------------------------------------------------------------------
-    #  Check for the existence of the -lsocket and -lnsl libraries.
-    #  The order here is important, so that they end up in the right
-    #  order in the command line generated by make.  Here are some
-    #  special considerations:
-    #  1. Use "connect" and "accept" to check for -lsocket, and
-    #     "gethostbyname" to check for -lnsl.
-    #  2. Use each function name only once:  can't redo a check because
-    #     autoconf caches the results of the last check and won't redo it.
-    #  3. Use -lnsl and -lsocket only if they supply procedures that
-    #     aren't already present in the normal libraries.  This is because
-    #     IRIX 5.2 has libraries, but they aren't needed and they're
-    #     bogus:  they goof up name resolution if used.
-    #  4. On some SVR4 systems, can't use -lsocket without -lnsl too.
-    #     To get around this problem, check for both libraries together
-    #     if -lsocket doesn't work by itself.
-    #--------------------------------------------------------------------
-
-    tcl_checkBoth=0
-    AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
-    if test "$tcl_checkSocket" = 1; then
-       AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt,
-           LIBS="$LIBS -lsocket", tcl_checkBoth=1)])
-    fi
-    if test "$tcl_checkBoth" = 1; then
-       tk_oldLibs=$LIBS
-       LIBS="$LIBS -lsocket -lnsl"
-       AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs])
-    fi
-    AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname,
-           [LIBS="$LIBS -lnsl"])])
-
-    # TEA specific: Don't perform the eval of the libraries here because
-    # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS
-
-    TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
-    AC_SUBST(TCL_LIBS)
-    AC_SUBST(MATH_LIBS)
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_EARLY_FLAGS
-#
-#      Check for what flags are needed to be passed so the correct OS
-#      features are available.
-#
-# Arguments:
-#      None
-#
-# Results:
-#
-#      Might define the following vars:
-#              _ISOC99_SOURCE
-#              _LARGEFILE64_SOURCE
-#              _LARGEFILE_SOURCE64
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TCL_EARLY_FLAG],[
-    AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]),
-       AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no,
-           AC_TRY_COMPILE([[#define ]$1[ 1
-]$2], $3,
-               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes,
-               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no)))
-    if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then
-       AC_DEFINE($1, 1, [Add the ]$1[ flag when building])
-       tcl_flags="$tcl_flags $1"
-    fi
-])
-
-AC_DEFUN([TEA_TCL_EARLY_FLAGS],[
-    AC_MSG_CHECKING([for required early compiler flags])
-    tcl_flags=""
-    TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include <stdlib.h>],
-       [char *p = (char *)strtoll; char *q = (char *)strtoull;])
-    TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include <sys/stat.h>],
-       [struct stat64 buf; int i = stat64("/", &buf);])
-    TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include <sys/stat.h>],
-       [char *p = (char *)open64;])
-    if test "x${tcl_flags}" = "x" ; then
-       AC_MSG_RESULT([none])
-    else
-       AC_MSG_RESULT([${tcl_flags}])
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_64BIT_FLAGS
-#
-#      Check for what is defined in the way of 64-bit features.
-#
-# Arguments:
-#      None
-#
-# Results:
-#
-#      Might define the following vars:
-#              TCL_WIDE_INT_IS_LONG
-#              TCL_WIDE_INT_TYPE
-#              HAVE_STRUCT_DIRENT64
-#              HAVE_STRUCT_STAT64
-#              HAVE_TYPE_OFF64_T
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TCL_64BIT_FLAGS], [
-    AC_MSG_CHECKING([for 64-bit integer type])
-    AC_CACHE_VAL(tcl_cv_type_64bit,[
-       tcl_cv_type_64bit=none
-       # See if the compiler knows natively about __int64
-       AC_TRY_COMPILE(,[__int64 value = (__int64) 0;],
-           tcl_type_64bit=__int64, tcl_type_64bit="long long")
-       # See if we should use long anyway  Note that we substitute in the
-       # type that is our current guess for a 64-bit type inside this check
-       # program, so it should be modified only carefully...
-        AC_TRY_COMPILE(,[switch (0) {
-            case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ;
-        }],tcl_cv_type_64bit=${tcl_type_64bit})])
-    if test "${tcl_cv_type_64bit}" = none ; then
-       AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?])
-       AC_MSG_RESULT([using long])
-    elif test "${tcl_cv_type_64bit}" = "__int64" \
-               -a "${TEA_PLATFORM}" = "windows" ; then
-       # TEA specific: We actually want to use the default tcl.h checks in
-       # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER*
-       AC_MSG_RESULT([using Tcl header defaults])
-    else
-       AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit},
-           [What type should be used to define wide integers?])
-       AC_MSG_RESULT([${tcl_cv_type_64bit}])
-
-       # Now check for auxiliary declarations
-       AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[
-           AC_TRY_COMPILE([#include <sys/types.h>
-#include <dirent.h>],[struct dirent64 p;],
-               tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)])
-       if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
-           AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?])
-       fi
-
-       AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[
-           AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p;
-],
-               tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)])
-       if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
-           AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in <sys/stat.h>?])
-       fi
-
-       AC_CHECK_FUNCS(open64 lseek64)
-       AC_MSG_CHECKING([for off64_t])
-       AC_CACHE_VAL(tcl_cv_type_off64_t,[
-           AC_TRY_COMPILE([#include <sys/types.h>],[off64_t offset;
-],
-               tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)])
-       dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the
-       dnl functions lseek64 and open64 are defined.
-       if test "x${tcl_cv_type_off64_t}" = "xyes" && \
-               test "x${ac_cv_func_lseek64}" = "xyes" && \
-               test "x${ac_cv_func_open64}" = "xyes" ; then
-           AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in <sys/types.h>?])
-           AC_MSG_RESULT([yes])
-       else
-           AC_MSG_RESULT([no])
-       fi
-    fi
-])
-
-##
-## Here ends the standard Tcl configuration bits and starts the
-## TEA specific functions
-##
-
-#------------------------------------------------------------------------
-# TEA_INIT --
-#
-#      Init various Tcl Extension Architecture (TEA) variables.
-#      This should be the first called TEA_* macro.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              CYGPATH
-#              EXEEXT
-#      Defines only:
-#              TEA_VERSION
-#              TEA_INITED
-#              TEA_PLATFORM (windows or unix)
-#
-# "cygpath" is used on windows to generate native path names for include
-# files. These variables should only be used with the compiler and linker
-# since they generate native path names.
-#
-# EXEEXT
-#      Select the executable extension based on the host type.  This
-#      is a lightweight replacement for AC_EXEEXT that doesn't require
-#      a compiler.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_INIT], [
-    # TEA extensions pass this us the version of TEA they think they
-    # are compatible with.
-    TEA_VERSION="3.10"
-
-    AC_MSG_CHECKING([for correct TEA configuration])
-    if test x"${PACKAGE_NAME}" = x ; then
-       AC_MSG_ERROR([
-The PACKAGE_NAME variable must be defined by your TEA configure.ac])
-    fi
-    if test x"$1" = x ; then
-       AC_MSG_ERROR([
-TEA version not specified.])
-    elif test "$1" != "${TEA_VERSION}" ; then
-       AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"])
-    else
-       AC_MSG_RESULT([ok (TEA ${TEA_VERSION})])
-    fi
-
-    # If the user did not set CFLAGS, set it now to keep macros
-    # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2".
-    if test "${CFLAGS+set}" != "set" ; then
-       CFLAGS=""
-    fi
-
-    case "`uname -s`" in
-       *win32*|*WIN32*|*MINGW32_*)
-           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)
-           EXEEXT=".exe"
-           TEA_PLATFORM="windows"
-           ;;
-       *CYGWIN_*)
-           EXEEXT=".exe"
-           # CYGPATH and TEA_PLATFORM are determined later in LOAD_TCLCONFIG
-           ;;
-       *)
-           CYGPATH=echo
-           # Maybe we are cross-compiling....
-           case ${host_alias} in
-               *mingw32*)
-               EXEEXT=".exe"
-               TEA_PLATFORM="windows"
-               ;;
-           *)
-               EXEEXT=""
-               TEA_PLATFORM="unix"
-               ;;
-           esac
-           ;;
-    esac
-
-    # Check if exec_prefix is set. If not use fall back to prefix.
-    # Note when adjusted, so that TEA_PREFIX can correct for this.
-    # This is needed for recursive configures, since autoconf propagates
-    # $prefix, but not $exec_prefix (doh!).
-    if test x$exec_prefix = xNONE ; then
-       exec_prefix_default=yes
-       exec_prefix=$prefix
-    fi
-
-    AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}])
-
-    AC_SUBST(EXEEXT)
-    AC_SUBST(CYGPATH)
-
-    # This package name must be replaced statically for AC_SUBST to work
-    AC_SUBST(PKG_LIB_FILE)
-    # Substitute STUB_LIB_FILE in case package creates a stub library too.
-    AC_SUBST(PKG_STUB_LIB_FILE)
-
-    # We AC_SUBST these here to ensure they are subst'ed,
-    # in case the user doesn't call TEA_ADD_...
-    AC_SUBST(PKG_STUB_SOURCES)
-    AC_SUBST(PKG_STUB_OBJECTS)
-    AC_SUBST(PKG_TCL_SOURCES)
-    AC_SUBST(PKG_HEADERS)
-    AC_SUBST(PKG_INCLUDES)
-    AC_SUBST(PKG_LIBS)
-    AC_SUBST(PKG_CFLAGS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_SOURCES --
-#
-#      Specify one or more source files.  Users should check for
-#      the right platform before adding to their list.
-#      It is not important to specify the directory, as long as it is
-#      in the generic, win or unix subdirectory of $(srcdir).
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_SOURCES
-#              PKG_OBJECTS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_SOURCES], [
-    vars="$@"
-    for i in $vars; do
-       case $i in
-           [\$]*)
-               # allow $-var names
-               PKG_SOURCES="$PKG_SOURCES $i"
-               PKG_OBJECTS="$PKG_OBJECTS $i"
-               ;;
-           *)
-               # check for existence - allows for generic/win/unix VPATH
-               # To add more dirs here (like 'src'), you have to update VPATH
-               # in Makefile.in as well
-               if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
-                   -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
-                   -a ! -f "${srcdir}/macosx/$i" \
-                   ; then
-                   AC_MSG_ERROR([could not find source file '$i'])
-               fi
-               PKG_SOURCES="$PKG_SOURCES $i"
-               # this assumes it is in a VPATH dir
-               i=`basename $i`
-               # handle user calling this before or after TEA_SETUP_COMPILER
-               if test x"${OBJEXT}" != x ; then
-                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
-               else
-                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
-               fi
-               PKG_OBJECTS="$PKG_OBJECTS $j"
-               ;;
-       esac
-    done
-    AC_SUBST(PKG_SOURCES)
-    AC_SUBST(PKG_OBJECTS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_STUB_SOURCES --
-#
-#      Specify one or more source files.  Users should check for
-#      the right platform before adding to their list.
-#      It is not important to specify the directory, as long as it is
-#      in the generic, win or unix subdirectory of $(srcdir).
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_STUB_SOURCES
-#              PKG_STUB_OBJECTS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_STUB_SOURCES], [
-    vars="$@"
-    for i in $vars; do
-       # check for existence - allows for generic/win/unix VPATH
-       if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
-           -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
-           -a ! -f "${srcdir}/macosx/$i" \
-           ; then
-           AC_MSG_ERROR([could not find stub source file '$i'])
-       fi
-       PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i"
-       # this assumes it is in a VPATH dir
-       i=`basename $i`
-       # handle user calling this before or after TEA_SETUP_COMPILER
-       if test x"${OBJEXT}" != x ; then
-           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
-       else
-           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
-       fi
-       PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j"
-    done
-    AC_SUBST(PKG_STUB_SOURCES)
-    AC_SUBST(PKG_STUB_OBJECTS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_TCL_SOURCES --
-#
-#      Specify one or more Tcl source files.  These should be platform
-#      independent runtime files.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_TCL_SOURCES
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_TCL_SOURCES], [
-    vars="$@"
-    for i in $vars; do
-       # check for existence, be strict because it is installed
-       if test ! -f "${srcdir}/$i" ; then
-           AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i'])
-       fi
-       PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i"
-    done
-    AC_SUBST(PKG_TCL_SOURCES)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_HEADERS --
-#
-#      Specify one or more source headers.  Users should check for
-#      the right platform before adding to their list.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_HEADERS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_HEADERS], [
-    vars="$@"
-    for i in $vars; do
-       # check for existence, be strict because it is installed
-       if test ! -f "${srcdir}/$i" ; then
-           AC_MSG_ERROR([could not find header file '${srcdir}/$i'])
-       fi
-       PKG_HEADERS="$PKG_HEADERS $i"
-    done
-    AC_SUBST(PKG_HEADERS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_INCLUDES --
-#
-#      Specify one or more include dirs.  Users should check for
-#      the right platform before adding to their list.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_INCLUDES
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_INCLUDES], [
-    vars="$@"
-    for i in $vars; do
-       PKG_INCLUDES="$PKG_INCLUDES $i"
-    done
-    AC_SUBST(PKG_INCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_LIBS --
-#
-#      Specify one or more libraries.  Users should check for
-#      the right platform before adding to their list.  For Windows,
-#      libraries provided in "foo.lib" format will be converted to
-#      "-lfoo" when using GCC (mingw).
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_LIBS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_LIBS], [
-    vars="$@"
-    for i in $vars; do
-       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
-           # Convert foo.lib to -lfoo for GCC.  No-op if not *.lib
-           i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'`
-       fi
-       PKG_LIBS="$PKG_LIBS $i"
-    done
-    AC_SUBST(PKG_LIBS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_CFLAGS --
-#
-#      Specify one or more CFLAGS.  Users should check for
-#      the right platform before adding to their list.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_CFLAGS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_CFLAGS], [
-    PKG_CFLAGS="$PKG_CFLAGS $@"
-    AC_SUBST(PKG_CFLAGS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_CLEANFILES --
-#
-#      Specify one or more CLEANFILES.
-#
-# Arguments:
-#      one or more file names to clean target
-#
-# Results:
-#
-#      Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_CLEANFILES], [
-    CLEANFILES="$CLEANFILES $@"
-])
-
-#------------------------------------------------------------------------
-# TEA_PREFIX --
-#
-#      Handle the --prefix=... option by defaulting to what Tcl gave
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      If --prefix or --exec-prefix was not specified, $prefix and
-#      $exec_prefix will be set to the values given to Tcl when it was
-#      configured.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_PREFIX], [
-    if test "${prefix}" = "NONE"; then
-       prefix_default=yes
-       if test x"${TCL_PREFIX}" != x; then
-           AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}])
-           prefix=${TCL_PREFIX}
-       else
-           AC_MSG_NOTICE([--prefix defaulting to /usr/local])
-           prefix=/usr/local
-       fi
-    fi
-    if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \
-       -o x"${exec_prefix_default}" = x"yes" ; then
-       if test x"${TCL_EXEC_PREFIX}" != x; then
-           AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}])
-           exec_prefix=${TCL_EXEC_PREFIX}
-       else
-           AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}])
-           exec_prefix=$prefix
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_SETUP_COMPILER_CC --
-#
-#      Do compiler checks the way we want.  This is just a replacement
-#      for AC_PROG_CC in TEA configure.ac files to make them cleaner.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Sets up CC var and other standard bits we need to make executables.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_SETUP_COMPILER_CC], [
-    # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE)
-    # in this macro, they need to go into TEA_SETUP_COMPILER instead.
-
-    AC_PROG_CC
-    AC_PROG_CPP
-
-    INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c'
-    INSTALL_DATA_DIR='${INSTALL} -d -m 755'
-    INSTALL_DATA='${INSTALL} -m 644'
-    INSTALL_PROGRAM='${INSTALL}'
-    INSTALL_SCRIPT='${INSTALL}'
-    INSTALL_LIBRARY='${INSTALL_DATA}'
-
-    AC_SUBST(INSTALL)
-    AC_SUBST(INSTALL_DATA_DIR)
-    AC_SUBST(INSTALL_DATA)
-    AC_SUBST(INSTALL_PROGRAM)
-    AC_SUBST(INSTALL_SCRIPT)
-    AC_SUBST(INSTALL_LIBRARY)
-
-    #--------------------------------------------------------------------
-    # Checks to see if the make program sets the $MAKE variable.
-    #--------------------------------------------------------------------
-
-    AC_PROG_MAKE_SET
-
-    #--------------------------------------------------------------------
-    # Find ranlib
-    #--------------------------------------------------------------------
-
-    AC_CHECK_TOOL(RANLIB, ranlib)
-
-    #--------------------------------------------------------------------
-    # Determines the correct binary file extension (.o, .obj, .exe etc.)
-    #--------------------------------------------------------------------
-
-    AC_OBJEXT
-    AC_EXEEXT
-])
-
-#------------------------------------------------------------------------
-# TEA_SETUP_COMPILER --
-#
-#      Do compiler checks that use the compiler.  This must go after
-#      TEA_SETUP_COMPILER_CC, which does the actual compiler check.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Sets up CC var and other standard bits we need to make executables.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_SETUP_COMPILER], [
-    # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here.
-    AC_REQUIRE([TEA_SETUP_COMPILER_CC])
-
-    #------------------------------------------------------------------------
-    # If we're using GCC, see if the compiler understands -pipe. If so, use it.
-    # It makes compiling go faster.  (This is only a performance feature.)
-    #------------------------------------------------------------------------
-
-    if test -z "$no_pipe" -a -n "$GCC"; then
-       AC_CACHE_CHECK([if the compiler understands -pipe],
-           tcl_cv_cc_pipe, [
-           hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
-           AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no)
-           CFLAGS=$hold_cflags])
-       if test $tcl_cv_cc_pipe = yes; then
-           CFLAGS="$CFLAGS -pipe"
-       fi
-    fi
-
-    #--------------------------------------------------------------------
-    # Common compiler flag setup
-    #--------------------------------------------------------------------
-
-    AC_C_BIGENDIAN
-    if test "${TEA_PLATFORM}" = "unix" ; then
-       TEA_TCL_LINK_LIBS
-       TEA_MISSING_POSIX_HEADERS
-       # Let the user call this, because if it triggers, they will
-       # need a compat/strtod.c that is correct.  Users can also
-       # use Tcl_GetDouble(FromObj) instead.
-       #TEA_BUGGY_STRTOD
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_MAKE_LIB --
-#
-#      Generate a line that can be used to build a shared/unshared library
-#      in a platform independent manner.
-#
-# Arguments:
-#      none
-#
-#      Requires:
-#
-# Results:
-#
-#      Defines the following vars:
-#      CFLAGS -        Done late here to note disturb other AC macros
-#       MAKE_LIB -      Command to execute to build the Tcl library;
-#                       differs depending on whether or not Tcl is being
-#                       compiled as a shared library.
-#      MAKE_SHARED_LIB Makefile rule for building a shared library
-#      MAKE_STATIC_LIB Makefile rule for building a static library
-#      MAKE_STUB_LIB   Makefile rule for building a stub library
-#      VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL
-#      VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_MAKE_LIB], [
-    if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then
-       MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)"
-       MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)"
-       AC_EGREP_CPP([manifest needed], [
-#if defined(_MSC_VER) && _MSC_VER >= 1400
-print("manifest needed")
-#endif
-       ], [
-       # Could do a CHECK_PROG for mt, but should always be with MSVC8+
-       VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi"
-       VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi"
-       MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}"
-       TEA_ADD_CLEANFILES([*.manifest])
-       ])
-       MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)"
-    else
-       MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)"
-       MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}"
-       MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)"
-    fi
-
-    if test "${SHARED_BUILD}" = "1" ; then
-       MAKE_LIB="${MAKE_SHARED_LIB} "
-    else
-       MAKE_LIB="${MAKE_STATIC_LIB} "
-    fi
-
-    #--------------------------------------------------------------------
-    # Shared libraries and static libraries have different names.
-    # Use the double eval to make sure any variables in the suffix is
-    # substituted. (@@@ Might not be necessary anymore)
-    #--------------------------------------------------------------------
-
-    if test "${TEA_PLATFORM}" = "windows" ; then
-       if test "${SHARED_BUILD}" = "1" ; then
-           # We force the unresolved linking of symbols that are really in
-           # the private libraries of Tcl and Tk.
-           if test x"${TK_BIN_DIR}" != x ; then
-               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\""
-           fi
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\""
-           if test "$GCC" = "yes"; then
-               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc"
-           fi
-           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
-       else
-           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
-           if test "$GCC" = "yes"; then
-               PKG_LIB_FILE=lib${PKG_LIB_FILE}
-           fi
-       fi
-       # Some packages build their own stubs libraries
-       eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
-       if test "$GCC" = "yes"; then
-           PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE}
-       fi
-       # These aren't needed on Windows (either MSVC or gcc)
-       RANLIB=:
-       RANLIB_STUB=:
-    else
-       RANLIB_STUB="${RANLIB}"
-       if test "${SHARED_BUILD}" = "1" ; then
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}"
-           if test x"${TK_BIN_DIR}" != x ; then
-               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}"
-           fi
-           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
-           RANLIB=:
-       else
-           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
-       fi
-       # Some packages build their own stubs libraries
-       eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
-    fi
-
-    # These are escaped so that only CFLAGS is picked up at configure time.
-    # The other values will be substituted at make time.
-    CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}"
-    if test "${SHARED_BUILD}" = "1" ; then
-       CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}"
-    fi
-
-    AC_SUBST(MAKE_LIB)
-    AC_SUBST(MAKE_SHARED_LIB)
-    AC_SUBST(MAKE_STATIC_LIB)
-    AC_SUBST(MAKE_STUB_LIB)
-    AC_SUBST(RANLIB_STUB)
-    AC_SUBST(VC_MANIFEST_EMBED_DLL)
-    AC_SUBST(VC_MANIFEST_EMBED_EXE)
-])
-
-#------------------------------------------------------------------------
-# TEA_LIB_SPEC --
-#
-#      Compute the name of an existing object library located in libdir
-#      from the given base name and produce the appropriate linker flags.
-#
-# Arguments:
-#      basename        The base name of the library without version
-#                      numbers, extensions, or "lib" prefixes.
-#      extra_dir       Extra directory in which to search for the
-#                      library.  This location is used first, then
-#                      $prefix/$exec-prefix, then some defaults.
-#
-# Requires:
-#      TEA_INIT and TEA_PREFIX must be called first.
-#
-# Results:
-#
-#      Defines the following vars:
-#              ${basename}_LIB_NAME    The computed library name.
-#              ${basename}_LIB_SPEC    The computed linker flags.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LIB_SPEC], [
-    AC_MSG_CHECKING([for $1 library])
-
-    # Look in exec-prefix for the library (defined by TEA_PREFIX).
-
-    tea_lib_name_dir="${exec_prefix}/lib"
-
-    # Or in a user-specified location.
-
-    if test x"$2" != x ; then
-       tea_extra_lib_dir=$2
-    else
-       tea_extra_lib_dir=NONE
-    fi
-
-    for i in \
-           `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do
-       if test -f "$i" ; then
-           tea_lib_name_dir=`dirname $i`
-           $1_LIB_NAME=`basename $i`
-           $1_LIB_PATH_NAME=$i
-           break
-       fi
-    done
-
-    if test "${TEA_PLATFORM}" = "windows"; then
-       $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\"
-    else
-       # Strip off the leading "lib" and trailing ".a" or ".so"
-
-       tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'`
-       $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}"
-    fi
-
-    if test "x${$1_LIB_NAME}" = x ; then
-       AC_MSG_ERROR([not found])
-    else
-       AC_MSG_RESULT([${$1_LIB_SPEC}])
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PRIVATE_TCL_HEADERS --
-#
-#      Locate the private Tcl include files
-#
-# Arguments:
-#
-#      Requires:
-#              TCL_SRC_DIR     Assumes that TEA_LOAD_TCLCONFIG has
-#                              already been called.
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TCL_TOP_DIR_NATIVE
-#              TCL_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [
-    # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh}
-    AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS])
-    AC_MSG_CHECKING([for Tcl private include files])
-
-    TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}`
-    TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\"
-
-    # Check to see if tcl<Plat>Port.h isn't already with the public headers
-    # Don't look for tclInt.h because that resides with tcl.h in the core
-    # sources, but the <plat>Port headers are in a different directory
-    if test "${TEA_PLATFORM}" = "windows" -a \
-       -f "${ac_cv_c_tclh}/tclWinPort.h"; then
-       result="private headers found with public headers"
-    elif test "${TEA_PLATFORM}" = "unix" -a \
-       -f "${ac_cv_c_tclh}/tclUnixPort.h"; then
-       result="private headers found with public headers"
-    else
-       TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\"
-       if test "${TEA_PLATFORM}" = "windows"; then
-           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\"
-       else
-           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\"
-       fi
-       # Overwrite the previous TCL_INCLUDES as this should capture both
-       # public and private headers in the same set.
-       # We want to ensure these are substituted so as not to require
-       # any *_NATIVE vars be defined in the Makefile
-       TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}"
-       if test "`uname -s`" = "Darwin"; then
-            # If Tcl was built as a framework, attempt to use
-            # the framework's Headers and PrivateHeaders directories
-            case ${TCL_DEFS} in
-               *TCL_FRAMEWORK*)
-                   if test -d "${TCL_BIN_DIR}/Headers" -a \
-                           -d "${TCL_BIN_DIR}/PrivateHeaders"; then
-                       TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"
-                   else
-                       TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
-                   fi
-                   ;;
-           esac
-           result="Using ${TCL_INCLUDES}"
-       else
-           if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then
-               AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}])
-           fi
-           result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}"
-       fi
-    fi
-
-    AC_SUBST(TCL_TOP_DIR_NATIVE)
-
-    AC_SUBST(TCL_INCLUDES)
-    AC_MSG_RESULT([${result}])
-])
-
-#------------------------------------------------------------------------
-# TEA_PUBLIC_TCL_HEADERS --
-#
-#      Locate the installed public Tcl header files
-#
-# Arguments:
-#      None.
-#
-# Requires:
-#      CYGPATH must be set
-#
-# Results:
-#
-#      Adds a --with-tclinclude switch to configure.
-#      Result is cached.
-#
-#      Substitutes the following vars:
-#              TCL_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [
-    AC_MSG_CHECKING([for Tcl public headers])
-
-    AC_ARG_WITH(tclinclude, [  --with-tclinclude       directory containing the public Tcl header files], with_tclinclude=${withval})
-
-    AC_CACHE_VAL(ac_cv_c_tclh, [
-       # Use the value from --with-tclinclude, if it was given
-
-       if test x"${with_tclinclude}" != x ; then
-           if test -f "${with_tclinclude}/tcl.h" ; then
-               ac_cv_c_tclh=${with_tclinclude}
-           else
-               AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h])
-           fi
-       else
-           list=""
-           if test "`uname -s`" = "Darwin"; then
-               # If Tcl was built as a framework, attempt to use
-               # the framework's Headers directory
-               case ${TCL_DEFS} in
-                   *TCL_FRAMEWORK*)
-                       list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`"
-                       ;;
-               esac
-           fi
-
-           # Look in the source dir only if Tcl is not installed,
-           # and in that situation, look there before installed locations.
-           if test -f "${TCL_BIN_DIR}/Makefile" ; then
-               list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`"
-           fi
-
-           # Check order: pkg --prefix location, Tcl's --prefix location,
-           # relative to directory of tclConfig.sh.
-
-           eval "temp_includedir=${includedir}"
-           list="$list \
-               `ls -d ${temp_includedir}        2>/dev/null` \
-               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
-               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
-           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
-               list="$list /usr/local/include /usr/include"
-               if test x"${TCL_INCLUDE_SPEC}" != x ; then
-                   d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'`
-                   list="$list `ls -d ${d} 2>/dev/null`"
-               fi
-           fi
-           for i in $list ; do
-               if test -f "$i/tcl.h" ; then
-                   ac_cv_c_tclh=$i
-                   break
-               fi
-           done
-       fi
-    ])
-
-    # Print a message based on how we determined the include path
-
-    if test x"${ac_cv_c_tclh}" = x ; then
-       AC_MSG_ERROR([tcl.h not found.  Please specify its location with --with-tclinclude])
-    else
-       AC_MSG_RESULT([${ac_cv_c_tclh}])
-    fi
-
-    # Convert to a native path and substitute into the output files.
-
-    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
-
-    TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-
-    AC_SUBST(TCL_INCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_PRIVATE_TK_HEADERS --
-#
-#      Locate the private Tk include files
-#
-# Arguments:
-#
-#      Requires:
-#              TK_SRC_DIR      Assumes that TEA_LOAD_TKCONFIG has
-#                               already been called.
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TK_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [
-    # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh}
-    AC_REQUIRE([TEA_PUBLIC_TK_HEADERS])
-    AC_MSG_CHECKING([for Tk private include files])
-
-    TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}`
-    TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\"
-
-    # Check to see if tk<Plat>Port.h isn't already with the public headers
-    # Don't look for tkInt.h because that resides with tk.h in the core
-    # sources, but the <plat>Port headers are in a different directory
-    if test "${TEA_PLATFORM}" = "windows" -a \
-       -f "${ac_cv_c_tkh}/tkWinPort.h"; then
-       result="private headers found with public headers"
-    elif test "${TEA_PLATFORM}" = "unix" -a \
-       -f "${ac_cv_c_tkh}/tkUnixPort.h"; then
-       result="private headers found with public headers"
-    else
-       TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\"
-       TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\"
-       if test "${TEA_PLATFORM}" = "windows"; then
-           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\"
-       else
-           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\"
-       fi
-       # Overwrite the previous TK_INCLUDES as this should capture both
-       # public and private headers in the same set.
-       # We want to ensure these are substituted so as not to require
-       # any *_NATIVE vars be defined in the Makefile
-       TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}"
-       # Detect and add ttk subdir
-       if test -d "${TK_SRC_DIR}/generic/ttk"; then
-          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\""
-       fi
-       if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
-          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\""
-       fi
-       if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then
-          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\""
-       fi
-       if test "`uname -s`" = "Darwin"; then
-           # If Tk was built as a framework, attempt to use
-           # the framework's Headers and PrivateHeaders directories
-           case ${TK_DEFS} in
-               *TK_FRAMEWORK*)
-                       if test -d "${TK_BIN_DIR}/Headers" -a \
-                               -d "${TK_BIN_DIR}/PrivateHeaders"; then
-                           TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"
-                       else
-                           TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
-                       fi
-                       ;;
-           esac
-           result="Using ${TK_INCLUDES}"
-       else
-           if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then
-              AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}])
-           fi
-           result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}"
-       fi
-    fi
-
-    AC_SUBST(TK_TOP_DIR_NATIVE)
-    AC_SUBST(TK_XLIB_DIR_NATIVE)
-
-    AC_SUBST(TK_INCLUDES)
-    AC_MSG_RESULT([${result}])
-])
-
-#------------------------------------------------------------------------
-# TEA_PUBLIC_TK_HEADERS --
-#
-#      Locate the installed public Tk header files
-#
-# Arguments:
-#      None.
-#
-# Requires:
-#      CYGPATH must be set
-#
-# Results:
-#
-#      Adds a --with-tkinclude switch to configure.
-#      Result is cached.
-#
-#      Substitutes the following vars:
-#              TK_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [
-    AC_MSG_CHECKING([for Tk public headers])
-
-    AC_ARG_WITH(tkinclude, [  --with-tkinclude        directory containing the public Tk header files], with_tkinclude=${withval})
-
-    AC_CACHE_VAL(ac_cv_c_tkh, [
-       # Use the value from --with-tkinclude, if it was given
-
-       if test x"${with_tkinclude}" != x ; then
-           if test -f "${with_tkinclude}/tk.h" ; then
-               ac_cv_c_tkh=${with_tkinclude}
-           else
-               AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h])
-           fi
-       else
-           list=""
-           if test "`uname -s`" = "Darwin"; then
-               # If Tk was built as a framework, attempt to use
-               # the framework's Headers directory.
-               case ${TK_DEFS} in
-                   *TK_FRAMEWORK*)
-                       list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`"
-                       ;;
-               esac
-           fi
-
-           # Look in the source dir only if Tk is not installed,
-           # and in that situation, look there before installed locations.
-           if test -f "${TK_BIN_DIR}/Makefile" ; then
-               list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`"
-           fi
-
-           # Check order: pkg --prefix location, Tk's --prefix location,
-           # relative to directory of tkConfig.sh, Tcl's --prefix location,
-           # relative to directory of tclConfig.sh.
-
-           eval "temp_includedir=${includedir}"
-           list="$list \
-               `ls -d ${temp_includedir}        2>/dev/null` \
-               `ls -d ${TK_PREFIX}/include      2>/dev/null` \
-               `ls -d ${TK_BIN_DIR}/../include  2>/dev/null` \
-               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
-               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
-           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
-               list="$list /usr/local/include /usr/include"
-               if test x"${TK_INCLUDE_SPEC}" != x ; then
-                   d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'`
-                   list="$list `ls -d ${d} 2>/dev/null`"
-               fi
-           fi
-           for i in $list ; do
-               if test -f "$i/tk.h" ; then
-                   ac_cv_c_tkh=$i
-                   break
-               fi
-           done
-       fi
-    ])
-
-    # Print a message based on how we determined the include path
-
-    if test x"${ac_cv_c_tkh}" = x ; then
-       AC_MSG_ERROR([tk.h not found.  Please specify its location with --with-tkinclude])
-    else
-       AC_MSG_RESULT([${ac_cv_c_tkh}])
-    fi
-
-    # Convert to a native path and substitute into the output files.
-
-    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}`
-
-    TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-
-    AC_SUBST(TK_INCLUDES)
-
-    if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
-       # On Windows and Aqua, we need the X compat headers
-       AC_MSG_CHECKING([for X11 header files])
-       if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then
-           INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`"
-           TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-           AC_SUBST(TK_XINCLUDES)
-       fi
-       AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}])
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PATH_CONFIG --
-#
-#      Locate the ${1}Config.sh file and perform a sanity check on
-#      the ${1} compile flags.  These are used by packages like
-#      [incr Tk] that load *Config.sh files from more than Tcl and Tk.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-$1=...
-#
-#      Defines the following vars:
-#              $1_BIN_DIR      Full path to the directory containing
-#                              the $1Config.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_CONFIG], [
-    #
-    # Ok, lets find the $1 configuration
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-$1
-    #
-
-    if test x"${no_$1}" = x ; then
-       # we reset no_$1 in case something fails here
-       no_$1=true
-       AC_ARG_WITH($1, [  --with-$1              directory containing $1 configuration ($1Config.sh)], with_$1config=${withval})
-       AC_MSG_CHECKING([for $1 configuration])
-       AC_CACHE_VAL(ac_cv_c_$1config,[
-
-           # First check to see if --with-$1 was specified.
-           if test x"${with_$1config}" != x ; then
-               case ${with_$1config} in
-                   */$1Config.sh )
-                       if test -f ${with_$1config}; then
-                           AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself])
-                           with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'`
-                       fi;;
-               esac
-               if test -f "${with_$1config}/$1Config.sh" ; then
-                   ac_cv_c_$1config=`(cd ${with_$1config}; pwd)`
-               else
-                   AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh])
-               fi
-           fi
-
-           # then check for a private $1 installation
-           if test x"${ac_cv_c_$1config}" = x ; then
-               for i in \
-                       ../$1 \
-                       `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ../../$1 \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ../../../$1 \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ${srcdir}/../$1 \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ; do
-                   if test -f "$i/$1Config.sh" ; then
-                       ac_cv_c_$1config=`(cd $i; pwd)`
-                       break
-                   fi
-                   if test -f "$i/unix/$1Config.sh" ; then
-                       ac_cv_c_$1config=`(cd $i/unix; pwd)`
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few common install locations
-           if test x"${ac_cv_c_$1config}" = x ; then
-               for i in `ls -d ${libdir} 2>/dev/null` \
-                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
-                       `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
-                       `ls -d /usr/contrib/lib 2>/dev/null` \
-                       `ls -d /usr/lib 2>/dev/null` \
-                       `ls -d /usr/lib64 2>/dev/null` \
-                       ; do
-                   if test -f "$i/$1Config.sh" ; then
-                       ac_cv_c_$1config=`(cd $i; pwd)`
-                       break
-                   fi
-               done
-           fi
-       ])
-
-       if test x"${ac_cv_c_$1config}" = x ; then
-           $1_BIN_DIR="# no $1 configs found"
-           AC_MSG_WARN([Cannot find $1 configuration definitions])
-           exit 0
-       else
-           no_$1=
-           $1_BIN_DIR=${ac_cv_c_$1config}
-           AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_CONFIG --
-#
-#      Load the $1Config.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              $1_BIN_DIR
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              $1_SRC_DIR
-#              $1_LIB_FILE
-#              $1_LIB_SPEC
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_CONFIG], [
-    AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh])
-
-    if test -f "${$1_BIN_DIR}/$1Config.sh" ; then
-        AC_MSG_RESULT([loading])
-       . "${$1_BIN_DIR}/$1Config.sh"
-    else
-        AC_MSG_RESULT([file not found])
-    fi
-
-    #
-    # If the $1_BIN_DIR is the build directory (not the install directory),
-    # then set the common variable name to the value of the build variables.
-    # For example, the variable $1_LIB_SPEC will be set to the value
-    # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC
-    # instead of $1_BUILD_LIB_SPEC since it will work with both an
-    # installed and uninstalled version of Tcl.
-    #
-
-    if test -f "${$1_BIN_DIR}/Makefile" ; then
-       AC_MSG_WARN([Found Makefile - using build library specs for $1])
-        $1_LIB_SPEC=${$1_BUILD_LIB_SPEC}
-        $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC}
-        $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH}
-        $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC}
-        $1_LIBRARY_PATH=${$1_LIBRARY_PATH}
-    fi
-
-    AC_SUBST($1_VERSION)
-    AC_SUBST($1_BIN_DIR)
-    AC_SUBST($1_SRC_DIR)
-
-    AC_SUBST($1_LIB_FILE)
-    AC_SUBST($1_LIB_SPEC)
-
-    AC_SUBST($1_STUB_LIB_FILE)
-    AC_SUBST($1_STUB_LIB_SPEC)
-    AC_SUBST($1_STUB_LIB_PATH)
-
-    # Allow the caller to prevent this auto-check by specifying any 2nd arg
-    AS_IF([test "x$2" = x], [
-       # Check both upper and lower-case variants
-       # If a dev wanted non-stubs libs, this function could take an option
-       # to not use _STUB in the paths below
-       AS_IF([test "x${$1_STUB_LIB_SPEC}" = x],
-           [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)],
-           [TEA_LOAD_CONFIG_LIB($1_STUB)])
-    ])
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_CONFIG_LIB --
-#
-#      Helper function to load correct library from another extension's
-#      ${PACKAGE}Config.sh.
-#
-# Results:
-#      Adds to LIBS the appropriate extension library
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_LOAD_CONFIG_LIB], [
-    AC_MSG_CHECKING([For $1 library for LIBS])
-    # This simplifies the use of stub libraries by automatically adding
-    # the stub lib to your path.  Normally this would add to SHLIB_LD_LIBS,
-    # but this is called before CONFIG_CFLAGS.  More importantly, this adds
-    # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD.
-    if test "x${$1_LIB_SPEC}" != "x" ; then
-       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then
-           TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"])
-           AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}])
-       else
-           TEA_ADD_LIBS([${$1_LIB_SPEC}])
-           AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}])
-       fi
-    else
-       AC_MSG_RESULT([file not found])
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_EXPORT_CONFIG --
-#
-#      Define the data to insert into the ${PACKAGE}Config.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              $1
-#
-# Results:
-#      Substitutes the following vars:
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_EXPORT_CONFIG], [
-    #--------------------------------------------------------------------
-    # These are for $1Config.sh
-    #--------------------------------------------------------------------
-
-    # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib)
-    eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}"
-    if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
-       eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}"
-       eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}"
-    else
-       eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
-       eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
-    fi
-    $1_BUILD_LIB_SPEC="-L`$CYGPATH $(pwd)` ${$1_LIB_FLAG}"
-    $1_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${$1_LIB_FLAG}"
-    $1_BUILD_STUB_LIB_SPEC="-L`$CYGPATH $(pwd)` [$]{$1_STUB_LIB_FLAG}"
-    $1_STUB_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` [$]{$1_STUB_LIB_FLAG}"
-    $1_BUILD_STUB_LIB_PATH="`$CYGPATH $(pwd)`/[$]{PKG_STUB_LIB_FILE}"
-    $1_STUB_LIB_PATH="`$CYGPATH ${pkglibdir}`/[$]{PKG_STUB_LIB_FILE}"
-
-    AC_SUBST($1_BUILD_LIB_SPEC)
-    AC_SUBST($1_LIB_SPEC)
-    AC_SUBST($1_BUILD_STUB_LIB_SPEC)
-    AC_SUBST($1_STUB_LIB_SPEC)
-    AC_SUBST($1_BUILD_STUB_LIB_PATH)
-    AC_SUBST($1_STUB_LIB_PATH)
-
-    AC_SUBST(MAJOR_VERSION)
-    AC_SUBST(MINOR_VERSION)
-    AC_SUBST(PATCHLEVEL)
-])
-
-
-#------------------------------------------------------------------------
-# TEA_PATH_CELIB --
-#
-#      Locate Keuchel's celib emulation layer for targeting Win/CE
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-celib=...
-#
-#      Defines the following vars:
-#              CELIB_DIR       Full path to the directory containing
-#                              the include and platform lib files
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_CELIB], [
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-celib
-
-    if test x"${no_celib}" = x ; then
-       # we reset no_celib in case something fails here
-       no_celib=true
-       AC_ARG_WITH(celib,[  --with-celib=DIR        use Windows/CE support library from DIR], with_celibconfig=${withval})
-       AC_MSG_CHECKING([for Windows/CE celib directory])
-       AC_CACHE_VAL(ac_cv_c_celibconfig,[
-           # First check to see if --with-celibconfig was specified.
-           if test x"${with_celibconfig}" != x ; then
-               if test -d "${with_celibconfig}/inc" ; then
-                   ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)`
-               else
-                   AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory])
-               fi
-           fi
-
-           # then check for a celib library
-           if test x"${ac_cv_c_celibconfig}" = x ; then
-               for i in \
-                       ../celib-palm-3.0 \
-                       ../celib \
-                       ../../celib-palm-3.0 \
-                       ../../celib \
-                       `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \
-                       ${srcdir}/../celib-palm-3.0 \
-                       ${srcdir}/../celib \
-                       `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \
-                       ; do
-                   if test -d "$i/inc" ; then
-                       ac_cv_c_celibconfig=`(cd $i; pwd)`
-                       break
-                   fi
-               done
-           fi
-       ])
-       if test x"${ac_cv_c_celibconfig}" = x ; then
-           AC_MSG_ERROR([Cannot find celib support library directory])
-       else
-           no_celib=
-           CELIB_DIR=${ac_cv_c_celibconfig}
-           CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
-           AC_MSG_RESULT([found $CELIB_DIR])
-       fi
-    fi
-])
-# Local Variables:
-# mode: autoconf
-# End:
diff --git a/pkgs/tdbcpostgres1.0.5/win/makefile.vc b/pkgs/tdbcpostgres1.0.5/win/makefile.vc
deleted file mode 100644 (file)
index 2304aa8..0000000
+++ /dev/null
@@ -1,515 +0,0 @@
-#------------------------------------------------------------- -*- makefile -*-\r
-# makefile.vc --\r
-#\r
-#      Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)\r
-#\r
-# This makefile is based upon the Tcl 8.6 Makefile.vc and modified to\r
-# make it suitable as a general package makefile. Look for the word EDIT\r
-# which marks sections that may need modification. As a minumum you will\r
-# need to change the PROJECT, DOTVERSION and DLLOBJS variables to values\r
-# relevant to your package.\r
-#\r
-# See the file "license.terms" for information on usage and redistribution\r
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
-#\r
-# Copyright (c) 1995-1996 Sun Microsystems, Inc.\r
-# Copyright (c) 1998-2000 Ajuba Solutions.\r
-# Copyright (c) 2001-2005 ActiveState Corporation.\r
-# Copyright (c) 2001-2004 David Gravereaux.\r
-# Copyright (c) 2003-2008 Pat Thoyts.\r
-#------------------------------------------------------------------------------\r
-\r
-# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or\r
-# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)\r
-!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)\r
-MSG = ^\r
-You need to run vcvars32.bat from Developer Studio or setenv.bat from the^\r
-Platform SDK first to setup the environment.  Jump to this line to read^\r
-the build instructions.\r
-!error $(MSG)\r
-!endif\r
-\r
-#------------------------------------------------------------------------------\r
-# HOW TO USE this makefile:\r
-#\r
-# 1)  It is now necessary to have MSVCDir, MSDevDir or MSSDK set in the\r
-#     environment.  This is used as a check to see if vcvars32.bat had been\r
-#     run prior to running nmake or during the installation of Microsoft\r
-#     Visual C++, MSVCDir had been set globally and the PATH adjusted.\r
-#     Either way is valid.\r
-#\r
-#     You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin\r
-#     directory to setup the proper environment, if needed, for your\r
-#     current setup.  This is a needed bootstrap requirement and allows the\r
-#     swapping of different environments to be easier.\r
-#\r
-# 2)  To use the Platform SDK (not expressly needed), run setenv.bat after\r
-#     vcvars32.bat according to the instructions for it.  This can also\r
-#     turn on the 64-bit compiler, if your SDK has it.\r
-#\r
-# 3)  Targets are:\r
-#      all       -- Builds everything.\r
-#      <project> -- Builds the project (eg: nmake sample)\r
-#      test      -- Builds and runs the test suite.\r
-#      install   -- Installs the built binaries and libraries to $(INSTALLDIR)\r
-#                   in an appropriate subdirectory.\r
-#      clean/realclean/distclean -- varying levels of cleaning.\r
-#\r
-# 4)  Macros usable on the commandline:\r
-#      INSTALLDIR=<path>\r
-#              Sets where to install Tcl from the built binaries.\r
-#              C:\Progra~1\Tcl is assumed when not specified.\r
-#\r
-#      OPTS=loimpact,msvcrt,nothreads,pdbs,profile,static,symbols,unchecked,none\r
-#              Sets special options for the core.  The default is for none.\r
-#              Any combination of the above may be used (comma separated).\r
-#              'none' will over-ride everything to nothing.\r
-#\r
-#              loimpact = Adds a flag for how NT treats the heap to keep memory\r
-#                         in use, low.  This is said to impact alloc performance.\r
-#              msvcrt  =  Affects the static option only to switch it from\r
-#                         using libcmt(d) as the C runtime [by default] to\r
-#                         msvcrt(d). This is useful for static embedding\r
-#                         support.\r
-#              nothreads = Turns off multithreading support (not recommended)\r
-#              static  =  Builds a static library of the core instead of a\r
-#                         dll.  The shell will be static (and large), as well.\r
-#              pdbs     = Build detached symbols for release builds.\r
-#              profile  = Adds profiling hooks.  Map file is assumed.\r
-#              symbols  = Debug build. Links to the debug C runtime, disables\r
-#                         optimizations and creates pdb symbols files.\r
-#              unchecked = Allows a symbols build to not use the debug\r
-#                         enabled runtime (msvcrt.dll not msvcrtd.dll\r
-#                         or libcmt.lib not libcmtd.lib).\r
-#\r
-#      STATS=memdbg,compdbg,none\r
-#              Sets optional memory and bytecode compiler debugging code added\r
-#              to the core.  The default is for none.  Any combination of the\r
-#              above may be used (comma separated).  'none' will over-ride\r
-#              everything to nothing.\r
-#\r
-#              memdbg   = Enables the debugging memory allocator.\r
-#              compdbg  = Enables byte compilation logging.\r
-#\r
-#      CHECKS=64bit,fullwarn,nodep,none\r
-#              Sets special macros for checking compatability.\r
-#\r
-#              64bit    = Enable 64bit portability warnings (if available)\r
-#              fullwarn = Builds with full compiler and link warnings enabled.\r
-#                          Very verbose.\r
-#              nodep    = Turns off compatability macros to ensure Tk isn't\r
-#                          being built with deprecated functions.\r
-#\r
-#      MACHINE=(ALPHA|AMD64|IA64|IX86)\r
-#              Set the machine type used for the compiler, linker, and\r
-#              resource compiler.  This hook is needed to tell the tools\r
-#              when alternate platforms are requested.  IX86 is the default\r
-#              when not specified. If the CPU environment variable has been\r
-#              set (ie: recent Platform SDK) then MACHINE is set from CPU.\r
-#\r
-#      TMP_DIR=<path>\r
-#      OUT_DIR=<path>\r
-#              Hooks to allow the intermediate and output directories to be\r
-#              changed.  $(OUT_DIR) is assumed to be\r
-#              $(BINROOT)\(Release|Debug) based on if symbols are requested.\r
-#              $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default.\r
-#\r
-#      TESTPAT=<file>\r
-#              Reads the tests requested to be run from this file.\r
-#\r
-# 5)  Examples:\r
-#\r
-#      Basic syntax of calling nmake looks like this:\r
-#      nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]]\r
-#\r
-#                        Standard (no frills)\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
-#       c:\tcl_src\win\>nmake -f makefile.vc all\r
-#       c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl\r
-#\r
-#                         Building for Win64\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
-#       c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL\r
-#       Targeting Windows pre64 RETAIL\r
-#       c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64\r
-#\r
-#------------------------------------------------------------------------------\r
-#==============================================================================\r
-#------------------------------------------------------------------------------\r
-\r
-!if !exist("makefile.vc")\r
-MSG = ^\r
-You must run this makefile only from the directory it is in.^\r
-Please `cd` to its location first.\r
-!error $(MSG)\r
-!endif\r
-\r
-#-------------------------------------------------------------------------\r
-# Project specific information (EDIT)\r
-#\r
-# You should edit this with the name and version of your project. This\r
-# information is used to generate the name of the package library and\r
-# it's install location.\r
-#\r
-# For example, the sample extension is  going to build sample05.dll and\r
-# would install it into $(INSTALLDIR)\lib\sample05\r
-#\r
-# You need to specify the object files that need to be linked into your\r
-# binary here.\r
-#\r
-#-------------------------------------------------------------------------\r
-\r
-PROJECT = tdbcpostgres\r
-\r
-# Uncomment the following line if this is a Tk extension.\r
-#PROJECT_REQUIRES_TK=1\r
-!include "rules.vc"\r
-\r
-# nmakehelp -V <file> <tag> will search the file for tag, skips until a\r
-#      number and returns all character until a character not in [0-9.ab]\r
-#      is read.\r
-\r
-!if [echo REM = This file is generated from Makefile.vc > versions.vc]\r
-!endif\r
-# get project version from row AC_INIT([tdbcpostgres], ...)\r
-!if [echo DOTVERSION = \>> versions.vc] \\r
-   && [nmakehlp -V ..\configure.ac AC_INIT >> versions.vc]\r
-!endif\r
-!if [echo TCL_VERSION_REQ = \>> versions.vc] \\r
-   && [nmakehlp -V ..\configure.ac TCL_VERSION_REQ >> versions.vc]\r
-!endif\r
-!include "versions.vc"\r
-\r
-VERSION         = $(DOTVERSION:.=)\r
-STUBPREFIX      = $(PROJECT)stub\r
-\r
-DLLOBJS = \\r
-       $(TMP_DIR)\tdbcpostgres.obj \\r
-       $(TMP_DIR)\pqStubInit.obj\r
-\r
-\r
-PRJSTUBOBJS = \\r
-       $(TMP_DIR)\pqStubInit.obj\r
-\r
-PRJHEADERS = \\r
-       $(GENERICDIR)\fakepq.h \\r
-       $(GENERICDIR)\pqStubs.h\r
-\r
-\r
-#-------------------------------------------------------------------------\r
-# Target names and paths ( shouldn't need changing )\r
-#-------------------------------------------------------------------------\r
-\r
-BINROOT                = $(MAKEDIR)\r
-ROOT            = $(MAKEDIR)\..\r
-\r
-PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib\r
-PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)\r
-PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)\r
-\r
-PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
-PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)\r
-\r
-### Make sure we use backslash only.\r
-PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)\r
-LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)\r
-INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include\r
-\r
-### The following paths CANNOT have spaces in them.\r
-GENERICDIR     = $(ROOT)\generic\r
-WINDIR         = $(ROOT)\win\r
-LIBDIR          = $(ROOT)\library\r
-DOCDIR         = $(ROOT)\doc\r
-TOOLSDIR       = $(ROOT)\tools\r
-COMPATDIR      = $(ROOT)\compat\r
-\r
-### tdbc\r
-TDBC_DOTVERSION                = $(DOTVERSION)\r
-TDBC_VERSION           = $(TDBC_DOTVERSION:.=)\r
-# tdbc source folder is "../tdbc" in source distribution and\r
-# "../tdbc1.0.0" in tcl8.6.0 bundeled distribution\r
-TDBC_DIR               = $(ROOT)\..\tdbc\r
-!if !exist($(TDBC_DIR))\r
-TDBC_DIR               = $(ROOT)\..\tdbc$(TDBC_DOTVERSION)\r
-!endif\r
-TDBC_GENERIC_DIR       = $(TDBC_DIR)\generic\r
-### tdbc stub lib\r
-TDBCSTUBLIBNAME                = tdbcstub$(TDBC_VERSION).lib\r
-TDBCSTUBLIB            = "$(_TCLDIR)\lib\$(TDBCSTUBLIBNAME)"\r
-!if !exist($(TDBCSTUBLIB))\r
-TDBCSTUBLIB            = $(TDBC_DIR)\win\$(BUILDDIRTOP)\$(TDBCSTUBLIBNAME)\r
-!endif\r
-TDBC_LIB_FILE          = tdbc$(TDBC_VERSION).dll\r
-TDBC_BIN_DIR = $(TDBC_DIR)/win/$(BUILDDIRTOP)\r
-\r
-#---------------------------------------------------------------------\r
-# Compile flags\r
-#---------------------------------------------------------------------\r
-\r
-!if !$(DEBUG)\r
-!if $(OPTIMIZING)\r
-### This cranks the optimization level to maximize speed\r
-cdebug = $(OPTIMIZATIONS)\r
-!else\r
-cdebug =\r
-!endif\r
-!else if "$(MACHINE)" == "IA64"\r
-### Warnings are too many, can't support warnings into errors.\r
-cdebug = -Zi -Od $(DEBUGFLAGS)\r
-!else\r
-cdebug = -Zi -WX $(DEBUGFLAGS)\r
-!endif\r
-\r
-### Declarations common to all compiler options\r
-cwarn = $(WARNINGS) -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE\r
-cflags = -nologo -c $(COMPILERFLAGS) $(cwarn) -Fp$(TMP_DIR)^\\r
-\r
-!if $(MSVCRT)\r
-!if $(DEBUG) && !$(UNCHECKED)\r
-crt = -MDd\r
-!else\r
-crt = -MD\r
-!endif\r
-!else\r
-!if $(DEBUG) && !$(UNCHECKED)\r
-crt = -MTd\r
-!else\r
-crt = -MT\r
-!endif\r
-!endif\r
-\r
-cflags = $(cflags) -DMODULE_SCOPE=extern\r
-\r
-!if !$(STATIC_BUILD)\r
-cflags = $(cflags) -DUSE_TCL_STUBS\r
-!if defined(TKSTUBLIB)\r
-cflags = $(cflags) -DUSE_TK_STUBS\r
-!endif\r
-!endif\r
-\r
-INCLUDES       = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)" -I"$(TDBC_GENERIC_DIR)"\r
-BASE_CFLAGS    = $(cflags) $(cdebug) $(crt) $(INCLUDES)\r
-CON_CFLAGS     = $(cflags) $(cdebug) $(crt) -DCONSOLE\r
-TCL_CFLAGS     = -DPACKAGE_NAME="\"$(PROJECT)\"" \\r
-                 -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \\r
-                 -DBUILD_$(PROJECT) \\r
-                 $(BASE_CFLAGS) $(OPTDEFINES) \\r
-                  -Dinline=__inline\r
-\r
-### Stubs files should not be compiled with -GL\r
-STUB_CFLAGS     = $(cflags) $(cdebug:-GL=) #$(TK_DEFINES)\r
-\r
-#---------------------------------------------------------------------\r
-# Link flags\r
-#---------------------------------------------------------------------\r
-\r
-!if $(DEBUG)\r
-ldebug = -debug\r
-!if $(MSVCRT)\r
-ldebug = $(ldebug) -nodefaultlib:msvcrt\r
-!endif\r
-!else\r
-ldebug = -release -opt:ref -opt:icf,3\r
-!endif\r
-\r
-### Declarations common to all linker options\r
-lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)\r
-\r
-!if $(PROFILE)\r
-lflags = $(lflags) -profile\r
-!endif\r
-\r
-!if $(ALIGN98_HACK) && !$(STATIC_BUILD)\r
-### Align sections for PE size savings.\r
-lflags = $(lflags) -opt:nowin98\r
-!else if !$(ALIGN98_HACK) && $(STATIC_BUILD)\r
-### Align sections for speed in loading by choosing the virtual page size.\r
-lflags = $(lflags) -align:4096\r
-!endif\r
-\r
-!if $(LOIMPACT)\r
-lflags = $(lflags) -ws:aggressive\r
-!endif\r
-\r
-dlllflags = $(lflags) -dll\r
-conlflags = $(lflags) -subsystem:console\r
-guilflags = $(lflags) -subsystem:windows\r
-!if !$(STATIC_BUILD)\r
-baselibs  = $(TCLSTUBLIB) $(TDBCSTUBLIB)\r
-!if defined(TKSTUBLIB)\r
-baselibs  = $(baselibs) $(TKSTUBLIB)\r
-!endif\r
-!endif\r
-\r
-# Avoid 'unresolved external symbol __security_cookie' errors.\r
-# c.f. http://support.microsoft.com/?id=894573\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500\r
-baselibs   = $(baselibs) bufferoverflowU.lib\r
-!endif\r
-!endif\r
-\r
-#---------------------------------------------------------------------\r
-# TclTest flags\r
-#---------------------------------------------------------------------\r
-\r
-!if "$(TESTPAT)" != ""\r
-TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)\r
-!endif\r
-\r
-#---------------------------------------------------------------------\r
-# Project specific targets (EDIT)\r
-#---------------------------------------------------------------------\r
-\r
-all:       setup $(PROJECT)\r
-$(PROJECT): setup pkgIndex $(PRJLIB)\r
-install:    install-binaries install-libraries install-docs\r
-pkgIndex:   setup $(OUT_DIR)\pkgIndex.tcl\r
-\r
-!if !$(STATIC_BUILD)\r
-$(PROJECT):  $(PRJSTUBLIB)\r
-!endif\r
-\r
-test: setup $(PROJECT)\r
-        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)\r
-        @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)\r
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)\r
-       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)\r
-!if $(TCLINSTALL)\r
-        @set PATH=$(_TCLDIR)\bin;$(PATH)\r
-       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS)\r
-!else\r
-        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)\r
-       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) \\r
-               -load "package ifneeded tdbc::postgres $(DOTVERSION) \\r
-                       {source {$(LIBDIR:\=/)/tdbcpostgres.tcl};load {$(PRJLIB:\=/)} $(PROJECT)};\\r
-               package ifneeded tdbc $(TDBC_DOTVERSION) \\r
-                       {source {$(TDBC_BIN_DIR:\=/)/tdbc.tcl};load {$(TDBC_BIN_DIR:\=/)/$(TDBC_LIB_FILE)} tdbc}"\r
-!endif\r
-\r
-shell: setup $(PROJECT)\r
-        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)\r
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)\r
-!if $(TCLINSTALL)\r
-        @set PATH=$(_TCLDIR)\bin;$(PATH)\r
-!else\r
-        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)\r
-!endif\r
-        $(DEBUGGER) $(TCLSH) $(SCRIPT)\r
-\r
-setup:\r
-       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)\r
-       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)\r
-\r
-# See <tcl>/win/coffbase.txt for extension base addresses.\r
-$(PRJLIB): $(DLLOBJS)\r
-       $(link32) $(dlllflags) -base:@$(COFFBASE),tdbc -out:$@ $(baselibs) @<<\r
-$**\r
-<<\r
-       $(_VC_MANIFEST_EMBED_DLL)\r
-       -@del $*.exp\r
-\r
-$(PRJSTUBLIB): $(PRJSTUBOBJS)\r
-       $(lib32) -nologo -out:$@ $(PRJSTUBOBJS)\r
-\r
-\r
-#---------------------------------------------------------------------\r
-# Implicit rules\r
-#---------------------------------------------------------------------\r
-\r
-{$(WINDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(WINDIR)}.rc{$(TMP_DIR)}.res:\r
-       $(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \\r
-               -DCOMMAVERSION=$(DOTVERSION:.=,),0 \\r
-               -DDOTVERSION=\"$(DOTVERSION)\" \\r
-               -DVERSION=\"$(VERSION)$(SUFX)\" \\r
-!if $(DEBUG)\r
-       -d DEBUG \\r
-!endif\r
-!if $(TCL_THREADS)\r
-       -d TCL_THREADS \\r
-!endif\r
-!if $(STATIC_BUILD)\r
-       -d STATIC_BUILD \\r
-!endif\r
-       $<\r
-\r
-.SUFFIXES:\r
-.SUFFIXES:.c .rc\r
-\r
-#-------------------------------------------------------------------------\r
-# Explicit dependency rules\r
-#\r
-#-------------------------------------------------------------------------\r
-.PHONY: $(OUT_DIR)\pkgIndex.tcl\r
-\r
-$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in\r
-       @nmakehlp -s << $** > $@\r
-@PACKAGE_NAME@        $(PROJECT)\r
-@PACKAGE_VERSION@     $(DOTVERSION)\r
-@TCL_VERSION_REQ@     $(TCL_VERSION_REQ)\r
-@PKG_LIB_FILE@        $(PRJLIBNAME)\r
-<<\r
-\r
-$(TMP_DIR)\pqStubInit.obj : $(GENERICDIR)\pqStubInit.c\r
-        $(cc32) $(STUB_CFLAGS) $(TCL_INCLUDES) -Zl -DSTATIC_BUILD -Fo$@ $?\r
-\r
-#---------------------------------------------------------------------\r
-# Installation. (EDIT)\r
-#\r
-# You may need to modify this section to reflect the final distribution\r
-# of your files and possibly to generate documentation.\r
-#\r
-#---------------------------------------------------------------------\r
-\r
-install-binaries:\r
-       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'\r
-       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"\r
-       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL\r
-\r
-install-libraries: $(OUT_DIR)\pkgIndex.tcl\r
-       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'\r
-       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"\r
-       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'\r
-       @$(CPY) $(OUT_DIR)\pkgIndex.tcl "$(SCRIPT_INSTALL_DIR)"\r
-\r
-install-docs:\r
-       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'\r
-       @if exist $(DOCDIR) $(CPY) $(DOCDIR)\*.n "$(DOC_INSTALL_DIR)"\r
-\r
-#---------------------------------------------------------------------\r
-# Clean up\r
-#---------------------------------------------------------------------\r
-\r
-clean:\r
-       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)\r
-       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc\r
-       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i\r
-       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x\r
-       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch\r
-\r
-realclean: clean\r
-       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)\r
-\r
-distclean: realclean\r
-       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe\r
-       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj\r
diff --git a/pkgs/tdbcpostgres1.0.5/win/nmakehlp.c b/pkgs/tdbcpostgres1.0.5/win/nmakehlp.c
deleted file mode 100644 (file)
index b1a1517..0000000
+++ /dev/null
@@ -1,697 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * nmakehlp.c --
- *
- *     This is used to fix limitations within nmake and the environment.
- *
- * Copyright (c) 2002 by David Gravereaux.
- * Copyright (c) 2006 by Pat Thoyts
- *
- * See the file "license.terms" for information on usage and redistribution of
- * this file, and for a DISCLAIMER OF ALL WARRANTIES.
- * ----------------------------------------------------------------------------
- */
-
-#define _CRT_SECURE_NO_DEPRECATE
-#include <windows.h>
-#define NO_SHLWAPI_GDI
-#define NO_SHLWAPI_STREAM
-#define NO_SHLWAPI_REG
-#include <shlwapi.h>
-#pragma comment (lib, "user32.lib")
-#pragma comment (lib, "kernel32.lib")
-#pragma comment (lib, "shlwapi.lib")
-#include <stdio.h>
-#include <math.h>
-
-/*
- * This library is required for x64 builds with _some_ versions of MSVC
- */
-#if defined(_M_IA64) || defined(_M_AMD64)
-#if _MSC_VER >= 1400 && _MSC_VER < 1500
-#pragma comment(lib, "bufferoverflowU")
-#endif
-#endif
-
-/* ISO hack for dumb VC++ */
-#ifdef _MSC_VER
-#define   snprintf     _snprintf
-#endif
-
-
-
-/* protos */
-
-static int CheckForCompilerFeature(const char *option);
-static int CheckForLinkerFeature(const char *option);
-static int IsIn(const char *string, const char *substring);
-static int SubstituteFile(const char *substs, const char *filename);
-static int QualifyPath(const char *path);
-static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
-static DWORD WINAPI ReadFromPipe(LPVOID args);
-
-/* globals */
-
-#define CHUNK  25
-#define STATICBUFFERSIZE    1000
-typedef struct {
-    HANDLE pipe;
-    char buffer[STATICBUFFERSIZE];
-} pipeinfo;
-
-pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'};
-pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'};
-\f
-/*
- * exitcodes: 0 == no, 1 == yes, 2 == error
- */
-
-int
-main(
-    int argc,
-    char *argv[])
-{
-    char msg[300];
-    DWORD dwWritten;
-    int chars;
-
-    /*
-     * Make sure children (cl.exe and link.exe) are kept quiet.
-     */
-
-    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
-
-    /*
-     * Make sure the compiler and linker aren't effected by the outside world.
-     */
-
-    SetEnvironmentVariable("CL", "");
-    SetEnvironmentVariable("LINK", "");
-
-    if (argc > 1 && *argv[1] == '-') {
-       switch (*(argv[1]+1)) {
-       case 'c':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -c <compiler option>\n"
-                       "Tests for whether cl.exe supports an option\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return CheckForCompilerFeature(argv[2]);
-       case 'l':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -l <linker option>\n"
-                       "Tests for whether link.exe supports an option\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return CheckForLinkerFeature(argv[2]);
-       case 'f':
-           if (argc == 2) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -f <string> <substring>\n"
-                       "Find a substring within another\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           } else if (argc == 3) {
-               /*
-                * If the string is blank, there is no match.
-                */
-
-               return 0;
-           } else {
-               return IsIn(argv[2], argv[3]);
-           }
-       case 's':
-           if (argc == 2) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -s <substitutions file> <file>\n"
-                       "Perform a set of string map type substutitions on a file\n"
-                       "exitcodes: 0\n",
-                       argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return SubstituteFile(argv[2], argv[3]);
-       case 'V':
-           if (argc != 4) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                   "usage: %s -V filename matchstring\n"
-                   "Extract a version from a file:\n"
-                   "eg: pkgIndex.tcl \"package ifneeded http\"",
-                   argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                   &dwWritten, NULL);
-               return 0;
-           }
-           printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'));
-           return 0;
-       case 'Q':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                   "usage: %s -Q path\n"
-                   "Emit the fully qualified path\n"
-                   "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                   &dwWritten, NULL);
-               return 2;
-           }
-           return QualifyPath(argv[2]);
-       }
-    }
-    chars = snprintf(msg, sizeof(msg) - 1,
-           "usage: %s -c|-f|-l|-Q|-s|-V ...\n"
-           "This is a little helper app to equalize shell differences between WinNT and\n"
-           "Win9x and get nmake.exe to accomplish its job.\n",
-           argv[0]);
-    WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
-    return 2;
-}
-\f
-static int
-CheckForCompilerFeature(
-    const char *option)
-{
-    STARTUPINFO si;
-    PROCESS_INFORMATION pi;
-    SECURITY_ATTRIBUTES sa;
-    DWORD threadID;
-    char msg[300];
-    BOOL ok;
-    HANDLE hProcess, h, pipeThreads[2];
-    char cmdline[100];
-
-    hProcess = GetCurrentProcess();
-
-    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
-    ZeroMemory(&si, sizeof(STARTUPINFO));
-    si.cb = sizeof(STARTUPINFO);
-    si.dwFlags   = STARTF_USESTDHANDLES;
-    si.hStdInput = INVALID_HANDLE_VALUE;
-
-    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
-    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
-    sa.lpSecurityDescriptor = NULL;
-    sa.bInheritHandle = FALSE;
-
-    /*
-     * Create a non-inheritible pipe.
-     */
-
-    CreatePipe(&Out.pipe, &h, &sa, 0);
-
-    /*
-     * Dupe the write side, make it inheritible, and close the original.
-     */
-
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Same as above, but for the error side.
-     */
-
-    CreatePipe(&Err.pipe, &h, &sa, 0);
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Base command line.
-     */
-
-    lstrcpy(cmdline, "cl.exe -nologo -c -TC -Zs -X -Fp.\\_junk.pch ");
-
-    /*
-     * Append our option for testing
-     */
-
-    lstrcat(cmdline, option);
-
-    /*
-     * Filename to compile, which exists, but is nothing and empty.
-     */
-
-    lstrcat(cmdline, " .\\nul");
-
-    ok = CreateProcess(
-           NULL,           /* Module name. */
-           cmdline,        /* Command line. */
-           NULL,           /* Process handle not inheritable. */
-           NULL,           /* Thread handle not inheritable. */
-           TRUE,           /* yes, inherit handles. */
-           DETACHED_PROCESS, /* No console for you. */
-           NULL,           /* Use parent's environment block. */
-           NULL,           /* Use parent's starting directory. */
-           &si,            /* Pointer to STARTUPINFO structure. */
-           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
-
-    if (!ok) {
-       DWORD err = GetLastError();
-       int chars = snprintf(msg, sizeof(msg) - 1,
-               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
-
-       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
-               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
-               (300-chars), 0);
-       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
-       return 2;
-    }
-
-    /*
-     * Close our references to the write handles that have now been inherited.
-     */
-
-    CloseHandle(si.hStdOutput);
-    CloseHandle(si.hStdError);
-
-    WaitForInputIdle(pi.hProcess, 5000);
-    CloseHandle(pi.hThread);
-
-    /*
-     * Start the pipe reader threads.
-     */
-
-    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
-    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
-
-    /*
-     * Block waiting for the process to end.
-     */
-
-    WaitForSingleObject(pi.hProcess, INFINITE);
-    CloseHandle(pi.hProcess);
-
-    /*
-     * Wait for our pipe to get done reading, should it be a little slow.
-     */
-
-    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
-    CloseHandle(pipeThreads[0]);
-    CloseHandle(pipeThreads[1]);
-
-    /*
-     * Look for the commandline warning code in both streams.
-     *  - in MSVC 6 & 7 we get D4002, in MSVC 8 we get D9002.
-     */
-
-    return !(strstr(Out.buffer, "D4002") != NULL
-             || strstr(Err.buffer, "D4002") != NULL
-             || strstr(Out.buffer, "D9002") != NULL
-             || strstr(Err.buffer, "D9002") != NULL
-             || strstr(Out.buffer, "D2021") != NULL
-             || strstr(Err.buffer, "D2021") != NULL);
-}
-\f
-static int
-CheckForLinkerFeature(
-    const char *option)
-{
-    STARTUPINFO si;
-    PROCESS_INFORMATION pi;
-    SECURITY_ATTRIBUTES sa;
-    DWORD threadID;
-    char msg[300];
-    BOOL ok;
-    HANDLE hProcess, h, pipeThreads[2];
-    char cmdline[100];
-
-    hProcess = GetCurrentProcess();
-
-    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
-    ZeroMemory(&si, sizeof(STARTUPINFO));
-    si.cb = sizeof(STARTUPINFO);
-    si.dwFlags   = STARTF_USESTDHANDLES;
-    si.hStdInput = INVALID_HANDLE_VALUE;
-
-    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
-    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
-    sa.lpSecurityDescriptor = NULL;
-    sa.bInheritHandle = TRUE;
-
-    /*
-     * Create a non-inheritible pipe.
-     */
-
-    CreatePipe(&Out.pipe, &h, &sa, 0);
-
-    /*
-     * Dupe the write side, make it inheritible, and close the original.
-     */
-
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Same as above, but for the error side.
-     */
-
-    CreatePipe(&Err.pipe, &h, &sa, 0);
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Base command line.
-     */
-
-    lstrcpy(cmdline, "link.exe -nologo ");
-
-    /*
-     * Append our option for testing.
-     */
-
-    lstrcat(cmdline, option);
-
-    ok = CreateProcess(
-           NULL,           /* Module name. */
-           cmdline,        /* Command line. */
-           NULL,           /* Process handle not inheritable. */
-           NULL,           /* Thread handle not inheritable. */
-           TRUE,           /* yes, inherit handles. */
-           DETACHED_PROCESS, /* No console for you. */
-           NULL,           /* Use parent's environment block. */
-           NULL,           /* Use parent's starting directory. */
-           &si,            /* Pointer to STARTUPINFO structure. */
-           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
-
-    if (!ok) {
-       DWORD err = GetLastError();
-       int chars = snprintf(msg, sizeof(msg) - 1,
-               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
-
-       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
-               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
-               (300-chars), 0);
-       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
-       return 2;
-    }
-
-    /*
-     * Close our references to the write handles that have now been inherited.
-     */
-
-    CloseHandle(si.hStdOutput);
-    CloseHandle(si.hStdError);
-
-    WaitForInputIdle(pi.hProcess, 5000);
-    CloseHandle(pi.hThread);
-
-    /*
-     * Start the pipe reader threads.
-     */
-
-    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
-    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
-
-    /*
-     * Block waiting for the process to end.
-     */
-
-    WaitForSingleObject(pi.hProcess, INFINITE);
-    CloseHandle(pi.hProcess);
-
-    /*
-     * Wait for our pipe to get done reading, should it be a little slow.
-     */
-
-    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
-    CloseHandle(pipeThreads[0]);
-    CloseHandle(pipeThreads[1]);
-
-    /*
-     * Look for the commandline warning code in the stderr stream.
-     */
-
-    return !(strstr(Out.buffer, "LNK1117") != NULL ||
-           strstr(Err.buffer, "LNK1117") != NULL ||
-           strstr(Out.buffer, "LNK4044") != NULL ||
-           strstr(Err.buffer, "LNK4044") != NULL);
-}
-\f
-static DWORD WINAPI
-ReadFromPipe(
-    LPVOID args)
-{
-    pipeinfo *pi = (pipeinfo *) args;
-    char *lastBuf = pi->buffer;
-    DWORD dwRead;
-    BOOL ok;
-
-  again:
-    if (lastBuf - pi->buffer + CHUNK > STATICBUFFERSIZE) {
-       CloseHandle(pi->pipe);
-       return (DWORD)-1;
-    }
-    ok = ReadFile(pi->pipe, lastBuf, CHUNK, &dwRead, 0L);
-    if (!ok || dwRead == 0) {
-       CloseHandle(pi->pipe);
-       return 0;
-    }
-    lastBuf += dwRead;
-    goto again;
-
-    return 0;  /* makes the compiler happy */
-}
-\f
-static int
-IsIn(
-    const char *string,
-    const char *substring)
-{
-    return (strstr(string, substring) != NULL);
-}
-\f
-/*
- * GetVersionFromFile --
- *     Looks for a match string in a file and then returns the version
- *     following the match where a version is anything acceptable to
- *     package provide or package ifneeded.
- */
-
-static const char *
-GetVersionFromFile(
-    const char *filename,
-    const char *match,
-    int numdots)
-{
-    size_t cbBuffer = 100;
-    static char szBuffer[100];
-    char *szResult = NULL;
-    FILE *fp = fopen(filename, "rt");
-
-    if (fp != NULL) {
-       /*
-        * Read data until we see our match string.
-        */
-
-       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
-           LPSTR p, q;
-
-           p = strstr(szBuffer, match);
-           if (p != NULL) {
-               /*
-                * Skip to first digit after the match.
-                */
-
-               p += strlen(match);
-               while (*p && !isdigit(*p)) {
-                   ++p;
-               }
-
-               /*
-                * Find ending whitespace.
-                */
-
-               q = p;
-               while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q)
-                           && (!strchr("ab", q[-1])) || --numdots))) {
-                   ++q;
-               }
-
-               memcpy(szBuffer, p, q - p);
-               szBuffer[q-p] = 0;
-               szResult = szBuffer;
-               break;
-           }
-       }
-       fclose(fp);
-    }
-    return szResult;
-}
-\f
-/*
- * List helpers for the SubstituteFile function
- */
-
-typedef struct list_item_t {
-    struct list_item_t *nextPtr;
-    char * key;
-    char * value;
-} list_item_t;
-
-/* insert a list item into the list (list may be null) */
-static list_item_t *
-list_insert(list_item_t **listPtrPtr, const char *key, const char *value)
-{
-    list_item_t *itemPtr = malloc(sizeof(list_item_t));
-    if (itemPtr) {
-       itemPtr->key = strdup(key);
-       itemPtr->value = strdup(value);
-       itemPtr->nextPtr = NULL;
-
-       while(*listPtrPtr) {
-           listPtrPtr = &(*listPtrPtr)->nextPtr;
-       }
-       *listPtrPtr = itemPtr;
-    }
-    return itemPtr;
-}
-
-static void
-list_free(list_item_t **listPtrPtr)
-{
-    list_item_t *tmpPtr, *listPtr = *listPtrPtr;
-    while (listPtr) {
-       tmpPtr = listPtr;
-       listPtr = listPtr->nextPtr;
-       free(tmpPtr->key);
-       free(tmpPtr->value);
-       free(tmpPtr);
-    }
-}
-\f
-/*
- * SubstituteFile --
- *     As windows doesn't provide anything useful like sed and it's unreliable
- *     to use the tclsh you are building against (consider x-platform builds -
- *     eg compiling AMD64 target from IX86) we provide a simple substitution
- *     option here to handle autoconf style substitutions.
- *     The substitution file is whitespace and line delimited. The file should
- *     consist of lines matching the regular expression:
- *       \s*\S+\s+\S*$
- *
- *     Usage is something like:
- *       nmakehlp -S << $** > $@
- *        @PACKAGE_NAME@ $(PACKAGE_NAME)
- *        @PACKAGE_VERSION@ $(PACKAGE_VERSION)
- *        <<
- */
-
-static int
-SubstituteFile(
-    const char *substitutions,
-    const char *filename)
-{
-    size_t cbBuffer = 1024;
-    static char szBuffer[1024], szCopy[1024];
-    char *szResult = NULL;
-    list_item_t *substPtr = NULL;
-    FILE *fp, *sp;
-
-    fp = fopen(filename, "rt");
-    if (fp != NULL) {
-
-       /*
-        * Build a list of substutitions from the first filename
-        */
-
-       sp = fopen(substitutions, "rt");
-       if (sp != NULL) {
-           while (fgets(szBuffer, cbBuffer, sp) != NULL) {
-               char *ks, *ke, *vs, *ve;
-               ks = szBuffer;
-               while (ks && *ks && isspace(*ks)) ++ks;
-               ke = ks;
-               while (ke && *ke && !isspace(*ke)) ++ke;
-               vs = ke;
-               while (vs && *vs && isspace(*vs)) ++vs;
-               ve = vs;
-               while (ve && *ve && !(*ve == '\r' || *ve == '\n')) ++ve;
-               *ke = 0, *ve = 0;
-               list_insert(&substPtr, ks, vs);
-           }
-           fclose(sp);
-       }
-
-       /* debug: dump the list */
-#ifdef _DEBUG
-       {
-           int n = 0;
-           list_item_t *p = NULL;
-           for (p = substPtr; p != NULL; p = p->nextPtr, ++n) {
-               fprintf(stderr, "% 3d '%s' => '%s'\n", n, p->key, p->value);
-           }
-       }
-#endif
-
-       /*
-        * Run the substitutions over each line of the input
-        */
-
-       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
-           list_item_t *p = NULL;
-           for (p = substPtr; p != NULL; p = p->nextPtr) {
-               char *m = strstr(szBuffer, p->key);
-               if (m) {
-                   char *cp, *op, *sp;
-                   cp = szCopy;
-                   op = szBuffer;
-                   while (op != m) *cp++ = *op++;
-                   sp = p->value;
-                   while (sp && *sp) *cp++ = *sp++;
-                   op += strlen(p->key);
-                   while (*op) *cp++ = *op++;
-                   *cp = 0;
-                   memcpy(szBuffer, szCopy, sizeof(szCopy));
-               }
-           }
-           printf(szBuffer);
-       }
-
-       list_free(&substPtr);
-    }
-    fclose(fp);
-    return 0;
-}
-\f
-/*
- * QualifyPath --
- *
- *     This composes the current working directory with a provided path
- *     and returns the fully qualified and normalized path.
- *     Mostly needed to setup paths for testing.
- */
-
-static int
-QualifyPath(
-    const char *szPath)
-{
-    char szCwd[MAX_PATH + 1];
-    char szTmp[MAX_PATH + 1];
-    char *p;
-    GetCurrentDirectory(MAX_PATH, szCwd);
-    while ((p = strchr(szPath, '/')) && *p)
-       *p = '\\';
-    PathCombine(szTmp, szCwd, szPath);
-    PathCanonicalize(szCwd, szTmp);
-    printf("%s\n", szCwd);
-    return 0;
-}
-
-/*
- * Local variables:
- *   mode: c
- *   c-basic-offset: 4
- *   fill-column: 78
- *   indent-tabs-mode: t
- *   tab-width: 8
- * End:
- */
diff --git a/pkgs/tdbcpostgres1.0.5/win/rules.vc b/pkgs/tdbcpostgres1.0.5/win/rules.vc
deleted file mode 100644 (file)
index 60ed158..0000000
+++ /dev/null
@@ -1,691 +0,0 @@
-#------------------------------------------------------------------------------\r
-# rules.vc --\r
-#\r
-#      Microsoft Visual C++ makefile include for decoding the commandline\r
-#      macros.  This file does not need editing to build Tcl.\r
-#\r
-#      This version is modified from the Tcl source version to support\r
-#      building extensions using nmake.\r
-#\r
-# See the file "license.terms" for information on usage and redistribution\r
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
-#\r
-# Copyright (c) 2001-2003 David Gravereaux.\r
-# Copyright (c) 2003-2008 Patrick Thoyts\r
-#------------------------------------------------------------------------------\r
-\r
-!ifndef _RULES_VC\r
-_RULES_VC = 1\r
-\r
-cc32           = $(CC)   # built-in default.\r
-link32         = link\r
-lib32          = lib\r
-rc32           = $(RC)   # built-in default.\r
-\r
-!ifndef INSTALLDIR\r
-### Assume the normal default.\r
-_INSTALLDIR    = C:\Program Files\Tcl\r
-!else\r
-### Fix the path separators.\r
-_INSTALLDIR    = $(INSTALLDIR:/=\)\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Set the proper copy method to avoid overwrite questions\r
-# to the user when copying files and selecting the right\r
-# "delete all" method.\r
-#----------------------------------------------------------\r
-\r
-!if "$(OS)" == "Windows_NT"\r
-RMDIR  = rmdir /S /Q\r
-ERRNULL  = 2>NUL\r
-!if ![ver | find "4.0" > nul]\r
-CPY    = echo y | xcopy /i >NUL\r
-COPY   = copy >NUL\r
-!else\r
-CPY    = xcopy /i /y >NUL\r
-COPY   = copy /y >NUL\r
-!endif\r
-!else # "$(OS)" != "Windows_NT"\r
-CPY    = xcopy /i >_JUNK.OUT # On Win98 NUL does not work here.\r
-COPY   = copy >_JUNK.OUT # On Win98 NUL does not work here.\r
-RMDIR  = deltree /Y\r
-NULL    = \NUL # Used in testing directory existence\r
-ERRNULL = >NUL # Win9x shell cannot redirect stderr\r
-!endif\r
-MKDIR   = mkdir\r
-\r
-#------------------------------------------------------------------------------\r
-# Determine the host and target architectures and compiler version.\r
-#------------------------------------------------------------------------------\r
-\r
-_HASH=^#\r
-_VC_MANIFEST_EMBED_EXE=\r
-_VC_MANIFEST_EMBED_DLL=\r
-VCVER=0\r
-!if ![echo VCVERSION=_MSC_VER > vercl.x] \\r
-    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \\r
-    && ![echo ARCH=IX86 >> vercl.x] \\r
-    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \\r
-    && ![echo ARCH=AMD64 >> vercl.x] \\r
-    && ![echo $(_HASH)endif >> vercl.x] \\r
-    && ![cl -nologo -TC -P vercl.x $(ERRNULL)]\r
-!include vercl.i\r
-!if ![echo VCVER= ^\> vercl.vc] \\r
-    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]\r
-!include vercl.vc\r
-!endif\r
-!endif\r
-!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]\r
-!endif\r
-\r
-!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]\r
-NATIVE_ARCH=IX86\r
-!else\r
-NATIVE_ARCH=AMD64\r
-!endif\r
-\r
-# Since MSVC8 we must deal with manifest resources.\r
-!if $(VCVERSION) >= 1400\r
-_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1\r
-_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2\r
-!endif\r
-\r
-!ifndef MACHINE\r
-MACHINE=$(ARCH)\r
-!endif\r
-\r
-!ifndef CFG_ENCODING\r
-CFG_ENCODING   = \"cp1252\"\r
-!endif\r
-\r
-!message ===============================================================================\r
-\r
-#----------------------------------------------------------\r
-# build the helper app we need to overcome nmake's limiting\r
-# environment.\r
-#----------------------------------------------------------\r
-\r
-!if !exist(nmakehlp.exe)\r
-!if [$(cc32) -nologo nmakehlp.c -link -subsystem:console > nul]\r
-!endif\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Test for compiler features\r
-#----------------------------------------------------------\r
-\r
-### test for optimizations\r
-!if [nmakehlp -c -Ot]\r
-!message *** Compiler has 'Optimizations'\r
-OPTIMIZING     = 1\r
-!else\r
-!message *** Compiler does not have 'Optimizations'\r
-OPTIMIZING     = 0\r
-!endif\r
-\r
-OPTIMIZATIONS   =\r
-\r
-!if [nmakehlp -c -Ot]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Ot\r
-!endif\r
-\r
-!if [nmakehlp -c -Oi]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Oi\r
-!endif\r
-\r
-!if [nmakehlp -c -Op]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Op\r
-!endif\r
-\r
-!if [nmakehlp -c -fp:strict]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -fp:strict\r
-!endif\r
-\r
-!if [nmakehlp -c -Gs]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Gs\r
-!endif\r
-\r
-!if [nmakehlp -c -GS]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS\r
-!endif\r
-\r
-!if [nmakehlp -c -GL]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL\r
-!endif\r
-\r
-DEBUGFLAGS     =\r
-\r
-!if [nmakehlp -c -RTC1]\r
-DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1\r
-!elseif [nmakehlp -c -GZ]\r
-DEBUGFLAGS     = $(DEBUGFLAGS) -GZ\r
-!endif\r
-\r
-COMPILERFLAGS  =-W3\r
-\r
-# In v13 -GL and -YX are incompatible.\r
-!if [nmakehlp -c -YX]\r
-!if ![nmakehlp -c -GL]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for pentium errata\r
-!if [nmakehlp -c -QI0f]\r
-!message *** Compiler has 'Pentium 0x0f fix'\r
-COMPILERFLAGS  = $(COMPILERFLAGS) -QI0f\r
-!else\r
-!message *** Compiler does not have 'Pentium 0x0f fix'\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IA64"\r
-### test for Itanium errata\r
-!if [nmakehlp -c -QIA64_Bx]\r
-!message *** Compiler has 'B-stepping errata workarounds'\r
-COMPILERFLAGS   = $(COMPILERFLAGS) -QIA64_Bx\r
-!else\r
-!message *** Compiler does not have 'B-stepping errata workarounds'\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for -align:4096, when align:512 will do.\r
-!if [nmakehlp -l -opt:nowin98]\r
-!message *** Linker has 'Win98 alignment problem'\r
-ALIGN98_HACK   = 1\r
-!else\r
-!message *** Linker does not have 'Win98 alignment problem'\r
-ALIGN98_HACK   = 0\r
-!endif\r
-!else\r
-ALIGN98_HACK   = 0\r
-!endif\r
-\r
-LINKERFLAGS     =\r
-\r
-!if [nmakehlp -l -ltcg]\r
-LINKERFLAGS     =-ltcg\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Decode the options requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]\r
-STATIC_BUILD   = 0\r
-TCL_THREADS    = 1\r
-DEBUG          = 0\r
-SYMBOLS                = 0\r
-PROFILE                = 0\r
-PGO            = 0\r
-MSVCRT         = 0\r
-LOIMPACT       = 0\r
-UNCHECKED       = 0\r
-!else\r
-!if [nmakehlp -f $(OPTS) "static"]\r
-!message *** Doing static\r
-STATIC_BUILD   = 1\r
-!else\r
-STATIC_BUILD   = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "msvcrt"]\r
-!message *** Doing msvcrt\r
-MSVCRT         = 1\r
-!else\r
-MSVCRT         = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "nothreads"]\r
-!message *** Compile explicitly for non-threaded tcl\r
-TCL_THREADS    = 0\r
-!else\r
-TCL_THREADS     = 1\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "symbols"]\r
-!message *** Doing symbols\r
-DEBUG          = 1\r
-!else\r
-DEBUG          = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "pdbs"]\r
-!message *** Doing pdbs\r
-SYMBOLS                = 1\r
-!else\r
-SYMBOLS                = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "profile"]\r
-!message *** Doing profile\r
-PROFILE                = 1\r
-!else\r
-PROFILE                = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "pgi"]\r
-!message *** Doing profile guided optimization instrumentation\r
-PGO            = 1\r
-!elseif [nmakehlp -f $(OPTS) "pgo"]\r
-!message *** Doing profile guided optimization\r
-PGO            = 2\r
-!else\r
-PGO            = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "loimpact"]\r
-!message *** Doing loimpact\r
-LOIMPACT       = 1\r
-!else\r
-LOIMPACT       = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "unchecked"]\r
-!message *** Doing unchecked\r
-UNCHECKED = 1\r
-!else\r
-UNCHECKED = 0\r
-!endif\r
-!endif\r
-\r
-\r
-!if !$(STATIC_BUILD)\r
-# Make sure we don't build overly fat DLLs.\r
-MSVCRT         = 1\r
-# We shouldn't statically put the extensions inside the shell when dynamic.\r
-TCL_USE_STATIC_PACKAGES = 0\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Figure-out how to name our intermediate and output directories.\r
-# We wouldn't want different builds to use the same .obj files\r
-# by accident.\r
-#----------------------------------------------------------\r
-\r
-#----------------------------------------\r
-# Naming convention:\r
-#   t = full thread support.\r
-#   s = static library (as opposed to an\r
-#      import library)\r
-#   g = linked to the debug enabled C\r
-#      run-time.\r
-#   x = special static build when it\r
-#      links to the dynamic C run-time.\r
-#----------------------------------------\r
-SUFX       = sgx\r
-\r
-!if $(DEBUG)\r
-BUILDDIRTOP = Debug\r
-!else\r
-BUILDDIRTOP = Release\r
-!endif\r
-\r
-!if "$(MACHINE)" != "IX86"\r
-BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)\r
-!endif\r
-!if $(VCVER) > 6\r
-BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)\r
-!endif\r
-\r
-!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)\r
-SUFX       = $(SUFX:g=)\r
-!endif\r
-\r
-TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX\r
-\r
-!if !$(STATIC_BUILD)\r
-TMP_DIRFULL = $(TMP_DIRFULL:Static=)\r
-SUFX       = $(SUFX:s=)\r
-EXT        = dll\r
-!if $(MSVCRT)\r
-TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
-SUFX       = $(SUFX:x=)\r
-!endif\r
-!else\r
-TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)\r
-EXT        = lib\r
-!if !$(MSVCRT)\r
-TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
-SUFX       = $(SUFX:x=)\r
-!endif\r
-!endif\r
-\r
-!if !$(TCL_THREADS)\r
-TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)\r
-SUFX       = $(SUFX:t=)\r
-!endif\r
-\r
-!ifndef TMP_DIR\r
-TMP_DIR            = $(TMP_DIRFULL)\r
-!ifndef OUT_DIR\r
-OUT_DIR            = .\$(BUILDDIRTOP)\r
-!endif\r
-!else\r
-!ifndef OUT_DIR\r
-OUT_DIR            = $(TMP_DIR)\r
-!endif\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Decode the statistics requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"]\r
-TCL_MEM_DEBUG      = 0\r
-TCL_COMPILE_DEBUG   = 0\r
-!else\r
-!if [nmakehlp -f $(STATS) "memdbg"]\r
-!message *** Doing memdbg\r
-TCL_MEM_DEBUG      = 1\r
-!else\r
-TCL_MEM_DEBUG      = 0\r
-!endif\r
-!if [nmakehlp -f $(STATS) "compdbg"]\r
-!message *** Doing compdbg\r
-TCL_COMPILE_DEBUG   = 1\r
-!else\r
-TCL_COMPILE_DEBUG   = 0\r
-!endif\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Decode the checks requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(CHECKS)" == "" || [nmakehlp -f "$(CHECKS)" "none"]\r
-TCL_NO_DEPRECATED          = 0\r
-WARNINGS                   = -W3\r
-!else\r
-!if [nmakehlp -f $(CHECKS) "nodep"]\r
-!message *** Doing nodep check\r
-TCL_NO_DEPRECATED          = 1\r
-!else\r
-TCL_NO_DEPRECATED          = 0\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "fullwarn"]\r
-!message *** Doing full warnings check\r
-WARNINGS                   = -W4\r
-!if [nmakehlp -l -warn:3]\r
-LINKERFLAGS                = $(LINKERFLAGS) -warn:3\r
-!endif\r
-!else\r
-WARNINGS                   = -W3\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]\r
-!message *** Doing 64bit portability warnings\r
-WARNINGS                   = $(WARNINGS) -Wp64\r
-!endif\r
-!endif\r
-\r
-!if $(PGO) > 1\r
-!if [nmakehlp -l -ltcg:pgoptimize]\r
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize\r
-!else\r
-MSG=^\r
-This compiler does not support profile guided optimization.\r
-!error $(MSG)\r
-!endif\r
-!elseif $(PGO) > 0\r
-!if [nmakehlp -l -ltcg:pginstrument]\r
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument\r
-!else\r
-MSG=^\r
-This compiler does not support profile guided optimization.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Set our defines now armed with our options.\r
-#----------------------------------------------------------\r
-\r
-OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS\r
-\r
-!if $(TCL_MEM_DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG\r
-!endif\r
-!if $(TCL_COMPILE_DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS\r
-!endif\r
-!if $(TCL_THREADS)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1\r
-!endif\r
-!if $(STATIC_BUILD)\r
-OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD\r
-!endif\r
-!if $(TCL_NO_DEPRECATED)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED\r
-!endif\r
-\r
-!if !$(DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DNDEBUG\r
-!if $(OPTIMIZING)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED\r
-!endif\r
-!endif\r
-!if $(PROFILE)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED\r
-!endif\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Get common info used when building extensions.\r
-#----------------------------------------------------------\r
-\r
-!if "$(PROJECT)" != "tcl"\r
-\r
-# If INSTALLDIR set to tcl root dir then reset to the lib dir.\r
-!if exist("$(_INSTALLDIR)\include\tcl.h")\r
-_INSTALLDIR=$(_INSTALLDIR)\lib\r
-!endif\r
-\r
-!if !defined(TCLDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCLDIR                = $(_INSTALLDIR)\..\r
-_TCL_H          = $(_INSTALLDIR)\..\include\tcl.h\r
-TCLDIR          = $(_INSTALLDIR)\..\r
-!else\r
-MSG=^\r
-Failed to find tcl.h.  Set the TCLDIR macro.\r
-!error $(MSG)\r
-!endif\r
-!else\r
-_TCLDIR        = $(TCLDIR:/=\)\r
-!if exist("$(_TCLDIR)\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCL_H          = $(_TCLDIR)\include\tcl.h\r
-!elseif exist("$(_TCLDIR)\generic\tcl.h")\r
-TCLINSTALL     = 0\r
-_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
-!else\r
-MSG =^\r
-Failed to find tcl.h.  The TCLDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-!endif\r
-\r
-#--------------------------------------------------------------\r
-# Extract various version numbers from tcl headers\r
-# The generated file is then included in the makefile.\r
-#--------------------------------------------------------------\r
-\r
-!if [echo REM = This file is generated from rules.vc > versions.vc]\r
-!endif\r
-!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TCL_MINOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]\r
-!endif\r
-\r
-# If building the tcl core then we need additional package versions\r
-!if "$(PROJECT)" == "tcl"\r
-!if [echo PKG_HTTP_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\http\pkgIndex.tcl http >> versions.vc]\r
-!endif\r
-!if [echo PKG_TCLTEST_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\tcltest\pkgIndex.tcl tcltest >> versions.vc]\r
-!endif\r
-!if [echo PKG_MSGCAT_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\msgcat\pkgIndex.tcl msgcat >> versions.vc]\r
-!endif\r
-!if [echo PKG_PLATFORM_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform " >> versions.vc]\r
-!endif\r
-!if [echo PKG_SHELL_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform::shell" >> versions.vc]\r
-!endif\r
-!endif\r
-\r
-!include versions.vc\r
-\r
-#--------------------------------------------------------------\r
-# Setup tcl version dependent stuff headers\r
-#--------------------------------------------------------------\r
-\r
-!if "$(PROJECT)" != "tcl"\r
-\r
-TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)\r
-\r
-!if $(TCL_VERSION) < 81\r
-TCL_DOES_STUBS = 0\r
-!else\r
-TCL_DOES_STUBS = 1\r
-!endif\r
-\r
-!if $(TCLINSTALL)\r
-_TCLBINDIR      = "$(_TCLDIR)\bin"\r
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH           = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\lib\r
-COFFBASE       = \must\have\tcl\sources\to\build\this\target\r
-TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target\r
-TCL_INCLUDES    = -I"$(_TCLDIR)\include"\r
-!else\r
-_TCLBINDIR      = $(_TCLDIR)\win\$(BUILDDIRTOP)\r
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\library\r
-COFFBASE       = "$(_TCLDIR)\win\coffbase.txt"\r
-TCLTOOLSDIR    = $(_TCLDIR)\tools\r
-TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"\r
-!endif\r
-\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Optionally check for Tk info for building extensions.\r
-#----------------------------------------------------------\r
-\r
-!ifdef PROJECT_REQUIRES_TK\r
-!if !defined(TKDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_INSTALLDIR)\..\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
-!elseif exist("$(_TCLDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_TCLDIR)\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
-!endif\r
-!else\r
-_TKDIR = $(TKDIR:/=\)\r
-!if exist("$(_TKDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-!elseif exist("$(_TKDIR)\generic\tk.h")\r
-TKINSTALL      = 0\r
-_TK_H          = $(_TKDIR)\generic\tk.h\r
-!else\r
-MSG =^\r
-Failed to find tk.h. The TKDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-!endif\r
-\r
-#-------------------------------------------------------------------------\r
-# Extract Tk version numbers\r
-#-------------------------------------------------------------------------\r
-\r
-!if defined(PROJECT_REQUIRES_TK) || "$(PROJECT)" == "tk"\r
-!if [echo TK_MAJOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TK_MINOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TK_PATCH_LEVEL = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]\r
-!endif\r
-\r
-!include versions.vc\r
-\r
-TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)\r
-TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)\r
-\r
-!if "$(PROJECT)" != "tk"\r
-!if $(TKINSTALL)\r
-_TKBINDIR       = $(_TKDIR)\bin\r
-WISH           = "$(_TKBINDIR)\wish$(TK_VERSION)$(SUFX).exe"\r
-!if !exist($(WISH)) && $(TCL_THREADS)\r
-WISH           = "$(_TKBINDIR)\wish$(TK_VERSION)t$(SUFX).exe"\r
-!endif\r
-TKSTUBLIB      = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"\r
-TK_LIBRARY     = $(_TKDIR)\lib\r
-TKIMPLIB       = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"\r
-TK_INCLUDES     = -I"$(_TKDIR)\include"\r
-!else\r
-_TKBINDIR       = $(_TKDIR)\win\$(BUILDDIRTOP)\r
-WISH           = "$(_TKBINDIR)\wish$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(WISH)) && $(TCL_THREADS)\r
-WISH           = "$(_TKBINDIR)\wish$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TKSTUBLIB      = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"\r
-TKIMPLIB       = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"\r
-TK_LIBRARY     = $(_TKDIR)\library\r
-TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"\r
-!endif\r
-!endif\r
-\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Setup the fully qualified OUT_DIR path as OUT_DIR_PATH\r
-#----------------------------------------------------------\r
-!if [echo OUT_DIR_PATH = \>> versions.vc] \\r
-    && [nmakehlp -Q "$(OUT_DIR)" >> versions.vc]\r
-!endif\r
-!include versions.vc\r
-\r
-#----------------------------------------------------------\r
-# Display stats being used.\r
-#----------------------------------------------------------\r
-\r
-!message *** Intermediate directory will be '$(TMP_DIR)'\r
-!message *** Output directory will be '$(OUT_DIR)'\r
-!message *** Suffix for binaries will be '$(SUFX)'\r
-!message *** Optional defines are '$(OPTDEFINES)'\r
-!message *** Compiler version $(VCVER). Target machine is $(MACHINE)\r
-!message *** Host architecture is $(NATIVE_ARCH)\r
-!message *** Compiler options '$(COMPILERFLAGS) $(OPTIMIZATIONS) $(DEBUGFLAGS) $(WARNINGS)'\r
-!message *** Link options '$(LINKERFLAGS)'\r
-\r
-!endif\r
similarity index 99%
rename from pkgs/tdbcpostgres1.0.5/Makefile.in
rename to pkgs/tdbcpostgres1.0.6/Makefile.in
index 3280cbe..61f2110 100644 (file)
@@ -156,7 +156,7 @@ PKG_CFLAGS  = @PKG_CFLAGS@
 DEFS           = @DEFS@ $(PKG_CFLAGS)
 
 # Move pkgIndex.tcl to 'BINARIES' var if it is generated in the Makefile
-CONFIGURE_OUTPUTS = @CONFIGURE_OUTPUTS@
+CONFIG_CLEAN_FILES = Makefile pkgIndex.tcl
 CLEANFILES     = @CLEANFILES@
 
 CPPFLAGS       = @CPPFLAGS@
@@ -335,6 +335,7 @@ dist: dist-clean
 
        $(INSTALL_DATA_DIR) $(DIST_DIR)/win
        $(DIST_INSTALL_DATA) $(srcdir)/win/makefile.vc $(srcdir)/win/nmakehlp.c \
+               $(srcdir)/win/targets.vc $(srcdir)/win/rules-ext.vc \
                $(srcdir)/win/rules.vc $(DIST_DIR)/win/
 
        (cd $(DIST_ROOT); $(COMPRESS);)
@@ -369,7 +370,7 @@ clean:
 
 distclean: clean
        -rm -f *.tab.c
-       -rm -f $(CONFIGURE_OUTPUTS)
+       -rm -f $(CONFIG_CLEAN_FILES)
        -rm -f config.cache config.log config.status
 
 #========================================================================
similarity index 96%
rename from pkgs/tdbcpostgres1.0.5/README
rename to pkgs/tdbcpostgres1.0.6/README
index 99a624b..0cb97bd 100644 (file)
@@ -1,6 +1,6 @@
 README: tdbcpostgres
 
-    This is the 1.0.5 source distribution of the driver for Tcl
+    This is the 1.0.6 source distribution of the driver for Tcl
     Database Connectivity (TDBC) to access Postgres databases. TDBC and
     its drivers are available from a Fossil version control repository
     at http://tdbc.tcl.tk/
similarity index 99%
rename from pkgs/tdbcpostgres1.0.5/configure
rename to pkgs/tdbcpostgres1.0.6/configure
index 769183b..4627c88 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for tdbcpostgres 1.0.5.
+# Generated by GNU Autoconf 2.69 for tdbcpostgres 1.0.6.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='tdbcpostgres'
 PACKAGE_TARNAME='tdbcpostgres'
-PACKAGE_VERSION='1.0.5'
-PACKAGE_STRING='tdbcpostgres 1.0.5'
+PACKAGE_VERSION='1.0.6'
+PACKAGE_STRING='tdbcpostgres 1.0.6'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -620,7 +620,6 @@ ac_includes_default="\
 
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
-CONFIGURE_OUTPUTS
 TCLSH_PROG
 VC_MANIFEST_EMBED_EXE
 VC_MANIFEST_EMBED_DLL
@@ -1309,7 +1308,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures tdbcpostgres 1.0.5 to adapt to many kinds of systems.
+\`configure' configures tdbcpostgres 1.0.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1370,7 +1369,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of tdbcpostgres 1.0.5:";;
+     short | recursive ) echo "Configuration of tdbcpostgres 1.0.6:";;
    esac
   cat <<\_ACEOF
 
@@ -1378,7 +1377,7 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-threads        build with threads
+  --enable-threads        build with threads (default: on)
   --enable-shared         build and link with shared libraries (default: on)
   --enable-stubs          build and link with stub libraries. Always true for
                           shared builds (default: on)
@@ -1473,7 +1472,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-tdbcpostgres configure 1.0.5
+tdbcpostgres configure 1.0.6
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2075,7 +2074,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by tdbcpostgres $as_me 1.0.5, which was
+It was created by tdbcpostgres $as_me 1.0.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -5684,16 +5683,6 @@ $as_echo "#define NO_ERRNO_H 1" >>confdefs.h
 fi
 
 
-    ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
-if test "x$ac_cv_header_float_h" = xyes; then :
-
-else
-
-$as_echo "#define NO_FLOAT_H 1" >>confdefs.h
-
-fi
-
-
     ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default"
 if test "x$ac_cv_header_values_h" = xyes; then :
 
@@ -7583,7 +7572,7 @@ fi
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5
 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; }
 if ${ac_cv_lib_network_inet_ntoa+:} false; then :
@@ -7810,7 +7799,7 @@ fi
            CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
 
            # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            if test $doRpath = yes; then :
 
@@ -7893,7 +7882,7 @@ fi
                SHLIB_CFLAGS="-fpic"
                ;;
            esac
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            if test $doRpath = yes; then :
 
@@ -7918,7 +7907,7 @@ fi
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            LDFLAGS="$LDFLAGS -export-dynamic"
            if test $doRpath = yes; then :
@@ -9534,9 +9523,6 @@ $as_echo "${TCLSH_PROG}" >&6; }
 # which require substituting th AC variables in.  Include these here.
 #--------------------------------------------------------------------
 
-CONFIGURE_OUTPUTS="Makefile pkgIndex.tcl config.cache config.log config.status"
-
-
 ac_config_files="$ac_config_files Makefile pkgIndex.tcl"
 
 cat >confcache <<\_ACEOF
@@ -10083,7 +10069,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by tdbcpostgres $as_me 1.0.5, which was
+This file was extended by tdbcpostgres $as_me 1.0.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -10136,7 +10122,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-tdbcpostgres config.status 1.0.5
+tdbcpostgres config.status 1.0.6
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
similarity index 98%
rename from pkgs/tdbcpostgres1.0.5/configure.ac
rename to pkgs/tdbcpostgres1.0.6/configure.ac
index 679840f..67430fa 100644 (file)
@@ -11,7 +11,7 @@ dnl   to configure the system for the local environment.
 # so you can encode the package version directly into the source files.
 #-----------------------------------------------------------------------
 
-AC_INIT([tdbcpostgres], [1.0.5])
+AC_INIT([tdbcpostgres], [1.0.6])
 
 #--------------------------------------------------------------------
 # Call TEA_INIT as the first TEA_ macro to set up initial vars.
@@ -220,7 +220,4 @@ TEA_PROG_TCLSH
 # which require substituting th AC variables in.  Include these here.
 #--------------------------------------------------------------------
 
-CONFIGURE_OUTPUTS="Makefile pkgIndex.tcl config.cache config.log config.status"
-AC_SUBST(CONFIGURE_OUTPUTS)
-
 AC_OUTPUT([Makefile pkgIndex.tcl])
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from pkgs/tdbc1.0.5/tclconfig/install-sh
rename to pkgs/tdbcpostgres1.0.6/tclconfig/install-sh
diff --git a/pkgs/tdbcpostgres1.0.6/tclconfig/tcl.m4 b/pkgs/tdbcpostgres1.0.6/tclconfig/tcl.m4
new file mode 100644 (file)
index 0000000..e8234a2
--- /dev/null
@@ -0,0 +1,4335 @@
+# tcl.m4 --
+#
+#      This file provides a set of autoconf macros to help TEA-enable
+#      a Tcl extension.
+#
+# Copyright (c) 1999-2000 Ajuba Solutions.
+# Copyright (c) 2002-2005 ActiveState Corporation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+AC_PREREQ(2.57)
+
+dnl TEA extensions pass us the version of TEA they think they
+dnl are compatible with (must be set in TEA_INIT below)
+dnl TEA_VERSION="3.10"
+
+# Possible values for key variables defined:
+#
+# TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem')
+# TEA_PLATFORM        - windows unix
+# TEA_TK_EXTENSION    - True if this is a Tk extension
+#
+
+#------------------------------------------------------------------------
+# TEA_PATH_TCLCONFIG --
+#
+#      Locate the tclConfig.sh file and perform a sanity check on
+#      the Tcl compile flags
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-tcl=...
+#
+#      Defines the following vars:
+#              TCL_BIN_DIR     Full path to the directory containing
+#                              the tclConfig.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_TCLCONFIG], [
+    dnl TEA specific: Make sure we are initialized
+    AC_REQUIRE([TEA_INIT])
+    #
+    # Ok, lets find the tcl configuration
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-tcl
+    #
+
+    if test x"${no_tcl}" = x ; then
+       # we reset no_tcl in case something fails here
+       no_tcl=true
+       AC_ARG_WITH(tcl,
+           AC_HELP_STRING([--with-tcl],
+               [directory containing tcl configuration (tclConfig.sh)]),
+           with_tclconfig="${withval}")
+       AC_MSG_CHECKING([for Tcl configuration])
+       AC_CACHE_VAL(ac_cv_c_tclconfig,[
+
+           # First check to see if --with-tcl was specified.
+           if test x"${with_tclconfig}" != x ; then
+               case "${with_tclconfig}" in
+                   */tclConfig.sh )
+                       if test -f "${with_tclconfig}"; then
+                           AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself])
+                           with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`"
+                       fi ;;
+               esac
+               if test -f "${with_tclconfig}/tclConfig.sh" ; then
+                   ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`"
+               else
+                   AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
+               fi
+           fi
+
+           # then check for a private Tcl installation
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in \
+                       ../tcl \
+                       `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../tcl \
+                       `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../../tcl \
+                       `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # on Darwin, check in Framework installation locations
+           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
+               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
+                       `ls -d /Library/Frameworks 2>/dev/null` \
+                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
+                       `ls -d /System/Library/Frameworks 2>/dev/null` \
+                       ; do
+                   if test -f "$i/Tcl.framework/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # TEA specific: on Windows, check in common installation locations
+           if test "${TEA_PLATFORM}" = "windows" \
+               -a x"${ac_cv_c_tclconfig}" = x ; then
+               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
+                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few common install locations
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in `ls -d ${libdir} 2>/dev/null` \
+                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
+                       `ls -d ${prefix}/lib 2>/dev/null` \
+                       `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/pkg/lib 2>/dev/null` \
+                       `ls -d /usr/lib 2>/dev/null` \
+                       `ls -d /usr/lib64 2>/dev/null` \
+                       `ls -d /usr/lib/tcl8.6 2>/dev/null` \
+                       `ls -d /usr/lib/tcl8.5 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few other private locations
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in \
+                       ${srcdir}/../tcl \
+                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+       ])
+
+       if test x"${ac_cv_c_tclconfig}" = x ; then
+           TCL_BIN_DIR="# no Tcl configs found"
+           AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh])
+       else
+           no_tcl=
+           TCL_BIN_DIR="${ac_cv_c_tclconfig}"
+           AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_PATH_TKCONFIG --
+#
+#      Locate the tkConfig.sh file
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-tk=...
+#
+#      Defines the following vars:
+#              TK_BIN_DIR      Full path to the directory containing
+#                              the tkConfig.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_TKCONFIG], [
+    #
+    # Ok, lets find the tk configuration
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-tk
+    #
+
+    if test x"${no_tk}" = x ; then
+       # we reset no_tk in case something fails here
+       no_tk=true
+       AC_ARG_WITH(tk,
+           AC_HELP_STRING([--with-tk],
+               [directory containing tk configuration (tkConfig.sh)]),
+           with_tkconfig="${withval}")
+       AC_MSG_CHECKING([for Tk configuration])
+       AC_CACHE_VAL(ac_cv_c_tkconfig,[
+
+           # First check to see if --with-tkconfig was specified.
+           if test x"${with_tkconfig}" != x ; then
+               case "${with_tkconfig}" in
+                   */tkConfig.sh )
+                       if test -f "${with_tkconfig}"; then
+                           AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself])
+                           with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`"
+                       fi ;;
+               esac
+               if test -f "${with_tkconfig}/tkConfig.sh" ; then
+                   ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`"
+               else
+                   AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
+               fi
+           fi
+
+           # then check for a private Tk library
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in \
+                       ../tk \
+                       `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../tk \
+                       `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../../tk \
+                       `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # on Darwin, check in Framework installation locations
+           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then
+               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
+                       `ls -d /Library/Frameworks 2>/dev/null` \
+                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
+                       `ls -d /System/Library/Frameworks 2>/dev/null` \
+                       ; do
+                   if test -f "$i/Tk.framework/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few common install locations
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in `ls -d ${libdir} 2>/dev/null` \
+                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
+                       `ls -d ${prefix}/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/lib 2>/dev/null` \
+                       `ls -d /usr/lib64 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # TEA specific: on Windows, check in common installation locations
+           if test "${TEA_PLATFORM}" = "windows" \
+               -a x"${ac_cv_c_tkconfig}" = x ; then
+               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
+                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few other private locations
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in \
+                       ${srcdir}/../tk \
+                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+       ])
+
+       if test x"${ac_cv_c_tkconfig}" = x ; then
+           TK_BIN_DIR="# no Tk configs found"
+           AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh])
+       else
+           no_tk=
+           TK_BIN_DIR="${ac_cv_c_tkconfig}"
+           AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_TCLCONFIG --
+#
+#      Load the tclConfig.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              TCL_BIN_DIR
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TCL_BIN_DIR
+#              TCL_SRC_DIR
+#              TCL_LIB_FILE
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LOAD_TCLCONFIG], [
+    AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh])
+
+    if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
+        AC_MSG_RESULT([loading])
+       . "${TCL_BIN_DIR}/tclConfig.sh"
+    else
+        AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh])
+    fi
+
+    # eval is required to do the TCL_DBGX substitution
+    eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
+    eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
+
+    # If the TCL_BIN_DIR is the build directory (not the install directory),
+    # then set the common variable name to the value of the build variables.
+    # For example, the variable TCL_LIB_SPEC will be set to the value
+    # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
+    # instead of TCL_BUILD_LIB_SPEC since it will work with both an
+    # installed and uninstalled version of Tcl.
+    if test -f "${TCL_BIN_DIR}/Makefile" ; then
+        TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}"
+        TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}"
+        TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}"
+    elif test "`uname -s`" = "Darwin"; then
+       # If Tcl was built as a framework, attempt to use the libraries
+       # from the framework at the given location so that linking works
+       # against Tcl.framework installed in an arbitrary location.
+       case ${TCL_DEFS} in
+           *TCL_FRAMEWORK*)
+               if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
+                   for i in "`cd "${TCL_BIN_DIR}"; pwd`" \
+                            "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do
+                       if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then
+                           TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}"
+                           break
+                       fi
+                   done
+               fi
+               if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then
+                   TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}"
+                   TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"
+               fi
+               ;;
+       esac
+    fi
+
+    # eval is required to do the TCL_DBGX substitution
+    eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
+    eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
+    eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
+    eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
+
+    AC_SUBST(TCL_VERSION)
+    AC_SUBST(TCL_PATCH_LEVEL)
+    AC_SUBST(TCL_BIN_DIR)
+    AC_SUBST(TCL_SRC_DIR)
+
+    AC_SUBST(TCL_LIB_FILE)
+    AC_SUBST(TCL_LIB_FLAG)
+    AC_SUBST(TCL_LIB_SPEC)
+
+    AC_SUBST(TCL_STUB_LIB_FILE)
+    AC_SUBST(TCL_STUB_LIB_FLAG)
+    AC_SUBST(TCL_STUB_LIB_SPEC)
+
+    AC_MSG_CHECKING([platform])
+    hold_cc=$CC; CC="$TCL_CC"
+    AC_TRY_COMPILE(,[
+           #ifdef _WIN32
+               #error win32
+           #endif
+       ], [
+           TEA_PLATFORM="unix"
+           CYGPATH=echo
+       ], [
+           TEA_PLATFORM="windows"
+           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)   ]
+    )
+    CC=$hold_cc
+    AC_MSG_RESULT($TEA_PLATFORM)
+
+    # The BUILD_$pkg is to define the correct extern storage class
+    # handling when making this package
+    AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [],
+           [Building extension source?])
+    # Do this here as we have fully defined TEA_PLATFORM now
+    if test "${TEA_PLATFORM}" = "windows" ; then
+       EXEEXT=".exe"
+       CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp"
+    fi
+
+    # TEA specific:
+    AC_SUBST(CLEANFILES)
+    AC_SUBST(TCL_LIBS)
+    AC_SUBST(TCL_DEFS)
+    AC_SUBST(TCL_EXTRA_CFLAGS)
+    AC_SUBST(TCL_LD_FLAGS)
+    AC_SUBST(TCL_SHLIB_LD_LIBS)
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_TKCONFIG --
+#
+#      Load the tkConfig.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              TK_BIN_DIR
+#
+# Results:
+#
+#      Sets the following vars that should be in tkConfig.sh:
+#              TK_BIN_DIR
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LOAD_TKCONFIG], [
+    AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh])
+
+    if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then
+        AC_MSG_RESULT([loading])
+       . "${TK_BIN_DIR}/tkConfig.sh"
+    else
+        AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh])
+    fi
+
+    # eval is required to do the TK_DBGX substitution
+    eval "TK_LIB_FILE=\"${TK_LIB_FILE}\""
+    eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\""
+
+    # If the TK_BIN_DIR is the build directory (not the install directory),
+    # then set the common variable name to the value of the build variables.
+    # For example, the variable TK_LIB_SPEC will be set to the value
+    # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC
+    # instead of TK_BUILD_LIB_SPEC since it will work with both an
+    # installed and uninstalled version of Tcl.
+    if test -f "${TK_BIN_DIR}/Makefile" ; then
+        TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}"
+        TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}"
+        TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}"
+    elif test "`uname -s`" = "Darwin"; then
+       # If Tk was built as a framework, attempt to use the libraries
+       # from the framework at the given location so that linking works
+       # against Tk.framework installed in an arbitrary location.
+       case ${TK_DEFS} in
+           *TK_FRAMEWORK*)
+               if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then
+                   for i in "`cd "${TK_BIN_DIR}"; pwd`" \
+                            "`cd "${TK_BIN_DIR}"/../..; pwd`"; do
+                       if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then
+                           TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}"
+                           break
+                       fi
+                   done
+               fi
+               if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then
+                   TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}"
+                   TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"
+               fi
+               ;;
+       esac
+    fi
+
+    # eval is required to do the TK_DBGX substitution
+    eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\""
+    eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\""
+    eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\""
+    eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\""
+
+    # TEA specific: Ensure windowingsystem is defined
+    if test "${TEA_PLATFORM}" = "unix" ; then
+       case ${TK_DEFS} in
+           *MAC_OSX_TK*)
+               AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?])
+               TEA_WINDOWINGSYSTEM="aqua"
+               ;;
+           *)
+               TEA_WINDOWINGSYSTEM="x11"
+               ;;
+       esac
+    elif test "${TEA_PLATFORM}" = "windows" ; then
+       TEA_WINDOWINGSYSTEM="win32"
+    fi
+
+    AC_SUBST(TK_VERSION)
+    AC_SUBST(TK_BIN_DIR)
+    AC_SUBST(TK_SRC_DIR)
+
+    AC_SUBST(TK_LIB_FILE)
+    AC_SUBST(TK_LIB_FLAG)
+    AC_SUBST(TK_LIB_SPEC)
+
+    AC_SUBST(TK_STUB_LIB_FILE)
+    AC_SUBST(TK_STUB_LIB_FLAG)
+    AC_SUBST(TK_STUB_LIB_SPEC)
+
+    # TEA specific:
+    AC_SUBST(TK_LIBS)
+    AC_SUBST(TK_XINCLUDES)
+])
+
+#------------------------------------------------------------------------
+# TEA_PROG_TCLSH
+#      Determine the fully qualified path name of the tclsh executable
+#      in the Tcl build directory or the tclsh installed in a bin
+#      directory. This macro will correctly determine the name
+#      of the tclsh executable even if tclsh has not yet been
+#      built in the build directory. The tclsh found is always
+#      associated with a tclConfig.sh file. This tclsh should be used
+#      only for running extension test cases. It should never be
+#      or generation of files (like pkgIndex.tcl) at build time.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              TCLSH_PROG
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PROG_TCLSH], [
+    AC_MSG_CHECKING([for tclsh])
+    if test -f "${TCL_BIN_DIR}/Makefile" ; then
+        # tclConfig.sh is in Tcl build directory
+        if test "${TEA_PLATFORM}" = "windows"; then
+          if test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
+          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}"
+          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}"
+          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}"
+          fi
+        else
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh"
+        fi
+    else
+        # tclConfig.sh is in install location
+        if test "${TEA_PLATFORM}" = "windows"; then
+            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
+        else
+            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}"
+        fi
+        list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \
+              `ls -d ${TCL_BIN_DIR}/..     2>/dev/null` \
+              `ls -d ${TCL_PREFIX}/bin     2>/dev/null`"
+        for i in $list ; do
+            if test -f "$i/${TCLSH_PROG}" ; then
+                REAL_TCL_BIN_DIR="`cd "$i"; pwd`/"
+                break
+            fi
+        done
+        TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}"
+    fi
+    AC_MSG_RESULT([${TCLSH_PROG}])
+    AC_SUBST(TCLSH_PROG)
+])
+
+#------------------------------------------------------------------------
+# TEA_PROG_WISH
+#      Determine the fully qualified path name of the wish executable
+#      in the Tk build directory or the wish installed in a bin
+#      directory. This macro will correctly determine the name
+#      of the wish executable even if wish has not yet been
+#      built in the build directory. The wish found is always
+#      associated with a tkConfig.sh file. This wish should be used
+#      only for running extension test cases. It should never be
+#      or generation of files (like pkgIndex.tcl) at build time.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              WISH_PROG
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PROG_WISH], [
+    AC_MSG_CHECKING([for wish])
+    if test -f "${TK_BIN_DIR}/Makefile" ; then
+        # tkConfig.sh is in Tk build directory
+        if test "${TEA_PLATFORM}" = "windows"; then
+          if test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
+          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}s${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}$s{EXEEXT}"
+          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}"
+          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}"
+          fi
+        else
+            WISH_PROG="${TK_BIN_DIR}/wish"
+        fi
+    else
+        # tkConfig.sh is in install location
+        if test "${TEA_PLATFORM}" = "windows"; then
+            WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
+        else
+            WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}"
+        fi
+        list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \
+              `ls -d ${TK_BIN_DIR}/..     2>/dev/null` \
+              `ls -d ${TK_PREFIX}/bin     2>/dev/null`"
+        for i in $list ; do
+            if test -f "$i/${WISH_PROG}" ; then
+                REAL_TK_BIN_DIR="`cd "$i"; pwd`/"
+                break
+            fi
+        done
+        WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}"
+    fi
+    AC_MSG_RESULT([${WISH_PROG}])
+    AC_SUBST(WISH_PROG)
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_SHARED --
+#
+#      Allows the building of shared libraries
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-shared=yes|no
+#              --enable-stubs=yes|no
+#
+#      Defines the following vars:
+#              STATIC_BUILD    Used for building import/export libraries
+#                              on Windows.
+#
+#      Sets the following vars:
+#              SHARED_BUILD    Value of 1 or 0
+#               STUBS_BUILD     Value if 1 or 0
+#               USE_TCL_STUBS   Value true: if SHARED_BUILD or --enable-stubs
+#               USE_TCLOO_STUBS Value true: if SHARED_BUILD or --enable-stubs
+#               USE_TK_STUBS    Value true: if SHARED_BUILD or --enable-stubs
+#                                AND TEA_WINDOWING_SYSTEM != ""
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ENABLE_SHARED], [
+    AC_MSG_CHECKING([how to build libraries])
+    AC_ARG_ENABLE(shared,
+       AC_HELP_STRING([--enable-shared],
+           [build and link with shared libraries (default: on)]),
+       [shared_ok=$enableval], [shared_ok=yes])
+
+    if test "${enable_shared+set}" = set; then
+       enableval="$enable_shared"
+       shared_ok=$enableval
+    else
+       shared_ok=yes
+    fi
+
+    AC_ARG_ENABLE(stubs,
+       AC_HELP_STRING([--enable-stubs],
+           [build and link with stub libraries. Always true for shared builds (default: on)]),
+       [stubs_ok=$enableval], [stubs_ok=yes])
+
+    if test "${enable_stubs+set}" = set; then
+       enableval="$enable_stubs"
+       stubs_ok=$enableval
+    else
+       stubs_ok=yes
+    fi
+
+    # Stubs are always enabled for shared builds
+    if test "$shared_ok" = "yes" ; then
+       AC_MSG_RESULT([shared])
+       SHARED_BUILD=1
+        STUBS_BUILD=1
+    else
+       AC_MSG_RESULT([static])
+       SHARED_BUILD=0
+       AC_DEFINE(STATIC_BUILD, 1, [This a static build])
+        if test "$stubs_ok" = "yes" ; then
+          STUBS_BUILD=1
+        else
+          STUBS_BUILD=0
+        fi
+    fi
+    if test "${STUBS_BUILD}" = "1" ; then
+      AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs])
+      AC_DEFINE(USE_TCLOO_STUBS, 1, [Use TclOO stubs])
+      if test "${TEA_WINDOWINGSYSTEM}" != ""; then
+        AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs])
+      fi
+    fi
+
+    AC_SUBST(SHARED_BUILD)
+    AC_SUBST(STUBS_BUILD)
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_THREADS --
+#
+#      Specify if thread support should be enabled.  If "yes" is specified
+#      as an arg (optional), threads are enabled by default, "no" means
+#      threads are disabled.  "yes" is the default.
+#
+#      TCL_THREADS is checked so that if you are compiling an extension
+#      against a threaded core, your extension must be compiled threaded
+#      as well.
+#
+#      Note that it is legal to have a thread enabled extension run in a
+#      threaded or non-threaded Tcl core, but a non-threaded extension may
+#      only run in a non-threaded Tcl core.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-threads
+#
+#      Sets the following vars:
+#              THREADS_LIBS    Thread library(s)
+#
+#      Defines the following vars:
+#              TCL_THREADS
+#              _REENTRANT
+#              _THREAD_SAFE
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_ENABLE_THREADS], [
+    AC_ARG_ENABLE(threads,
+       AC_HELP_STRING([--enable-threads],
+           [build with threads (default: on)]),
+       [tcl_ok=$enableval], [tcl_ok=yes])
+
+    if test "${enable_threads+set}" = set; then
+       enableval="$enable_threads"
+       tcl_ok=$enableval
+    else
+       tcl_ok=yes
+    fi
+
+    if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
+       TCL_THREADS=1
+
+       if test "${TEA_PLATFORM}" != "windows" ; then
+           # We are always OK on Windows, so check what this platform wants:
+
+           # USE_THREAD_ALLOC tells us to try the special thread-based
+           # allocator that significantly reduces lock contention
+           AC_DEFINE(USE_THREAD_ALLOC, 1,
+               [Do we want to use the threaded memory allocator?])
+           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
+           if test "`uname -s`" = "SunOS" ; then
+               AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
+                       [Do we really want to follow the standard? Yes we do!])
+           fi
+           AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?])
+           AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
+           if test "$tcl_ok" = "no"; then
+               # Check a little harder for __pthread_mutex_init in the same
+               # library, as some systems hide it there until pthread.h is
+               # defined.  We could alternatively do an AC_TRY_COMPILE with
+               # pthread.h, but that will work with libpthread really doesn't
+               # exist, like AIX 4.2.  [Bug: 4359]
+               AC_CHECK_LIB(pthread, __pthread_mutex_init,
+                   tcl_ok=yes, tcl_ok=no)
+           fi
+
+           if test "$tcl_ok" = "yes"; then
+               # The space is needed
+               THREADS_LIBS=" -lpthread"
+           else
+               AC_CHECK_LIB(pthreads, pthread_mutex_init,
+                   tcl_ok=yes, tcl_ok=no)
+               if test "$tcl_ok" = "yes"; then
+                   # The space is needed
+                   THREADS_LIBS=" -lpthreads"
+               else
+                   AC_CHECK_LIB(c, pthread_mutex_init,
+                       tcl_ok=yes, tcl_ok=no)
+                   if test "$tcl_ok" = "no"; then
+                       AC_CHECK_LIB(c_r, pthread_mutex_init,
+                           tcl_ok=yes, tcl_ok=no)
+                       if test "$tcl_ok" = "yes"; then
+                           # The space is needed
+                           THREADS_LIBS=" -pthread"
+                       else
+                           TCL_THREADS=0
+                           AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled])
+                       fi
+                   fi
+               fi
+           fi
+       fi
+    else
+       TCL_THREADS=0
+    fi
+    # Do checking message here to not mess up interleaved configure output
+    AC_MSG_CHECKING([for building with threads])
+    if test "${TCL_THREADS}" = 1; then
+       AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?])
+       AC_MSG_RESULT([yes (default)])
+    else
+       AC_MSG_RESULT([no])
+    fi
+    # TCL_THREADS sanity checking.  See if our request for building with
+    # threads is the same as the way Tcl was built.  If not, warn the user.
+    case ${TCL_DEFS} in
+       *THREADS=1*)
+           if test "${TCL_THREADS}" = "0"; then
+               AC_MSG_WARN([
+    Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
+    that IS thread-enabled.  It is recommended to use --enable-threads.])
+           fi
+           ;;
+       *)
+           if test "${TCL_THREADS}" = "1"; then
+               AC_MSG_WARN([
+    --enable-threads requested, but building against a Tcl that is NOT
+    thread-enabled.  This is an OK configuration that will also run in
+    a thread-enabled core.])
+           fi
+           ;;
+    esac
+    AC_SUBST(TCL_THREADS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_SYMBOLS --
+#
+#      Specify if debugging symbols should be used.
+#      Memory (TCL_MEM_DEBUG) debugging can also be enabled.
+#
+# Arguments:
+#      none
+#
+#      TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives
+#      the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted.
+#      Requires the following vars to be set in the Makefile:
+#              CFLAGS_DEFAULT
+#              LDFLAGS_DEFAULT
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-symbols
+#
+#      Defines the following vars:
+#              CFLAGS_DEFAULT  Sets to $(CFLAGS_DEBUG) if true
+#                              Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false
+#              LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
+#                              Sets to $(LDFLAGS_OPTIMIZE) if false
+#              DBGX            Formerly used as debug library extension;
+#                              always blank now.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_ENABLE_SYMBOLS], [
+    dnl TEA specific: Make sure we are initialized
+    AC_REQUIRE([TEA_CONFIG_CFLAGS])
+    AC_MSG_CHECKING([for build with symbols])
+    AC_ARG_ENABLE(symbols,
+       AC_HELP_STRING([--enable-symbols],
+           [build with debugging symbols (default: off)]),
+       [tcl_ok=$enableval], [tcl_ok=no])
+    DBGX=""
+    if test "$tcl_ok" = "no"; then
+       CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG"
+       LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
+       AC_MSG_RESULT([no])
+    else
+       CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
+       LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
+       if test "$tcl_ok" = "yes"; then
+           AC_MSG_RESULT([yes (standard debugging)])
+       fi
+    fi
+    # TEA specific:
+    if test "${TEA_PLATFORM}" != "windows" ; then
+       LDFLAGS_DEFAULT="${LDFLAGS}"
+    fi
+    AC_SUBST(CFLAGS_DEFAULT)
+    AC_SUBST(LDFLAGS_DEFAULT)
+    AC_SUBST(TCL_DBGX)
+
+    if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
+       AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?])
+    fi
+
+    if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
+       if test "$tcl_ok" = "all"; then
+           AC_MSG_RESULT([enabled symbols mem debugging])
+       else
+           AC_MSG_RESULT([enabled $tcl_ok debugging])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_LANGINFO --
+#
+#      Allows use of modern nl_langinfo check for better l10n.
+#      This is only relevant for Unix.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-langinfo=yes|no (default is yes)
+#
+#      Defines the following vars:
+#              HAVE_LANGINFO   Triggers use of nl_langinfo if defined.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_ENABLE_LANGINFO], [
+    AC_ARG_ENABLE(langinfo,
+       AC_HELP_STRING([--enable-langinfo],
+           [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]),
+       [langinfo_ok=$enableval], [langinfo_ok=yes])
+
+    HAVE_LANGINFO=0
+    if test "$langinfo_ok" = "yes"; then
+       AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no])
+    fi
+    AC_MSG_CHECKING([whether to use nl_langinfo])
+    if test "$langinfo_ok" = "yes"; then
+       AC_CACHE_VAL(tcl_cv_langinfo_h, [
+           AC_TRY_COMPILE([#include <langinfo.h>], [nl_langinfo(CODESET);],
+                   [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])])
+       AC_MSG_RESULT([$tcl_cv_langinfo_h])
+       if test $tcl_cv_langinfo_h = yes; then
+           AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?])
+       fi
+    else
+       AC_MSG_RESULT([$langinfo_ok])
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_CONFIG_SYSTEM
+#
+#      Determine what the system is (some things cannot be easily checked
+#      on a feature-driven basis, alas). This can usually be done via the
+#      "uname" command.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Defines the following var:
+#
+#      system -        System/platform/version identification code.
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_CONFIG_SYSTEM], [
+    AC_CACHE_CHECK([system version], tcl_cv_sys_version, [
+       # TEA specific:
+       if test "${TEA_PLATFORM}" = "windows" ; then
+           tcl_cv_sys_version=windows
+       else
+           tcl_cv_sys_version=`uname -s`-`uname -r`
+           if test "$?" -ne 0 ; then
+               AC_MSG_WARN([can't find uname command])
+               tcl_cv_sys_version=unknown
+           else
+               if test "`uname -s`" = "AIX" ; then
+                   tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
+               fi
+           fi
+       fi
+    ])
+    system=$tcl_cv_sys_version
+])
+
+#--------------------------------------------------------------------
+# TEA_CONFIG_CFLAGS
+#
+#      Try to determine the proper flags to pass to the compiler
+#      for building shared libraries and other such nonsense.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines and substitutes the following vars:
+#
+#      DL_OBJS, DL_LIBS - removed for TEA, only needed by core.
+#       LDFLAGS -      Flags to pass to the compiler when linking object
+#                       files into an executable application binary such
+#                       as tclsh.
+#       LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
+#                       that tell the run-time dynamic linker where to look
+#                       for shared libraries such as libtcl.so.  Depends on
+#                       the variable LIB_RUNTIME_DIR in the Makefile. Could
+#                       be the same as CC_SEARCH_FLAGS if ${CC} is used to link.
+#       CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib",
+#                       that tell the run-time dynamic linker where to look
+#                       for shared libraries such as libtcl.so.  Depends on
+#                       the variable LIB_RUNTIME_DIR in the Makefile.
+#       SHLIB_CFLAGS -  Flags to pass to cc when compiling the components
+#                       of a shared library (may request position-independent
+#                       code, among other things).
+#       SHLIB_LD -      Base command to use for combining object files
+#                       into a shared library.
+#       SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
+#                       creating shared libraries.  This symbol typically
+#                       goes at the end of the "ld" commands that build
+#                       shared libraries. The value of the symbol defaults to
+#                       "${LIBS}" if all of the dependent libraries should
+#                       be specified when creating a shared library.  If
+#                       dependent libraries should not be specified (as on
+#                       SunOS 4.x, where they cause the link to fail, or in
+#                       general if Tcl and Tk aren't themselves shared
+#                       libraries), then this symbol has an empty string
+#                       as its value.
+#       SHLIB_SUFFIX -  Suffix to use for the names of dynamically loadable
+#                       extensions.  An empty string means we don't know how
+#                       to use shared libraries on this platform.
+#       LIB_SUFFIX -    Specifies everything that comes after the "libfoo"
+#                       in a static or shared library name, using the $PACKAGE_VERSION variable
+#                       to put the version in the right place.  This is used
+#                       by platforms that need non-standard library names.
+#                       Examples:  ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs
+#                       to have a version after the .so, and ${PACKAGE_VERSION}.a
+#                       on AIX, since a shared library needs to have
+#                       a .a extension whereas shared objects for loadable
+#                       extensions have a .so extension.  Defaults to
+#                       ${PACKAGE_VERSION}${SHLIB_SUFFIX}.
+#      CFLAGS_DEBUG -
+#                      Flags used when running the compiler in debug mode
+#      CFLAGS_OPTIMIZE -
+#                      Flags used when running the compiler in optimize mode
+#      CFLAGS -        Additional CFLAGS added as necessary (usually 64-bit)
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_CONFIG_CFLAGS], [
+    dnl TEA specific: Make sure we are initialized
+    AC_REQUIRE([TEA_INIT])
+
+    # Step 0.a: Enable 64 bit support?
+
+    AC_MSG_CHECKING([if 64bit support is requested])
+    AC_ARG_ENABLE(64bit,
+       AC_HELP_STRING([--enable-64bit],
+           [enable 64bit support (default: off)]),
+       [do64bit=$enableval], [do64bit=no])
+    AC_MSG_RESULT([$do64bit])
+
+    # Step 0.b: Enable Solaris 64 bit VIS support?
+
+    AC_MSG_CHECKING([if 64bit Sparc VIS support is requested])
+    AC_ARG_ENABLE(64bit-vis,
+       AC_HELP_STRING([--enable-64bit-vis],
+           [enable 64bit Sparc VIS support (default: off)]),
+       [do64bitVIS=$enableval], [do64bitVIS=no])
+    AC_MSG_RESULT([$do64bitVIS])
+    # Force 64bit on with VIS
+    AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes])
+
+    # Step 0.c: Check if visibility support is available. Do this here so
+    # that platform specific alternatives can be used below if this fails.
+
+    AC_CACHE_CHECK([if compiler supports visibility "hidden"],
+       tcl_cv_cc_visibility_hidden, [
+       hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror"
+       AC_TRY_LINK([
+           extern __attribute__((__visibility__("hidden"))) void f(void);
+           void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes,
+           tcl_cv_cc_visibility_hidden=no)
+       CFLAGS=$hold_cflags])
+    AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [
+       AC_DEFINE(MODULE_SCOPE,
+           [extern __attribute__((__visibility__("hidden")))],
+           [Compiler support for module scope symbols])
+       AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols])
+    ])
+
+    # Step 0.d: Disable -rpath support?
+
+    AC_MSG_CHECKING([if rpath support is requested])
+    AC_ARG_ENABLE(rpath,
+       AC_HELP_STRING([--disable-rpath],
+           [disable rpath support (default: on)]),
+       [doRpath=$enableval], [doRpath=yes])
+    AC_MSG_RESULT([$doRpath])
+
+    # TEA specific: Cross-compiling options for Windows/CE builds?
+
+    AS_IF([test "${TEA_PLATFORM}" = windows], [
+       AC_MSG_CHECKING([if Windows/CE build is requested])
+       AC_ARG_ENABLE(wince,
+           AC_HELP_STRING([--enable-wince],
+               [enable Win/CE support (where applicable)]),
+           [doWince=$enableval], [doWince=no])
+       AC_MSG_RESULT([$doWince])
+    ])
+
+    # Set the variable "system" to hold the name and version number
+    # for the system.
+
+    TEA_CONFIG_SYSTEM
+
+    # Require ranlib early so we can override it in special cases below.
+
+    AC_REQUIRE([AC_PROG_RANLIB])
+
+    # Set configuration options based on system name and version.
+    # This is similar to Tcl's unix/tcl.m4 except that we've added a
+    # "windows" case and removed some core-only vars.
+
+    do64bit_ok=no
+    # default to '{$LIBS}' and set to "" on per-platform necessary basis
+    SHLIB_LD_LIBS='${LIBS}'
+    # When ld needs options to work in 64-bit mode, put them in
+    # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load]
+    # is disabled by the user. [Bug 1016796]
+    LDFLAGS_ARCH=""
+    UNSHARED_LIB_SUFFIX=""
+    # TEA specific: use PACKAGE_VERSION instead of VERSION
+    TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
+    ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
+    TCL_LIB_VERSIONS_OK=ok
+    CFLAGS_DEBUG=-g
+    AS_IF([test "$GCC" = yes], [
+       CFLAGS_OPTIMIZE=-O2
+       CFLAGS_WARNING="-Wall"
+    ], [
+       CFLAGS_OPTIMIZE=-O
+       CFLAGS_WARNING=""
+    ])
+    AC_CHECK_TOOL(AR, ar)
+    STLIB_LD='${AR} cr'
+    LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
+    AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION=""],[SHLIB_VERSION=".$SHLIB_VERSION"])
+    case $system in
+       # TEA specific:
+       windows)
+           # This is a 2-stage check to make sure we have the 64-bit SDK
+           # We have to know where the SDK is installed.
+           # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs
+           # MACHINE is IX86 for LINK, but this is used by the manifest,
+           # which requires x86|amd64|ia64.
+           MACHINE="X86"
+           if test "$do64bit" != "no" ; then
+               if test "x${MSSDK}x" = "xx" ; then
+                   MSSDK="C:/Progra~1/Microsoft Platform SDK"
+               fi
+               MSSDK=`echo "$MSSDK" | sed -e  's!\\\!/!g'`
+               PATH64=""
+               case "$do64bit" in
+                   amd64|x64|yes)
+                       MACHINE="AMD64" ; # default to AMD64 64-bit build
+                       PATH64="${MSSDK}/Bin/Win64/x86/AMD64"
+                       ;;
+                   ia64)
+                       MACHINE="IA64"
+                       PATH64="${MSSDK}/Bin/Win64"
+                       ;;
+               esac
+               if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then
+                   AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode])
+                   AC_MSG_WARN([Ensure latest Platform SDK is installed])
+                   do64bit="no"
+               else
+                   AC_MSG_RESULT([   Using 64-bit $MACHINE mode])
+                   do64bit_ok="yes"
+               fi
+           fi
+
+           if test "$doWince" != "no" ; then
+               if test "$do64bit" != "no" ; then
+                   AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible])
+               fi
+               if test "$GCC" = "yes" ; then
+                   AC_MSG_ERROR([Windows/CE and GCC builds incompatible])
+               fi
+               TEA_PATH_CELIB
+               # Set defaults for common evc4/PPC2003 setup
+               # Currently Tcl requires 300+, possibly 420+ for sockets
+               CEVERSION=420;          # could be 211 300 301 400 420 ...
+               TARGETCPU=ARMV4;        # could be ARMV4 ARM MIPS SH3 X86 ...
+               ARCH=ARM;               # could be ARM MIPS X86EM ...
+               PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
+               if test "$doWince" != "yes"; then
+                   # If !yes then the user specified something
+                   # Reset ARCH to allow user to skip specifying it
+                   ARCH=
+                   eval `echo $doWince | awk -F, '{ \
+           if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \
+           if ([$]1 < 400)   { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
+           if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \
+           if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \
+           if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \
+                   }'`
+                   if test "x${ARCH}" = "x" ; then
+                       ARCH=$TARGETCPU;
+                   fi
+               fi
+               OSVERSION=WCE$CEVERSION;
+               if test "x${WCEROOT}" = "x" ; then
+                       WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
+                   if test ! -d "${WCEROOT}" ; then
+                       WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
+                   fi
+               fi
+               if test "x${SDKROOT}" = "x" ; then
+                   SDKROOT="C:/Program Files/Windows CE Tools"
+                   if test ! -d "${SDKROOT}" ; then
+                       SDKROOT="C:/Windows CE Tools"
+                   fi
+               fi
+               WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
+               SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
+               if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \
+                   -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
+                   AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]])
+                   doWince="no"
+               else
+                   # We could PATH_NOSPACE these, but that's not important,
+                   # as long as we quote them when used.
+                   CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
+                   if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
+                       CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
+                   fi
+                   CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
+               fi
+           fi
+
+           if test "$GCC" != "yes" ; then
+               if test "${SHARED_BUILD}" = "0" ; then
+                   runtime=-MT
+               else
+                   runtime=-MD
+               fi
+               case "x`echo \${VisualStudioVersion}`" in
+                   x1[[4-9]]*)
+                       lflags="${lflags} -nodefaultlib:libucrt.lib"
+                       TEA_ADD_LIBS([ucrt.lib])
+                   ;;
+                   *)
+                   ;;
+               esac
+
+                if test "$do64bit" != "no" ; then
+                   # All this magic is necessary for the Win64 SDK RC1 - hobbs
+                   CC="\"${PATH64}/cl.exe\""
+                   CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\""
+                   RC="\"${MSSDK}/bin/rc.exe\""
+                   lflags="${lflags} -nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\""
+                   LINKBIN="\"${PATH64}/link.exe\""
+                   CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d"
+                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
+                   # Avoid 'unresolved external symbol __security_cookie'
+                   # errors, c.f. http://support.microsoft.com/?id=894573
+                   TEA_ADD_LIBS([bufferoverflowU.lib])
+               elif test "$doWince" != "no" ; then
+                   CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
+                   if test "${TARGETCPU}" = "X86"; then
+                       CC="\"${CEBINROOT}/cl.exe\""
+                   else
+                       CC="\"${CEBINROOT}/cl${ARCH}.exe\""
+                   fi
+                   CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
+                   RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
+                   arch=`echo ${ARCH} | awk '{print tolower([$]0)}'`
+                   defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS"
+                   if test "${SHARED_BUILD}" = "1" ; then
+                       # Static CE builds require static celib as well
+                       defs="${defs} _DLL"
+                   fi
+                   for i in $defs ; do
+                       AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i)
+                   done
+                   AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version])
+                   AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version])
+                   CFLAGS_DEBUG="-nologo -Zi -Od"
+                   CFLAGS_OPTIMIZE="-nologo -Ox"
+                   lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
+                   lflags="${lflags} -MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
+                   LINKBIN="\"${CEBINROOT}/link.exe\""
+                   AC_SUBST(CELIB_DIR)
+               else
+                   RC="rc"
+                   lflags="${lflags} -nologo"
+                   LINKBIN="link"
+                   CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d"
+                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
+               fi
+           fi
+
+           if test "$GCC" = "yes"; then
+               # mingw gcc mode
+               AC_CHECK_TOOL(RC, windres)
+               CFLAGS_DEBUG="-g"
+               CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
+               SHLIB_LD='${CC} -shared'
+               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
+               LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}"
+               LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}"
+
+               AC_CACHE_CHECK(for cross-compile version of gcc,
+                       ac_cv_cross,
+                       AC_TRY_COMPILE([
+                           #ifdef _WIN32
+                               #error cross-compiler
+                           #endif
+                       ], [],
+                       ac_cv_cross=yes,
+                       ac_cv_cross=no)
+                     )
+                     if test "$ac_cv_cross" = "yes"; then
+                       case "$do64bit" in
+                           amd64|x64|yes)
+                               CC="x86_64-w64-mingw32-gcc"
+                               LD="x86_64-w64-mingw32-ld"
+                               AR="x86_64-w64-mingw32-ar"
+                               RANLIB="x86_64-w64-mingw32-ranlib"
+                               RC="x86_64-w64-mingw32-windres"
+                           ;;
+                           *)
+                               CC="i686-w64-mingw32-gcc"
+                               LD="i686-w64-mingw32-ld"
+                               AR="i686-w64-mingw32-ar"
+                               RANLIB="i686-w64-mingw32-ranlib"
+                               RC="i686-w64-mingw32-windres"
+                           ;;
+                       esac
+               fi
+
+           else
+               SHLIB_LD="${LINKBIN} -dll ${lflags}"
+               # link -lib only works when -lib is the first arg
+               STLIB_LD="${LINKBIN} -lib ${lflags}"
+               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib'
+               PATHTYPE=-w
+               # For information on what debugtype is most useful, see:
+               # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
+               # and also
+               # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx
+               # This essentially turns it all on.
+               LDFLAGS_DEBUG="-debug -debugtype:cv"
+               LDFLAGS_OPTIMIZE="-release"
+               if test "$doWince" != "no" ; then
+                   LDFLAGS_CONSOLE="-link ${lflags}"
+                   LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
+               else
+                   LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
+                   LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
+               fi
+           fi
+
+           SHLIB_SUFFIX=".dll"
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll'
+
+           TCL_LIB_VERSIONS_OK=nodots
+           ;;
+       AIX-*)
+           AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [
+               # AIX requires the _r compiler when gcc isn't being used
+               case "${CC}" in
+                   *_r|*_r\ *)
+                       # ok ...
+                       ;;
+                   *)
+                       # Make sure only first arg gets _r
+                       CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'`
+                       ;;
+               esac
+               AC_MSG_RESULT([Using $CC for compiling with threads])
+           ])
+           LIBS="$LIBS -lc"
+           SHLIB_CFLAGS=""
+           SHLIB_SUFFIX=".so"
+
+           LD_LIBRARY_PATH_VAR="LIBPATH"
+
+           # Check to enable 64-bit flags for compiler/linker
+           AS_IF([test "$do64bit" = yes], [
+               AS_IF([test "$GCC" = yes], [
+                   AC_MSG_WARN([64bit mode not supported with GCC on $system])
+               ], [
+                   do64bit_ok=yes
+                   CFLAGS="$CFLAGS -q64"
+                   LDFLAGS_ARCH="-q64"
+                   RANLIB="${RANLIB} -X64"
+                   AR="${AR} -X64"
+                   SHLIB_LD_FLAGS="-b64"
+               ])
+           ])
+
+           AS_IF([test "`uname -m`" = ia64], [
+               # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
+               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
+               AS_IF([test "$GCC" = yes], [
+                   CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               ], [
+                   CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
+               ])
+               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
+           ], [
+               AS_IF([test "$GCC" = yes], [
+                   SHLIB_LD='${CC} -shared -Wl,-bexpall'
+               ], [
+                   SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry"
+                   LDFLAGS="$LDFLAGS -brtl"
+               ])
+               SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}"
+               CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ])
+           ;;
+       BeOS*)
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD='${CC} -nostart'
+           SHLIB_SUFFIX=".so"
+
+           #-----------------------------------------------------------
+           # Check for inet_ntoa in -lbind, for BeOS (which also needs
+           # -lsocket, even if the network functions are in -lnet which
+           # is always linked to, for compatibility.
+           #-----------------------------------------------------------
+           AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"])
+           ;;
+       BSD/OS-4.*)
+           SHLIB_CFLAGS="-export-dynamic -fPIC"
+           SHLIB_LD='${CC} -shared'
+           SHLIB_SUFFIX=".so"
+           LDFLAGS="$LDFLAGS -export-dynamic"
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       CYGWIN_*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD='${CC} -shared'
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$[@].a"
+           SHLIB_SUFFIX=".dll"
+           EXEEXT=".exe"
+           do64bit_ok=yes
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       Haiku*)
+           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_SUFFIX=".so"
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
+           AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
+           ;;
+       HP-UX-*.11.*)
+           # Use updated header definitions where possible
+           AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?])
+           # TEA specific: Needed by Tcl, but not most extensions
+           #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
+           #LIBS="$LIBS -lxnet"               # Use the XOPEN network library
+
+           AS_IF([test "`uname -m`" = ia64], [
+               SHLIB_SUFFIX=".so"
+               # Use newer C++ library for C++ extensions
+               #if test "$GCC" != "yes" ; then
+               #   CPPFLAGS="-AA"
+               #fi
+           ], [
+               SHLIB_SUFFIX=".sl"
+           ])
+           AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
+           AS_IF([test "$tcl_ok" = yes], [
+               LDFLAGS="$LDFLAGS -Wl,-E"
+               CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
+               LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
+               LD_LIBRARY_PATH_VAR="SHLIB_PATH"
+           ])
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_LD='${CC} -shared'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ], [
+               CFLAGS="$CFLAGS -z"
+               # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
+               #CFLAGS="$CFLAGS +DAportable"
+               SHLIB_CFLAGS="+z"
+               SHLIB_LD="ld -b"
+           ])
+
+           # Check to enable 64-bit flags for compiler/linker
+           AS_IF([test "$do64bit" = "yes"], [
+               AS_IF([test "$GCC" = yes], [
+                   case `${CC} -dumpmachine` in
+                       hppa64*)
+                           # 64-bit gcc in use.  Fix flags for GNU ld.
+                           do64bit_ok=yes
+                           SHLIB_LD='${CC} -shared'
+                           AS_IF([test $doRpath = yes], [
+                               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+                           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+                           ;;
+                       *)
+                           AC_MSG_WARN([64bit mode not supported with GCC on $system])
+                           ;;
+                   esac
+               ], [
+                   do64bit_ok=yes
+                   CFLAGS="$CFLAGS +DD64"
+                   LDFLAGS_ARCH="+DD64"
+               ])
+           ]) ;;
+       IRIX-6.*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD="ld -n32 -shared -rdata_shared"
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
+           AS_IF([test "$GCC" = yes], [
+               CFLAGS="$CFLAGS -mabi=n32"
+               LDFLAGS="$LDFLAGS -mabi=n32"
+           ], [
+               case $system in
+                   IRIX-6.3)
+                       # Use to build 6.2 compatible binaries on 6.3.
+                       CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
+                       ;;
+                   *)
+                       CFLAGS="$CFLAGS -n32"
+                       ;;
+               esac
+               LDFLAGS="$LDFLAGS -n32"
+           ])
+           ;;
+       IRIX64-6.*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD="ld -n32 -shared -rdata_shared"
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
+
+           # Check to enable 64-bit flags for compiler/linker
+
+           AS_IF([test "$do64bit" = yes], [
+               AS_IF([test "$GCC" = yes], [
+                   AC_MSG_WARN([64bit mode not supported by gcc])
+               ], [
+                   do64bit_ok=yes
+                   SHLIB_LD="ld -64 -shared -rdata_shared"
+                   CFLAGS="$CFLAGS -64"
+                   LDFLAGS_ARCH="-64"
+               ])
+           ])
+           ;;
+       Linux*|GNU*|NetBSD-Debian)
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_SUFFIX=".so"
+
+           # TEA specific:
+           CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
+
+           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
+           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"])
+           AS_IF([test $do64bit = yes], [
+               AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [
+                   hold_cflags=$CFLAGS
+                   CFLAGS="$CFLAGS -m64"
+                   AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no)
+                   CFLAGS=$hold_cflags])
+               AS_IF([test $tcl_cv_cc_m64 = yes], [
+                   CFLAGS="$CFLAGS -m64"
+                   do64bit_ok=yes
+               ])
+          ])
+
+           # The combo of gcc + glibc has a bug related to inlining of
+           # functions like strtod(). The -fno-builtin flag should address
+           # this problem but it does not work. The -fno-inline flag is kind
+           # of overkill but it works. Disable inlining only when one of the
+           # files in compat/*.c is being linked in.
+
+           AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"])
+           ;;
+       Lynx*)
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_SUFFIX=".so"
+           CFLAGS_OPTIMIZE=-02
+           SHLIB_LD='${CC} -shared'
+           LD_FLAGS="-Wl,--export-dynamic"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           ;;
+       OpenBSD-*)
+           arch=`arch -s`
+           case "$arch" in
+           alpha|sparc64)
+               SHLIB_CFLAGS="-fPIC"
+               ;;
+           *)
+               SHLIB_CFLAGS="-fpic"
+               ;;
+           esac
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
+           LDFLAGS="-Wl,-export-dynamic"
+           CFLAGS_OPTIMIZE="-O2"
+           AS_IF([test "${TCL_THREADS}" = "1"], [
+               # On OpenBSD:   Compile with -pthread
+               #               Don't link with -lpthread
+               LIBS=`echo $LIBS | sed s/-lpthread//`
+               CFLAGS="$CFLAGS -pthread"
+           ])
+           # OpenBSD doesn't do version numbers with dots.
+           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
+           TCL_LIB_VERSIONS_OK=nodots
+           ;;
+       NetBSD-*)
+           # NetBSD has ELF and can use 'cc -shared' to build shared libs
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           LDFLAGS="$LDFLAGS -export-dynamic"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           AS_IF([test "${TCL_THREADS}" = "1"], [
+               # The -pthread needs to go in the CFLAGS, not LIBS
+               LIBS=`echo $LIBS | sed s/-pthread//`
+               CFLAGS="$CFLAGS -pthread"
+               LDFLAGS="$LDFLAGS -pthread"
+           ])
+           ;;
+       FreeBSD-*)
+           # This configuration from FreeBSD Ports.
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD="${CC} -shared"
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$[@]"
+           SHLIB_SUFFIX=".so"
+           LDFLAGS=""
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           AS_IF([test "${TCL_THREADS}" = "1"], [
+               # The -pthread needs to go in the LDFLAGS, not LIBS
+               LIBS=`echo $LIBS | sed s/-pthread//`
+               CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+               LDFLAGS="$LDFLAGS $PTHREAD_LIBS"])
+           case $system in
+           FreeBSD-3.*)
+               # Version numbers are dot-stripped by system policy.
+               TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .`
+               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
+               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1'
+               TCL_LIB_VERSIONS_OK=nodots
+               ;;
+           esac
+           ;;
+       Darwin-*)
+           CFLAGS_OPTIMIZE="-Os"
+           SHLIB_CFLAGS="-fno-common"
+           # To avoid discrepancies between what headers configure sees during
+           # preprocessing tests and compiling tests, move any -isysroot and
+           # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
+           CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
+               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
+               if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`"
+           CFLAGS="`echo " ${CFLAGS}" | \
+               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
+               if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`"
+           AS_IF([test $do64bit = yes], [
+               case `arch` in
+                   ppc)
+                       AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag],
+                               tcl_cv_cc_arch_ppc64, [
+                           hold_cflags=$CFLAGS
+                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
+                           AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes,
+                                   tcl_cv_cc_arch_ppc64=no)
+                           CFLAGS=$hold_cflags])
+                       AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [
+                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
+                           do64bit_ok=yes
+                       ]);;
+                   i386)
+                       AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag],
+                               tcl_cv_cc_arch_x86_64, [
+                           hold_cflags=$CFLAGS
+                           CFLAGS="$CFLAGS -arch x86_64"
+                           AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes,
+                                   tcl_cv_cc_arch_x86_64=no)
+                           CFLAGS=$hold_cflags])
+                       AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [
+                           CFLAGS="$CFLAGS -arch x86_64"
+                           do64bit_ok=yes
+                       ]);;
+                   *)
+                       AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);;
+               esac
+           ], [
+               # Check for combined 32-bit and 64-bit fat build
+               AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \
+                   && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [
+                   fat_32_64=yes])
+           ])
+           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
+           SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [
+               hold_ldflags=$LDFLAGS
+               LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
+               AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no)
+               LDFLAGS=$hold_ldflags])
+           AS_IF([test $tcl_cv_ld_single_module = yes], [
+               SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
+           ])
+           # TEA specific: link shlib with current and compatibility version flags
+           vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d`
+           SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}"
+           SHLIB_SUFFIX=".dylib"
+           # Don't use -prebind when building for Mac OS X 10.4 or later only:
+           AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \
+               "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [
+               LDFLAGS="$LDFLAGS -prebind"])
+           LDFLAGS="$LDFLAGS -headerpad_max_install_names"
+           AC_CACHE_CHECK([if ld accepts -search_paths_first flag],
+                   tcl_cv_ld_search_paths_first, [
+               hold_ldflags=$LDFLAGS
+               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
+               AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes,
+                       tcl_cv_ld_search_paths_first=no)
+               LDFLAGS=$hold_ldflags])
+           AS_IF([test $tcl_cv_ld_search_paths_first = yes], [
+               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
+           ])
+           AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
+               AC_DEFINE(MODULE_SCOPE, [__private_extern__],
+                   [Compiler support for module scope symbols])
+               tcl_cv_cc_visibility_hidden=yes
+           ])
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
+           # TEA specific: for combined 32 & 64 bit fat builds of Tk
+           # extensions, verify that 64-bit build is possible.
+           AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [
+               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [
+                   AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
+                       done
+                       CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
+                       LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
+                       AC_TRY_LINK([#include <X11/Xlib.h>], [XrmInitialize();],
+                           tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no)
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval $v'="$hold_'$v'"'
+                       done])
+               ])
+               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [
+                   AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
+                       done
+                       CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}"
+                       LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}"
+                       AC_TRY_LINK([#include <tk.h>], [Tk_InitStubs(NULL, "", 0);],
+                           tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no)
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval $v'="$hold_'$v'"'
+                       done])
+               ])
+               # remove 64-bit arch flags from CFLAGS et al. if configuration
+               # does not support 64-bit.
+               AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [
+                   AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags])
+                   for v in CFLAGS CPPFLAGS LDFLAGS; do
+                       eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"'
+                   done])
+           ])
+           ;;
+       OS/390-*)
+           CFLAGS_OPTIMIZE=""          # Optimizer is buggy
+           AC_DEFINE(_OE_SOCKETS, 1,   # needed in sys/socket.h
+               [Should OS/390 do the right thing with sockets?])
+           ;;
+       OSF1-V*)
+           # Digital OSF/1
+           SHLIB_CFLAGS=""
+           AS_IF([test "$SHARED_BUILD" = 1], [
+               SHLIB_LD='ld -shared -expect_unresolved "*"'
+           ], [
+               SHLIB_LD='ld -non_shared -expect_unresolved "*"'
+           ])
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
+           AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [
+               CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"])
+           # see pthread_intro(3) for pthread support on osf1, k.furukawa
+           AS_IF([test "${TCL_THREADS}" = 1], [
+               CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
+               CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
+               LIBS=`echo $LIBS | sed s/-lpthreads//`
+               AS_IF([test "$GCC" = yes], [
+                   LIBS="$LIBS -lpthread -lmach -lexc"
+               ], [
+                   CFLAGS="$CFLAGS -pthread"
+                   LDFLAGS="$LDFLAGS -pthread"
+               ])
+           ])
+           ;;
+       QNX-6*)
+           # QNX RTP
+           # This may work for all QNX, but it was only reported for v6.
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD="ld -Bshareable -x"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       SCO_SV-3.2*)
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_CFLAGS="-fPIC -melf"
+               LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
+           ], [
+               SHLIB_CFLAGS="-Kpic -belf"
+               LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
+           ])
+           SHLIB_LD="ld -G"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       SunOS-5.[[0-6]])
+           # Careful to not let 5.10+ fall into this case
+
+           # Note: If _REENTRANT isn't defined, then Solaris
+           # won't define thread-safe library routines.
+
+           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
+           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
+               [Do we really want to follow the standard? Yes we do!])
+
+           SHLIB_CFLAGS="-KPIC"
+           SHLIB_SUFFIX=".so"
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_LD='${CC} -shared'
+               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ], [
+               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
+               CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ])
+           ;;
+       SunOS-5*)
+           # Note: If _REENTRANT isn't defined, then Solaris
+           # won't define thread-safe library routines.
+
+           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
+           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
+               [Do we really want to follow the standard? Yes we do!])
+
+           SHLIB_CFLAGS="-KPIC"
+
+           # Check to enable 64-bit flags for compiler/linker
+           AS_IF([test "$do64bit" = yes], [
+               arch=`isainfo`
+               AS_IF([test "$arch" = "sparcv9 sparc"], [
+                   AS_IF([test "$GCC" = yes], [
+                       AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [
+                           AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system])
+                       ], [
+                           do64bit_ok=yes
+                           CFLAGS="$CFLAGS -m64 -mcpu=v9"
+                           LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
+                           SHLIB_CFLAGS="-fPIC"
+                       ])
+                   ], [
+                       do64bit_ok=yes
+                       AS_IF([test "$do64bitVIS" = yes], [
+                           CFLAGS="$CFLAGS -xarch=v9a"
+                           LDFLAGS_ARCH="-xarch=v9a"
+                       ], [
+                           CFLAGS="$CFLAGS -xarch=v9"
+                           LDFLAGS_ARCH="-xarch=v9"
+                       ])
+                       # Solaris 64 uses this as well
+                       #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
+                   ])
+               ], [AS_IF([test "$arch" = "amd64 i386"], [
+                   AS_IF([test "$GCC" = yes], [
+                       case $system in
+                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
+                               do64bit_ok=yes
+                               CFLAGS="$CFLAGS -m64"
+                               LDFLAGS="$LDFLAGS -m64";;
+                           *)
+                               AC_MSG_WARN([64bit mode not supported with GCC on $system]);;
+                       esac
+                   ], [
+                       do64bit_ok=yes
+                       case $system in
+                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
+                               CFLAGS="$CFLAGS -m64"
+                               LDFLAGS="$LDFLAGS -m64";;
+                           *)
+                               CFLAGS="$CFLAGS -xarch=amd64"
+                               LDFLAGS="$LDFLAGS -xarch=amd64";;
+                       esac
+                   ])
+               ], [AC_MSG_WARN([64bit mode not supported for $arch])])])
+           ])
+
+           SHLIB_SUFFIX=".so"
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_LD='${CC} -shared'
+               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+               AS_IF([test "$do64bit_ok" = yes], [
+                   AS_IF([test "$arch" = "sparcv9 sparc"], [
+                       # We need to specify -static-libgcc or we need to
+                       # add the path to the sparv9 libgcc.
+                       # JH: static-libgcc is necessary for core Tcl, but may
+                       # not be necessary for extensions.
+                       SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
+                       # for finding sparcv9 libgcc, get the regular libgcc
+                       # path, remove so name and append 'sparcv9'
+                       #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
+                       #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
+                   ], [AS_IF([test "$arch" = "amd64 i386"], [
+                       # JH: static-libgcc is necessary for core Tcl, but may
+                       # not be necessary for extensions.
+                       SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
+                   ])])
+               ])
+           ], [
+               case $system in
+                   SunOS-5.[[1-9]][[0-9]]*)
+                       # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
+                       SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';;
+                   *)
+                       SHLIB_LD='/usr/ccs/bin/ld -G -z text';;
+               esac
+               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
+           ])
+           ;;
+       UNIX_SV* | UnixWare-5*)
+           SHLIB_CFLAGS="-KPIC"
+           SHLIB_LD='${CC} -G'
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
+           # that don't grok the -Bexport option.  Test that it does.
+           AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [
+               hold_ldflags=$LDFLAGS
+               LDFLAGS="$LDFLAGS -Wl,-Bexport"
+               AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no)
+               LDFLAGS=$hold_ldflags])
+           AS_IF([test $tcl_cv_ld_Bexport = yes], [
+               LDFLAGS="$LDFLAGS -Wl,-Bexport"
+           ])
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+    esac
+
+    AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [
+       AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform])
+    ])
+
+dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so
+dnl # until the end of configure, as configure's compile and link tests use
+dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's
+dnl # preprocessing tests use only CPPFLAGS.
+    AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""])
+
+    # Add in the arch flags late to ensure it wasn't removed.
+    # Not necessary in TEA, but this is aligned with core
+    LDFLAGS="$LDFLAGS $LDFLAGS_ARCH"
+
+    # If we're running gcc, then change the C flags for compiling shared
+    # libraries to the right flags for gcc, instead of those for the
+    # standard manufacturer compiler.
+
+    AS_IF([test "$GCC" = yes], [
+       case $system in
+           AIX-*) ;;
+           BSD/OS*) ;;
+           CYGWIN_*|MINGW32_*) ;;
+           IRIX*) ;;
+           NetBSD-*|FreeBSD-*|OpenBSD-*) ;;
+           Darwin-*) ;;
+           SCO_SV-3.2*) ;;
+           windows) ;;
+           *) SHLIB_CFLAGS="-fPIC" ;;
+       esac])
+
+    AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
+       AC_DEFINE(MODULE_SCOPE, [extern],
+           [No Compiler support for module scope symbols])
+    ])
+
+    AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [
+    # TEA specific: use PACKAGE_VERSION instead of VERSION
+    SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}'])
+    AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [
+    # TEA specific: use PACKAGE_VERSION instead of VERSION
+    UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'])
+
+    if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then
+       AC_CACHE_CHECK(for SEH support in compiler,
+           tcl_cv_seh,
+       AC_TRY_RUN([
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#undef WIN32_LEAN_AND_MEAN
+
+           int main(int argc, char** argv) {
+               int a, b = 0;
+               __try {
+                   a = 666 / b;
+               }
+               __except (EXCEPTION_EXECUTE_HANDLER) {
+                   return 0;
+               }
+               return 1;
+           }
+       ],
+           tcl_cv_seh=yes,
+           tcl_cv_seh=no,
+           tcl_cv_seh=no)
+       )
+       if test "$tcl_cv_seh" = "no" ; then
+           AC_DEFINE(HAVE_NO_SEH, 1,
+                   [Defined when mingw does not support SEH])
+       fi
+
+       #
+       # Check to see if the excpt.h include file provided contains the
+       # definition for EXCEPTION_DISPOSITION; if not, which is the case
+       # with Cygwin's version as of 2002-04-10, define it to be int,
+       # sufficient for getting the current code to work.
+       #
+       AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files,
+           tcl_cv_eh_disposition,
+           AC_TRY_COMPILE([
+#          define WIN32_LEAN_AND_MEAN
+#          include <windows.h>
+#          undef WIN32_LEAN_AND_MEAN
+           ],[
+               EXCEPTION_DISPOSITION x;
+           ],
+               tcl_cv_eh_disposition=yes,
+               tcl_cv_eh_disposition=no)
+       )
+       if test "$tcl_cv_eh_disposition" = "no" ; then
+       AC_DEFINE(EXCEPTION_DISPOSITION, int,
+               [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION])
+       fi
+
+       # Check to see if winnt.h defines CHAR, SHORT, and LONG
+       # even if VOID has already been #defined. The win32api
+       # used by mingw and cygwin is known to do this.
+
+       AC_CACHE_CHECK(for winnt.h that ignores VOID define,
+           tcl_cv_winnt_ignore_void,
+           AC_TRY_COMPILE([
+#define VOID void
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#undef WIN32_LEAN_AND_MEAN
+           ], [
+               CHAR c;
+               SHORT s;
+               LONG l;
+           ],
+        tcl_cv_winnt_ignore_void=yes,
+        tcl_cv_winnt_ignore_void=no)
+       )
+       if test "$tcl_cv_winnt_ignore_void" = "yes" ; then
+           AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1,
+                   [Defined when cygwin/mingw ignores VOID define in winnt.h])
+       fi
+    fi
+
+       # See if the compiler supports casting to a union type.
+       # This is used to stop gcc from printing a compiler
+       # warning when initializing a union member.
+
+       AC_CACHE_CHECK(for cast to union support,
+           tcl_cv_cast_to_union,
+           AC_TRY_COMPILE([],
+           [
+                 union foo { int i; double d; };
+                 union foo f = (union foo) (int) 0;
+           ],
+           tcl_cv_cast_to_union=yes,
+           tcl_cv_cast_to_union=no)
+       )
+       if test "$tcl_cv_cast_to_union" = "yes"; then
+           AC_DEFINE(HAVE_CAST_TO_UNION, 1,
+                   [Defined when compiler supports casting to union type.])
+       fi
+
+    AC_SUBST(CFLAGS_DEBUG)
+    AC_SUBST(CFLAGS_OPTIMIZE)
+    AC_SUBST(CFLAGS_WARNING)
+
+    AC_SUBST(STLIB_LD)
+    AC_SUBST(SHLIB_LD)
+
+    AC_SUBST(SHLIB_LD_LIBS)
+    AC_SUBST(SHLIB_CFLAGS)
+
+    AC_SUBST(LD_LIBRARY_PATH_VAR)
+
+    # These must be called after we do the basic CFLAGS checks and
+    # verify any possible 64-bit or similar switches are necessary
+    TEA_TCL_EARLY_FLAGS
+    TEA_TCL_64BIT_FLAGS
+])
+
+#--------------------------------------------------------------------
+# TEA_SERIAL_PORT
+#
+#      Determine which interface to use to talk to the serial port.
+#      Note that #include lines must begin in leftmost column for
+#      some compilers to recognize them as preprocessor directives,
+#      and some build environments have stdin not pointing at a
+#      pseudo-terminal (usually /dev/null instead.)
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines only one of the following vars:
+#              HAVE_SYS_MODEM_H
+#              USE_TERMIOS
+#              USE_TERMIO
+#              USE_SGTTY
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_SERIAL_PORT], [
+    AC_CHECK_HEADERS(sys/modem.h)
+    AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [
+    AC_TRY_RUN([
+#include <termios.h>
+
+int main() {
+    struct termios t;
+    if (tcgetattr(0, &t) == 0) {
+       cfsetospeed(&t, 0);
+       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    if test $tcl_cv_api_serial = no ; then
+       AC_TRY_RUN([
+#include <termio.h>
+
+int main() {
+    struct termio t;
+    if (ioctl(0, TCGETA, &t) == 0) {
+       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no ; then
+       AC_TRY_RUN([
+#include <sgtty.h>
+
+int main() {
+    struct sgttyb t;
+    if (ioctl(0, TIOCGETP, &t) == 0) {
+       t.sg_ospeed = 0;
+       t.sg_flags |= ODDP | EVENP | RAW;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no ; then
+       AC_TRY_RUN([
+#include <termios.h>
+#include <errno.h>
+
+int main() {
+    struct termios t;
+    if (tcgetattr(0, &t) == 0
+       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+       cfsetospeed(&t, 0);
+       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no; then
+       AC_TRY_RUN([
+#include <termio.h>
+#include <errno.h>
+
+int main() {
+    struct termio t;
+    if (ioctl(0, TCGETA, &t) == 0
+       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+    }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no; then
+       AC_TRY_RUN([
+#include <sgtty.h>
+#include <errno.h>
+
+int main() {
+    struct sgttyb t;
+    if (ioctl(0, TIOCGETP, &t) == 0
+       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+       t.sg_ospeed = 0;
+       t.sg_flags |= ODDP | EVENP | RAW;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none)
+    fi])
+    case $tcl_cv_api_serial in
+       termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);;
+       termio)  AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);;
+       sgtty)   AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);;
+    esac
+])
+
+#--------------------------------------------------------------------
+# TEA_MISSING_POSIX_HEADERS
+#
+#      Supply substitutes for missing POSIX header files.  Special
+#      notes:
+#          - stdlib.h doesn't define strtol, strtoul, or
+#            strtod in some versions of SunOS
+#          - some versions of string.h don't declare procedures such
+#            as strstr
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines some of the following vars:
+#              NO_DIRENT_H
+#              NO_ERRNO_H
+#              NO_VALUES_H
+#              HAVE_LIMITS_H or NO_LIMITS_H
+#              NO_STDLIB_H
+#              NO_STRING_H
+#              NO_SYS_WAIT_H
+#              NO_DLFCN_H
+#              HAVE_SYS_PARAM_H
+#
+#              HAVE_STRING_H ?
+#
+# tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and
+# CHECK on limits.h
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [
+    AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [
+    AC_TRY_LINK([#include <sys/types.h>
+#include <dirent.h>], [
+#ifndef _POSIX_SOURCE
+#   ifdef __Lynx__
+       /*
+        * Generate compilation error to make the test fail:  Lynx headers
+        * are only valid if really in the POSIX environment.
+        */
+
+       missing_procedure();
+#   endif
+#endif
+DIR *d;
+struct dirent *entryPtr;
+char *p;
+d = opendir("foobar");
+entryPtr = readdir(d);
+p = entryPtr->d_name;
+closedir(d);
+], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)])
+
+    if test $tcl_cv_dirent_h = no; then
+       AC_DEFINE(NO_DIRENT_H, 1, [Do we have <dirent.h>?])
+    fi
+
+    # TEA specific:
+    AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have <errno.h>?])])
+    AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have <values.h>?])])
+    AC_CHECK_HEADER(limits.h,
+       [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have <limits.h>?])],
+       [AC_DEFINE(NO_LIMITS_H, 1, [Do we have <limits.h>?])])
+    AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
+    AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
+    if test $tcl_ok = 0; then
+       AC_DEFINE(NO_STDLIB_H, 1, [Do we have <stdlib.h>?])
+    fi
+    AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
+    AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
+
+    # See also memmove check below for a place where NO_STRING_H can be
+    # set and why.
+
+    if test $tcl_ok = 0; then
+       AC_DEFINE(NO_STRING_H, 1, [Do we have <string.h>?])
+    fi
+
+    AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have <sys/wait.h>?])])
+    AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have <dlfcn.h>?])])
+
+    # OS/390 lacks sys/param.h (and doesn't need it, by chance).
+    AC_HAVE_HEADERS(sys/param.h)
+])
+
+#--------------------------------------------------------------------
+# TEA_PATH_X
+#
+#      Locate the X11 header files and the X11 library archive.  Try
+#      the ac_path_x macro first, but if it doesn't find the X stuff
+#      (e.g. because there's no xmkmf program) then check through
+#      a list of possible directories.  Under some conditions the
+#      autoconf macro will return an include directory that contains
+#      no include files, so double-check its result just to be safe.
+#
+#      This should be called after TEA_CONFIG_CFLAGS as setting the
+#      LIBS line can confuse some configure macro magic.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Sets the following vars:
+#              XINCLUDES
+#              XLIBSW
+#              PKG_LIBS (appends to)
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_X], [
+    if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then
+       TEA_PATH_UNIX_X
+    fi
+])
+
+AC_DEFUN([TEA_PATH_UNIX_X], [
+    AC_PATH_X
+    not_really_there=""
+    if test "$no_x" = ""; then
+       if test "$x_includes" = ""; then
+           AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes")
+       else
+           if test ! -r $x_includes/X11/Xlib.h; then
+               not_really_there="yes"
+           fi
+       fi
+    fi
+    if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
+       AC_MSG_CHECKING([for X11 header files])
+       found_xincludes="no"
+       AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no")
+       if test "$found_xincludes" = "no"; then
+           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"
+           for i in $dirs ; do
+               if test -r $i/X11/Xlib.h; then
+                   AC_MSG_RESULT([$i])
+                   XINCLUDES=" -I$i"
+                   found_xincludes="yes"
+                   break
+               fi
+           done
+       fi
+    else
+       if test "$x_includes" != ""; then
+           XINCLUDES="-I$x_includes"
+           found_xincludes="yes"
+       fi
+    fi
+    if test "$found_xincludes" = "no"; then
+       AC_MSG_RESULT([couldn't find any!])
+    fi
+
+    if test "$no_x" = yes; then
+       AC_MSG_CHECKING([for X11 libraries])
+       XLIBSW=nope
+       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"
+       for i in $dirs ; do
+           if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then
+               AC_MSG_RESULT([$i])
+               XLIBSW="-L$i -lX11"
+               x_libraries="$i"
+               break
+           fi
+       done
+    else
+       if test "$x_libraries" = ""; then
+           XLIBSW=-lX11
+       else
+           XLIBSW="-L$x_libraries -lX11"
+       fi
+    fi
+    if test "$XLIBSW" = nope ; then
+       AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
+    fi
+    if test "$XLIBSW" = nope ; then
+       AC_MSG_RESULT([could not find any!  Using -lX11.])
+       XLIBSW=-lX11
+    fi
+    # TEA specific:
+    if test x"${XLIBSW}" != x ; then
+       PKG_LIBS="${PKG_LIBS} ${XLIBSW}"
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_BLOCKING_STYLE
+#
+#      The statements below check for systems where POSIX-style
+#      non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
+#      On these systems (mostly older ones), use the old BSD-style
+#      FIONBIO approach instead.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines some of the following vars:
+#              HAVE_SYS_IOCTL_H
+#              HAVE_SYS_FILIO_H
+#              USE_FIONBIO
+#              O_NONBLOCK
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_BLOCKING_STYLE], [
+    AC_CHECK_HEADERS(sys/ioctl.h)
+    AC_CHECK_HEADERS(sys/filio.h)
+    TEA_CONFIG_SYSTEM
+    AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
+    case $system in
+       OSF*)
+           AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?])
+           AC_MSG_RESULT([FIONBIO])
+           ;;
+       *)
+           AC_MSG_RESULT([O_NONBLOCK])
+           ;;
+    esac
+])
+
+#--------------------------------------------------------------------
+# TEA_TIME_HANDLER
+#
+#      Checks how the system deals with time.h, what time structures
+#      are used on the system, and what fields the structures have.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines some of the following vars:
+#              USE_DELTA_FOR_TZ
+#              HAVE_TM_GMTOFF
+#              HAVE_TM_TZADJ
+#              HAVE_TIMEZONE_VAR
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TIME_HANDLER], [
+    AC_CHECK_HEADERS(sys/time.h)
+    AC_HEADER_TIME
+    AC_STRUCT_TIMEZONE
+
+    AC_CHECK_FUNCS(gmtime_r localtime_r)
+
+    AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [
+       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
+           tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)])
+    if test $tcl_cv_member_tm_tzadj = yes ; then
+       AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?])
+    fi
+
+    AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [
+       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
+           tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)])
+    if test $tcl_cv_member_tm_gmtoff = yes ; then
+       AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?])
+    fi
+
+    #
+    # Its important to include time.h in this check, as some systems
+    # (like convex) have timezone functions, etc.
+    #
+    AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [
+       AC_TRY_COMPILE([#include <time.h>],
+           [extern long timezone;
+           timezone += 1;
+           exit (0);],
+           tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)])
+    if test $tcl_cv_timezone_long = yes ; then
+       AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
+    else
+       #
+       # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
+       #
+       AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [
+           AC_TRY_COMPILE([#include <time.h>],
+               [extern time_t timezone;
+               timezone += 1;
+               exit (0);],
+               tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)])
+       if test $tcl_cv_timezone_time = yes ; then
+           AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
+       fi
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_BUGGY_STRTOD
+#
+#      Under Solaris 2.4, strtod returns the wrong value for the
+#      terminating character under some conditions.  Check for this
+#      and if the problem exists use a substitute procedure
+#      "fixstrtod" (provided by Tcl) that corrects the error.
+#      Also, on Compaq's Tru64 Unix 5.0,
+#      strtod(" ") returns 0.0 instead of a failure to convert.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Might defines some of the following vars:
+#              strtod (=fixstrtod)
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_BUGGY_STRTOD], [
+    AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0)
+    if test "$tcl_strtod" = 1; then
+       AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[
+           AC_TRY_RUN([
+               extern double strtod();
+               int main() {
+                   char *infString="Inf", *nanString="NaN", *spaceString=" ";
+                   char *term;
+                   double value;
+                   value = strtod(infString, &term);
+                   if ((term != infString) && (term[-1] == 0)) {
+                       exit(1);
+                   }
+                   value = strtod(nanString, &term);
+                   if ((term != nanString) && (term[-1] == 0)) {
+                       exit(1);
+                   }
+                   value = strtod(spaceString, &term);
+                   if (term == (spaceString+1)) {
+                       exit(1);
+                   }
+                   exit(0);
+               }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy,
+                   tcl_cv_strtod_buggy=buggy)])
+       if test "$tcl_cv_strtod_buggy" = buggy; then
+           AC_LIBOBJ([fixstrtod])
+           USE_COMPAT=1
+           AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?])
+       fi
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_TCL_LINK_LIBS
+#
+#      Search for the libraries needed to link the Tcl shell.
+#      Things like the math library (-lm) and socket stuff (-lsocket vs.
+#      -lnsl) are dealt with here.
+#
+# Arguments:
+#      Requires the following vars to be set in the Makefile:
+#              DL_LIBS (not in TEA, only needed in core)
+#              LIBS
+#              MATH_LIBS
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TCL_LIBS
+#              MATH_LIBS
+#
+#      Might append to the following vars:
+#              LIBS
+#
+#      Might define the following vars:
+#              HAVE_NET_ERRNO_H
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TCL_LINK_LIBS], [
+    #--------------------------------------------------------------------
+    # On a few very rare systems, all of the libm.a stuff is
+    # already in libc.a.  Set compiler flags accordingly.
+    # Also, Linux requires the "ieee" library for math to work
+    # right (and it must appear before "-lm").
+    #--------------------------------------------------------------------
+
+    AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
+    AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
+
+    #--------------------------------------------------------------------
+    # Interactive UNIX requires -linet instead of -lsocket, plus it
+    # needs net/errno.h to define the socket-related error codes.
+    #--------------------------------------------------------------------
+
+    AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
+    AC_CHECK_HEADER(net/errno.h, [
+       AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have <net/errno.h>?])])
+
+    #--------------------------------------------------------------------
+    #  Check for the existence of the -lsocket and -lnsl libraries.
+    #  The order here is important, so that they end up in the right
+    #  order in the command line generated by make.  Here are some
+    #  special considerations:
+    #  1. Use "connect" and "accept" to check for -lsocket, and
+    #     "gethostbyname" to check for -lnsl.
+    #  2. Use each function name only once:  can't redo a check because
+    #     autoconf caches the results of the last check and won't redo it.
+    #  3. Use -lnsl and -lsocket only if they supply procedures that
+    #     aren't already present in the normal libraries.  This is because
+    #     IRIX 5.2 has libraries, but they aren't needed and they're
+    #     bogus:  they goof up name resolution if used.
+    #  4. On some SVR4 systems, can't use -lsocket without -lnsl too.
+    #     To get around this problem, check for both libraries together
+    #     if -lsocket doesn't work by itself.
+    #--------------------------------------------------------------------
+
+    tcl_checkBoth=0
+    AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
+    if test "$tcl_checkSocket" = 1; then
+       AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt,
+           LIBS="$LIBS -lsocket", tcl_checkBoth=1)])
+    fi
+    if test "$tcl_checkBoth" = 1; then
+       tk_oldLibs=$LIBS
+       LIBS="$LIBS -lsocket -lnsl"
+       AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs])
+    fi
+    AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname,
+           [LIBS="$LIBS -lnsl"])])
+
+    # TEA specific: Don't perform the eval of the libraries here because
+    # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS
+
+    TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
+    AC_SUBST(TCL_LIBS)
+    AC_SUBST(MATH_LIBS)
+])
+
+#--------------------------------------------------------------------
+# TEA_TCL_EARLY_FLAGS
+#
+#      Check for what flags are needed to be passed so the correct OS
+#      features are available.
+#
+# Arguments:
+#      None
+#
+# Results:
+#
+#      Might define the following vars:
+#              _ISOC99_SOURCE
+#              _LARGEFILE64_SOURCE
+#              _LARGEFILE_SOURCE64
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TCL_EARLY_FLAG],[
+    AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]),
+       AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no,
+           AC_TRY_COMPILE([[#define ]$1[ 1
+]$2], $3,
+               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes,
+               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no)))
+    if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then
+       AC_DEFINE($1, 1, [Add the ]$1[ flag when building])
+       tcl_flags="$tcl_flags $1"
+    fi
+])
+
+AC_DEFUN([TEA_TCL_EARLY_FLAGS],[
+    AC_MSG_CHECKING([for required early compiler flags])
+    tcl_flags=""
+    TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include <stdlib.h>],
+       [char *p = (char *)strtoll; char *q = (char *)strtoull;])
+    TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include <sys/stat.h>],
+       [struct stat64 buf; int i = stat64("/", &buf);])
+    TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include <sys/stat.h>],
+       [char *p = (char *)open64;])
+    if test "x${tcl_flags}" = "x" ; then
+       AC_MSG_RESULT([none])
+    else
+       AC_MSG_RESULT([${tcl_flags}])
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_TCL_64BIT_FLAGS
+#
+#      Check for what is defined in the way of 64-bit features.
+#
+# Arguments:
+#      None
+#
+# Results:
+#
+#      Might define the following vars:
+#              TCL_WIDE_INT_IS_LONG
+#              TCL_WIDE_INT_TYPE
+#              HAVE_STRUCT_DIRENT64
+#              HAVE_STRUCT_STAT64
+#              HAVE_TYPE_OFF64_T
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TCL_64BIT_FLAGS], [
+    AC_MSG_CHECKING([for 64-bit integer type])
+    AC_CACHE_VAL(tcl_cv_type_64bit,[
+       tcl_cv_type_64bit=none
+       # See if the compiler knows natively about __int64
+       AC_TRY_COMPILE(,[__int64 value = (__int64) 0;],
+           tcl_type_64bit=__int64, tcl_type_64bit="long long")
+       # See if we should use long anyway  Note that we substitute in the
+       # type that is our current guess for a 64-bit type inside this check
+       # program, so it should be modified only carefully...
+        AC_TRY_COMPILE(,[switch (0) {
+            case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ;
+        }],tcl_cv_type_64bit=${tcl_type_64bit})])
+    if test "${tcl_cv_type_64bit}" = none ; then
+       AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?])
+       AC_MSG_RESULT([using long])
+    elif test "${tcl_cv_type_64bit}" = "__int64" \
+               -a "${TEA_PLATFORM}" = "windows" ; then
+       # TEA specific: We actually want to use the default tcl.h checks in
+       # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER*
+       AC_MSG_RESULT([using Tcl header defaults])
+    else
+       AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit},
+           [What type should be used to define wide integers?])
+       AC_MSG_RESULT([${tcl_cv_type_64bit}])
+
+       # Now check for auxiliary declarations
+       AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[
+           AC_TRY_COMPILE([#include <sys/types.h>
+#include <dirent.h>],[struct dirent64 p;],
+               tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)])
+       if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
+           AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?])
+       fi
+
+       AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[
+           AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p;
+],
+               tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)])
+       if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
+           AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in <sys/stat.h>?])
+       fi
+
+       AC_CHECK_FUNCS(open64 lseek64)
+       AC_MSG_CHECKING([for off64_t])
+       AC_CACHE_VAL(tcl_cv_type_off64_t,[
+           AC_TRY_COMPILE([#include <sys/types.h>],[off64_t offset;
+],
+               tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)])
+       dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the
+       dnl functions lseek64 and open64 are defined.
+       if test "x${tcl_cv_type_off64_t}" = "xyes" && \
+               test "x${ac_cv_func_lseek64}" = "xyes" && \
+               test "x${ac_cv_func_open64}" = "xyes" ; then
+           AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in <sys/types.h>?])
+           AC_MSG_RESULT([yes])
+       else
+           AC_MSG_RESULT([no])
+       fi
+    fi
+])
+
+##
+## Here ends the standard Tcl configuration bits and starts the
+## TEA specific functions
+##
+
+#------------------------------------------------------------------------
+# TEA_INIT --
+#
+#      Init various Tcl Extension Architecture (TEA) variables.
+#      This should be the first called TEA_* macro.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              CYGPATH
+#              EXEEXT
+#      Defines only:
+#              TEA_VERSION
+#              TEA_INITED
+#              TEA_PLATFORM (windows or unix)
+#
+# "cygpath" is used on windows to generate native path names for include
+# files. These variables should only be used with the compiler and linker
+# since they generate native path names.
+#
+# EXEEXT
+#      Select the executable extension based on the host type.  This
+#      is a lightweight replacement for AC_EXEEXT that doesn't require
+#      a compiler.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_INIT], [
+    # TEA extensions pass this us the version of TEA they think they
+    # are compatible with.
+    TEA_VERSION="3.10"
+
+    AC_MSG_CHECKING([for correct TEA configuration])
+    if test x"${PACKAGE_NAME}" = x ; then
+       AC_MSG_ERROR([
+The PACKAGE_NAME variable must be defined by your TEA configure.ac])
+    fi
+    if test x"$1" = x ; then
+       AC_MSG_ERROR([
+TEA version not specified.])
+    elif test "$1" != "${TEA_VERSION}" ; then
+       AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"])
+    else
+       AC_MSG_RESULT([ok (TEA ${TEA_VERSION})])
+    fi
+
+    # If the user did not set CFLAGS, set it now to keep macros
+    # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2".
+    if test "${CFLAGS+set}" != "set" ; then
+       CFLAGS=""
+    fi
+
+    case "`uname -s`" in
+       *win32*|*WIN32*|*MINGW32_*)
+           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)
+           EXEEXT=".exe"
+           TEA_PLATFORM="windows"
+           ;;
+       *CYGWIN_*)
+           EXEEXT=".exe"
+           # CYGPATH and TEA_PLATFORM are determined later in LOAD_TCLCONFIG
+           ;;
+       *)
+           CYGPATH=echo
+           # Maybe we are cross-compiling....
+           case ${host_alias} in
+               *mingw32*)
+               EXEEXT=".exe"
+               TEA_PLATFORM="windows"
+               ;;
+           *)
+               EXEEXT=""
+               TEA_PLATFORM="unix"
+               ;;
+           esac
+           ;;
+    esac
+
+    # Check if exec_prefix is set. If not use fall back to prefix.
+    # Note when adjusted, so that TEA_PREFIX can correct for this.
+    # This is needed for recursive configures, since autoconf propagates
+    # $prefix, but not $exec_prefix (doh!).
+    if test x$exec_prefix = xNONE ; then
+       exec_prefix_default=yes
+       exec_prefix=$prefix
+    fi
+
+    AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}])
+
+    AC_SUBST(EXEEXT)
+    AC_SUBST(CYGPATH)
+
+    # This package name must be replaced statically for AC_SUBST to work
+    AC_SUBST(PKG_LIB_FILE)
+    # Substitute STUB_LIB_FILE in case package creates a stub library too.
+    AC_SUBST(PKG_STUB_LIB_FILE)
+
+    # We AC_SUBST these here to ensure they are subst'ed,
+    # in case the user doesn't call TEA_ADD_...
+    AC_SUBST(PKG_STUB_SOURCES)
+    AC_SUBST(PKG_STUB_OBJECTS)
+    AC_SUBST(PKG_TCL_SOURCES)
+    AC_SUBST(PKG_HEADERS)
+    AC_SUBST(PKG_INCLUDES)
+    AC_SUBST(PKG_LIBS)
+    AC_SUBST(PKG_CFLAGS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_SOURCES --
+#
+#      Specify one or more source files.  Users should check for
+#      the right platform before adding to their list.
+#      It is not important to specify the directory, as long as it is
+#      in the generic, win or unix subdirectory of $(srcdir).
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_SOURCES
+#              PKG_OBJECTS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_SOURCES], [
+    vars="$@"
+    for i in $vars; do
+       case $i in
+           [\$]*)
+               # allow $-var names
+               PKG_SOURCES="$PKG_SOURCES $i"
+               PKG_OBJECTS="$PKG_OBJECTS $i"
+               ;;
+           *)
+               # check for existence - allows for generic/win/unix VPATH
+               # To add more dirs here (like 'src'), you have to update VPATH
+               # in Makefile.in as well
+               if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
+                   -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
+                   -a ! -f "${srcdir}/macosx/$i" \
+                   ; then
+                   AC_MSG_ERROR([could not find source file '$i'])
+               fi
+               PKG_SOURCES="$PKG_SOURCES $i"
+               # this assumes it is in a VPATH dir
+               i=`basename $i`
+               # handle user calling this before or after TEA_SETUP_COMPILER
+               if test x"${OBJEXT}" != x ; then
+                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
+               else
+                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
+               fi
+               PKG_OBJECTS="$PKG_OBJECTS $j"
+               ;;
+       esac
+    done
+    AC_SUBST(PKG_SOURCES)
+    AC_SUBST(PKG_OBJECTS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_STUB_SOURCES --
+#
+#      Specify one or more source files.  Users should check for
+#      the right platform before adding to their list.
+#      It is not important to specify the directory, as long as it is
+#      in the generic, win or unix subdirectory of $(srcdir).
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_STUB_SOURCES
+#              PKG_STUB_OBJECTS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_STUB_SOURCES], [
+    vars="$@"
+    for i in $vars; do
+       # check for existence - allows for generic/win/unix VPATH
+       if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
+           -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
+           -a ! -f "${srcdir}/macosx/$i" \
+           ; then
+           AC_MSG_ERROR([could not find stub source file '$i'])
+       fi
+       PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i"
+       # this assumes it is in a VPATH dir
+       i=`basename $i`
+       # handle user calling this before or after TEA_SETUP_COMPILER
+       if test x"${OBJEXT}" != x ; then
+           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
+       else
+           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
+       fi
+       PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j"
+    done
+    AC_SUBST(PKG_STUB_SOURCES)
+    AC_SUBST(PKG_STUB_OBJECTS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_TCL_SOURCES --
+#
+#      Specify one or more Tcl source files.  These should be platform
+#      independent runtime files.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_TCL_SOURCES
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_TCL_SOURCES], [
+    vars="$@"
+    for i in $vars; do
+       # check for existence, be strict because it is installed
+       if test ! -f "${srcdir}/$i" ; then
+           AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i'])
+       fi
+       PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i"
+    done
+    AC_SUBST(PKG_TCL_SOURCES)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_HEADERS --
+#
+#      Specify one or more source headers.  Users should check for
+#      the right platform before adding to their list.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_HEADERS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_HEADERS], [
+    vars="$@"
+    for i in $vars; do
+       # check for existence, be strict because it is installed
+       if test ! -f "${srcdir}/$i" ; then
+           AC_MSG_ERROR([could not find header file '${srcdir}/$i'])
+       fi
+       PKG_HEADERS="$PKG_HEADERS $i"
+    done
+    AC_SUBST(PKG_HEADERS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_INCLUDES --
+#
+#      Specify one or more include dirs.  Users should check for
+#      the right platform before adding to their list.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_INCLUDES
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_INCLUDES], [
+    vars="$@"
+    for i in $vars; do
+       PKG_INCLUDES="$PKG_INCLUDES $i"
+    done
+    AC_SUBST(PKG_INCLUDES)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_LIBS --
+#
+#      Specify one or more libraries.  Users should check for
+#      the right platform before adding to their list.  For Windows,
+#      libraries provided in "foo.lib" format will be converted to
+#      "-lfoo" when using GCC (mingw).
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_LIBS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_LIBS], [
+    vars="$@"
+    for i in $vars; do
+       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
+           # Convert foo.lib to -lfoo for GCC.  No-op if not *.lib
+           i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'`
+       fi
+       PKG_LIBS="$PKG_LIBS $i"
+    done
+    AC_SUBST(PKG_LIBS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_CFLAGS --
+#
+#      Specify one or more CFLAGS.  Users should check for
+#      the right platform before adding to their list.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_CFLAGS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_CFLAGS], [
+    PKG_CFLAGS="$PKG_CFLAGS $@"
+    AC_SUBST(PKG_CFLAGS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_CLEANFILES --
+#
+#      Specify one or more CLEANFILES.
+#
+# Arguments:
+#      one or more file names to clean target
+#
+# Results:
+#
+#      Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_CLEANFILES], [
+    CLEANFILES="$CLEANFILES $@"
+])
+
+#------------------------------------------------------------------------
+# TEA_PREFIX --
+#
+#      Handle the --prefix=... option by defaulting to what Tcl gave
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      If --prefix or --exec-prefix was not specified, $prefix and
+#      $exec_prefix will be set to the values given to Tcl when it was
+#      configured.
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_PREFIX], [
+    if test "${prefix}" = "NONE"; then
+       prefix_default=yes
+       if test x"${TCL_PREFIX}" != x; then
+           AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}])
+           prefix=${TCL_PREFIX}
+       else
+           AC_MSG_NOTICE([--prefix defaulting to /usr/local])
+           prefix=/usr/local
+       fi
+    fi
+    if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \
+       -o x"${exec_prefix_default}" = x"yes" ; then
+       if test x"${TCL_EXEC_PREFIX}" != x; then
+           AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}])
+           exec_prefix=${TCL_EXEC_PREFIX}
+       else
+           AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}])
+           exec_prefix=$prefix
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_SETUP_COMPILER_CC --
+#
+#      Do compiler checks the way we want.  This is just a replacement
+#      for AC_PROG_CC in TEA configure.ac files to make them cleaner.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Sets up CC var and other standard bits we need to make executables.
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_SETUP_COMPILER_CC], [
+    # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE)
+    # in this macro, they need to go into TEA_SETUP_COMPILER instead.
+
+    AC_PROG_CC
+    AC_PROG_CPP
+
+    INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c'
+    INSTALL_DATA_DIR='${INSTALL} -d -m 755'
+    INSTALL_DATA='${INSTALL} -m 644'
+    INSTALL_PROGRAM='${INSTALL}'
+    INSTALL_SCRIPT='${INSTALL}'
+    INSTALL_LIBRARY='${INSTALL_DATA}'
+
+    AC_SUBST(INSTALL)
+    AC_SUBST(INSTALL_DATA_DIR)
+    AC_SUBST(INSTALL_DATA)
+    AC_SUBST(INSTALL_PROGRAM)
+    AC_SUBST(INSTALL_SCRIPT)
+    AC_SUBST(INSTALL_LIBRARY)
+
+    #--------------------------------------------------------------------
+    # Checks to see if the make program sets the $MAKE variable.
+    #--------------------------------------------------------------------
+
+    AC_PROG_MAKE_SET
+
+    #--------------------------------------------------------------------
+    # Find ranlib
+    #--------------------------------------------------------------------
+
+    AC_CHECK_TOOL(RANLIB, ranlib)
+
+    #--------------------------------------------------------------------
+    # Determines the correct binary file extension (.o, .obj, .exe etc.)
+    #--------------------------------------------------------------------
+
+    AC_OBJEXT
+    AC_EXEEXT
+])
+
+#------------------------------------------------------------------------
+# TEA_SETUP_COMPILER --
+#
+#      Do compiler checks that use the compiler.  This must go after
+#      TEA_SETUP_COMPILER_CC, which does the actual compiler check.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Sets up CC var and other standard bits we need to make executables.
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_SETUP_COMPILER], [
+    # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here.
+    AC_REQUIRE([TEA_SETUP_COMPILER_CC])
+
+    #------------------------------------------------------------------------
+    # If we're using GCC, see if the compiler understands -pipe. If so, use it.
+    # It makes compiling go faster.  (This is only a performance feature.)
+    #------------------------------------------------------------------------
+
+    if test -z "$no_pipe" -a -n "$GCC"; then
+       AC_CACHE_CHECK([if the compiler understands -pipe],
+           tcl_cv_cc_pipe, [
+           hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
+           AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no)
+           CFLAGS=$hold_cflags])
+       if test $tcl_cv_cc_pipe = yes; then
+           CFLAGS="$CFLAGS -pipe"
+       fi
+    fi
+
+    #--------------------------------------------------------------------
+    # Common compiler flag setup
+    #--------------------------------------------------------------------
+
+    AC_C_BIGENDIAN
+    if test "${TEA_PLATFORM}" = "unix" ; then
+       TEA_TCL_LINK_LIBS
+       TEA_MISSING_POSIX_HEADERS
+       # Let the user call this, because if it triggers, they will
+       # need a compat/strtod.c that is correct.  Users can also
+       # use Tcl_GetDouble(FromObj) instead.
+       #TEA_BUGGY_STRTOD
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_MAKE_LIB --
+#
+#      Generate a line that can be used to build a shared/unshared library
+#      in a platform independent manner.
+#
+# Arguments:
+#      none
+#
+#      Requires:
+#
+# Results:
+#
+#      Defines the following vars:
+#      CFLAGS -        Done late here to note disturb other AC macros
+#       MAKE_LIB -      Command to execute to build the Tcl library;
+#                       differs depending on whether or not Tcl is being
+#                       compiled as a shared library.
+#      MAKE_SHARED_LIB Makefile rule for building a shared library
+#      MAKE_STATIC_LIB Makefile rule for building a static library
+#      MAKE_STUB_LIB   Makefile rule for building a stub library
+#      VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL
+#      VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_MAKE_LIB], [
+    if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then
+       MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)"
+       MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)"
+       AC_EGREP_CPP([manifest needed], [
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+print("manifest needed")
+#endif
+       ], [
+       # Could do a CHECK_PROG for mt, but should always be with MSVC8+
+       VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi"
+       VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi"
+       MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}"
+       TEA_ADD_CLEANFILES([*.manifest])
+       ])
+       MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)"
+    else
+       MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)"
+       MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}"
+       MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)"
+    fi
+
+    if test "${SHARED_BUILD}" = "1" ; then
+       MAKE_LIB="${MAKE_SHARED_LIB} "
+    else
+       MAKE_LIB="${MAKE_STATIC_LIB} "
+    fi
+
+    #--------------------------------------------------------------------
+    # Shared libraries and static libraries have different names.
+    # Use the double eval to make sure any variables in the suffix is
+    # substituted. (@@@ Might not be necessary anymore)
+    #--------------------------------------------------------------------
+
+    if test "${TEA_PLATFORM}" = "windows" ; then
+       if test "${SHARED_BUILD}" = "1" ; then
+           # We force the unresolved linking of symbols that are really in
+           # the private libraries of Tcl and Tk.
+           if test x"${TK_BIN_DIR}" != x ; then
+               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\""
+           fi
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\""
+           if test "$GCC" = "yes"; then
+               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc"
+           fi
+           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
+       else
+           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
+           if test "$GCC" = "yes"; then
+               PKG_LIB_FILE=lib${PKG_LIB_FILE}
+           fi
+       fi
+       # Some packages build their own stubs libraries
+       eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
+       if test "$GCC" = "yes"; then
+           PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE}
+       fi
+       # These aren't needed on Windows (either MSVC or gcc)
+       RANLIB=:
+       RANLIB_STUB=:
+    else
+       RANLIB_STUB="${RANLIB}"
+       if test "${SHARED_BUILD}" = "1" ; then
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}"
+           if test x"${TK_BIN_DIR}" != x ; then
+               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}"
+           fi
+           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
+           RANLIB=:
+       else
+           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
+       fi
+       # Some packages build their own stubs libraries
+       eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
+    fi
+
+    # These are escaped so that only CFLAGS is picked up at configure time.
+    # The other values will be substituted at make time.
+    CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}"
+    if test "${SHARED_BUILD}" = "1" ; then
+       CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}"
+    fi
+
+    AC_SUBST(MAKE_LIB)
+    AC_SUBST(MAKE_SHARED_LIB)
+    AC_SUBST(MAKE_STATIC_LIB)
+    AC_SUBST(MAKE_STUB_LIB)
+    AC_SUBST(RANLIB_STUB)
+    AC_SUBST(VC_MANIFEST_EMBED_DLL)
+    AC_SUBST(VC_MANIFEST_EMBED_EXE)
+])
+
+#------------------------------------------------------------------------
+# TEA_LIB_SPEC --
+#
+#      Compute the name of an existing object library located in libdir
+#      from the given base name and produce the appropriate linker flags.
+#
+# Arguments:
+#      basename        The base name of the library without version
+#                      numbers, extensions, or "lib" prefixes.
+#      extra_dir       Extra directory in which to search for the
+#                      library.  This location is used first, then
+#                      $prefix/$exec-prefix, then some defaults.
+#
+# Requires:
+#      TEA_INIT and TEA_PREFIX must be called first.
+#
+# Results:
+#
+#      Defines the following vars:
+#              ${basename}_LIB_NAME    The computed library name.
+#              ${basename}_LIB_SPEC    The computed linker flags.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LIB_SPEC], [
+    AC_MSG_CHECKING([for $1 library])
+
+    # Look in exec-prefix for the library (defined by TEA_PREFIX).
+
+    tea_lib_name_dir="${exec_prefix}/lib"
+
+    # Or in a user-specified location.
+
+    if test x"$2" != x ; then
+       tea_extra_lib_dir=$2
+    else
+       tea_extra_lib_dir=NONE
+    fi
+
+    for i in \
+           `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do
+       if test -f "$i" ; then
+           tea_lib_name_dir=`dirname $i`
+           $1_LIB_NAME=`basename $i`
+           $1_LIB_PATH_NAME=$i
+           break
+       fi
+    done
+
+    if test "${TEA_PLATFORM}" = "windows"; then
+       $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\"
+    else
+       # Strip off the leading "lib" and trailing ".a" or ".so"
+
+       tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'`
+       $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}"
+    fi
+
+    if test "x${$1_LIB_NAME}" = x ; then
+       AC_MSG_ERROR([not found])
+    else
+       AC_MSG_RESULT([${$1_LIB_SPEC}])
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_PRIVATE_TCL_HEADERS --
+#
+#      Locate the private Tcl include files
+#
+# Arguments:
+#
+#      Requires:
+#              TCL_SRC_DIR     Assumes that TEA_LOAD_TCLCONFIG has
+#                              already been called.
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TCL_TOP_DIR_NATIVE
+#              TCL_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [
+    # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh}
+    AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS])
+    AC_MSG_CHECKING([for Tcl private include files])
+
+    TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}`
+    TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\"
+
+    # Check to see if tcl<Plat>Port.h isn't already with the public headers
+    # Don't look for tclInt.h because that resides with tcl.h in the core
+    # sources, but the <plat>Port headers are in a different directory
+    if test "${TEA_PLATFORM}" = "windows" -a \
+       -f "${ac_cv_c_tclh}/tclWinPort.h"; then
+       result="private headers found with public headers"
+    elif test "${TEA_PLATFORM}" = "unix" -a \
+       -f "${ac_cv_c_tclh}/tclUnixPort.h"; then
+       result="private headers found with public headers"
+    else
+       TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\"
+       if test "${TEA_PLATFORM}" = "windows"; then
+           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\"
+       else
+           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\"
+       fi
+       # Overwrite the previous TCL_INCLUDES as this should capture both
+       # public and private headers in the same set.
+       # We want to ensure these are substituted so as not to require
+       # any *_NATIVE vars be defined in the Makefile
+       TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}"
+       if test "`uname -s`" = "Darwin"; then
+            # If Tcl was built as a framework, attempt to use
+            # the framework's Headers and PrivateHeaders directories
+            case ${TCL_DEFS} in
+               *TCL_FRAMEWORK*)
+                   if test -d "${TCL_BIN_DIR}/Headers" -a \
+                           -d "${TCL_BIN_DIR}/PrivateHeaders"; then
+                       TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"
+                   else
+                       TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
+                   fi
+                   ;;
+           esac
+           result="Using ${TCL_INCLUDES}"
+       else
+           if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then
+               AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}])
+           fi
+           result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}"
+       fi
+    fi
+
+    AC_SUBST(TCL_TOP_DIR_NATIVE)
+
+    AC_SUBST(TCL_INCLUDES)
+    AC_MSG_RESULT([${result}])
+])
+
+#------------------------------------------------------------------------
+# TEA_PUBLIC_TCL_HEADERS --
+#
+#      Locate the installed public Tcl header files
+#
+# Arguments:
+#      None.
+#
+# Requires:
+#      CYGPATH must be set
+#
+# Results:
+#
+#      Adds a --with-tclinclude switch to configure.
+#      Result is cached.
+#
+#      Substitutes the following vars:
+#              TCL_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [
+    AC_MSG_CHECKING([for Tcl public headers])
+
+    AC_ARG_WITH(tclinclude, [  --with-tclinclude       directory containing the public Tcl header files], with_tclinclude=${withval})
+
+    AC_CACHE_VAL(ac_cv_c_tclh, [
+       # Use the value from --with-tclinclude, if it was given
+
+       if test x"${with_tclinclude}" != x ; then
+           if test -f "${with_tclinclude}/tcl.h" ; then
+               ac_cv_c_tclh=${with_tclinclude}
+           else
+               AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h])
+           fi
+       else
+           list=""
+           if test "`uname -s`" = "Darwin"; then
+               # If Tcl was built as a framework, attempt to use
+               # the framework's Headers directory
+               case ${TCL_DEFS} in
+                   *TCL_FRAMEWORK*)
+                       list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`"
+                       ;;
+               esac
+           fi
+
+           # Look in the source dir only if Tcl is not installed,
+           # and in that situation, look there before installed locations.
+           if test -f "${TCL_BIN_DIR}/Makefile" ; then
+               list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`"
+           fi
+
+           # Check order: pkg --prefix location, Tcl's --prefix location,
+           # relative to directory of tclConfig.sh.
+
+           eval "temp_includedir=${includedir}"
+           list="$list \
+               `ls -d ${temp_includedir}        2>/dev/null` \
+               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
+               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
+           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
+               list="$list /usr/local/include /usr/include"
+               if test x"${TCL_INCLUDE_SPEC}" != x ; then
+                   d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'`
+                   list="$list `ls -d ${d} 2>/dev/null`"
+               fi
+           fi
+           for i in $list ; do
+               if test -f "$i/tcl.h" ; then
+                   ac_cv_c_tclh=$i
+                   break
+               fi
+           done
+       fi
+    ])
+
+    # Print a message based on how we determined the include path
+
+    if test x"${ac_cv_c_tclh}" = x ; then
+       AC_MSG_ERROR([tcl.h not found.  Please specify its location with --with-tclinclude])
+    else
+       AC_MSG_RESULT([${ac_cv_c_tclh}])
+    fi
+
+    # Convert to a native path and substitute into the output files.
+
+    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
+
+    TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
+
+    AC_SUBST(TCL_INCLUDES)
+])
+
+#------------------------------------------------------------------------
+# TEA_PRIVATE_TK_HEADERS --
+#
+#      Locate the private Tk include files
+#
+# Arguments:
+#
+#      Requires:
+#              TK_SRC_DIR      Assumes that TEA_LOAD_TKCONFIG has
+#                               already been called.
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TK_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [
+    # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh}
+    AC_REQUIRE([TEA_PUBLIC_TK_HEADERS])
+    AC_MSG_CHECKING([for Tk private include files])
+
+    TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}`
+    TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\"
+
+    # Check to see if tk<Plat>Port.h isn't already with the public headers
+    # Don't look for tkInt.h because that resides with tk.h in the core
+    # sources, but the <plat>Port headers are in a different directory
+    if test "${TEA_PLATFORM}" = "windows" -a \
+       -f "${ac_cv_c_tkh}/tkWinPort.h"; then
+       result="private headers found with public headers"
+    elif test "${TEA_PLATFORM}" = "unix" -a \
+       -f "${ac_cv_c_tkh}/tkUnixPort.h"; then
+       result="private headers found with public headers"
+    else
+       TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\"
+       TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\"
+       if test "${TEA_PLATFORM}" = "windows"; then
+           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\"
+       else
+           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\"
+       fi
+       # Overwrite the previous TK_INCLUDES as this should capture both
+       # public and private headers in the same set.
+       # We want to ensure these are substituted so as not to require
+       # any *_NATIVE vars be defined in the Makefile
+       TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}"
+       # Detect and add ttk subdir
+       if test -d "${TK_SRC_DIR}/generic/ttk"; then
+          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\""
+       fi
+       if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
+          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\""
+       fi
+       if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then
+          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\""
+       fi
+       if test "`uname -s`" = "Darwin"; then
+           # If Tk was built as a framework, attempt to use
+           # the framework's Headers and PrivateHeaders directories
+           case ${TK_DEFS} in
+               *TK_FRAMEWORK*)
+                       if test -d "${TK_BIN_DIR}/Headers" -a \
+                               -d "${TK_BIN_DIR}/PrivateHeaders"; then
+                           TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"
+                       else
+                           TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
+                       fi
+                       ;;
+           esac
+           result="Using ${TK_INCLUDES}"
+       else
+           if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then
+              AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}])
+           fi
+           result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}"
+       fi
+    fi
+
+    AC_SUBST(TK_TOP_DIR_NATIVE)
+    AC_SUBST(TK_XLIB_DIR_NATIVE)
+
+    AC_SUBST(TK_INCLUDES)
+    AC_MSG_RESULT([${result}])
+])
+
+#------------------------------------------------------------------------
+# TEA_PUBLIC_TK_HEADERS --
+#
+#      Locate the installed public Tk header files
+#
+# Arguments:
+#      None.
+#
+# Requires:
+#      CYGPATH must be set
+#
+# Results:
+#
+#      Adds a --with-tkinclude switch to configure.
+#      Result is cached.
+#
+#      Substitutes the following vars:
+#              TK_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [
+    AC_MSG_CHECKING([for Tk public headers])
+
+    AC_ARG_WITH(tkinclude, [  --with-tkinclude        directory containing the public Tk header files], with_tkinclude=${withval})
+
+    AC_CACHE_VAL(ac_cv_c_tkh, [
+       # Use the value from --with-tkinclude, if it was given
+
+       if test x"${with_tkinclude}" != x ; then
+           if test -f "${with_tkinclude}/tk.h" ; then
+               ac_cv_c_tkh=${with_tkinclude}
+           else
+               AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h])
+           fi
+       else
+           list=""
+           if test "`uname -s`" = "Darwin"; then
+               # If Tk was built as a framework, attempt to use
+               # the framework's Headers directory.
+               case ${TK_DEFS} in
+                   *TK_FRAMEWORK*)
+                       list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`"
+                       ;;
+               esac
+           fi
+
+           # Look in the source dir only if Tk is not installed,
+           # and in that situation, look there before installed locations.
+           if test -f "${TK_BIN_DIR}/Makefile" ; then
+               list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`"
+           fi
+
+           # Check order: pkg --prefix location, Tk's --prefix location,
+           # relative to directory of tkConfig.sh, Tcl's --prefix location,
+           # relative to directory of tclConfig.sh.
+
+           eval "temp_includedir=${includedir}"
+           list="$list \
+               `ls -d ${temp_includedir}        2>/dev/null` \
+               `ls -d ${TK_PREFIX}/include      2>/dev/null` \
+               `ls -d ${TK_BIN_DIR}/../include  2>/dev/null` \
+               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
+               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
+           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
+               list="$list /usr/local/include /usr/include"
+               if test x"${TK_INCLUDE_SPEC}" != x ; then
+                   d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'`
+                   list="$list `ls -d ${d} 2>/dev/null`"
+               fi
+           fi
+           for i in $list ; do
+               if test -f "$i/tk.h" ; then
+                   ac_cv_c_tkh=$i
+                   break
+               fi
+           done
+       fi
+    ])
+
+    # Print a message based on how we determined the include path
+
+    if test x"${ac_cv_c_tkh}" = x ; then
+       AC_MSG_ERROR([tk.h not found.  Please specify its location with --with-tkinclude])
+    else
+       AC_MSG_RESULT([${ac_cv_c_tkh}])
+    fi
+
+    # Convert to a native path and substitute into the output files.
+
+    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}`
+
+    TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
+
+    AC_SUBST(TK_INCLUDES)
+
+    if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
+       # On Windows and Aqua, we need the X compat headers
+       AC_MSG_CHECKING([for X11 header files])
+       if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then
+           INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`"
+           TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
+           AC_SUBST(TK_XINCLUDES)
+       fi
+       AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}])
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_PATH_CONFIG --
+#
+#      Locate the ${1}Config.sh file and perform a sanity check on
+#      the ${1} compile flags.  These are used by packages like
+#      [incr Tk] that load *Config.sh files from more than Tcl and Tk.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-$1=...
+#
+#      Defines the following vars:
+#              $1_BIN_DIR      Full path to the directory containing
+#                              the $1Config.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_CONFIG], [
+    #
+    # Ok, lets find the $1 configuration
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-$1
+    #
+
+    if test x"${no_$1}" = x ; then
+       # we reset no_$1 in case something fails here
+       no_$1=true
+       AC_ARG_WITH($1, [  --with-$1              directory containing $1 configuration ($1Config.sh)], with_$1config=${withval})
+       AC_MSG_CHECKING([for $1 configuration])
+       AC_CACHE_VAL(ac_cv_c_$1config,[
+
+           # First check to see if --with-$1 was specified.
+           if test x"${with_$1config}" != x ; then
+               case ${with_$1config} in
+                   */$1Config.sh )
+                       if test -f ${with_$1config}; then
+                           AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself])
+                           with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'`
+                       fi;;
+               esac
+               if test -f "${with_$1config}/$1Config.sh" ; then
+                   ac_cv_c_$1config=`(cd ${with_$1config}; pwd)`
+               else
+                   AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh])
+               fi
+           fi
+
+           # then check for a private $1 installation
+           if test x"${ac_cv_c_$1config}" = x ; then
+               for i in \
+                       ../$1 \
+                       `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ../../$1 \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ../../../$1 \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ${srcdir}/../$1 \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ; do
+                   if test -f "$i/$1Config.sh" ; then
+                       ac_cv_c_$1config=`(cd $i; pwd)`
+                       break
+                   fi
+                   if test -f "$i/unix/$1Config.sh" ; then
+                       ac_cv_c_$1config=`(cd $i/unix; pwd)`
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few common install locations
+           if test x"${ac_cv_c_$1config}" = x ; then
+               for i in `ls -d ${libdir} 2>/dev/null` \
+                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
+                       `ls -d ${prefix}/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/lib 2>/dev/null` \
+                       `ls -d /usr/lib64 2>/dev/null` \
+                       ; do
+                   if test -f "$i/$1Config.sh" ; then
+                       ac_cv_c_$1config=`(cd $i; pwd)`
+                       break
+                   fi
+               done
+           fi
+       ])
+
+       if test x"${ac_cv_c_$1config}" = x ; then
+           $1_BIN_DIR="# no $1 configs found"
+           AC_MSG_WARN([Cannot find $1 configuration definitions])
+           exit 0
+       else
+           no_$1=
+           $1_BIN_DIR=${ac_cv_c_$1config}
+           AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_CONFIG --
+#
+#      Load the $1Config.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              $1_BIN_DIR
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              $1_SRC_DIR
+#              $1_LIB_FILE
+#              $1_LIB_SPEC
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LOAD_CONFIG], [
+    AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh])
+
+    if test -f "${$1_BIN_DIR}/$1Config.sh" ; then
+        AC_MSG_RESULT([loading])
+       . "${$1_BIN_DIR}/$1Config.sh"
+    else
+        AC_MSG_RESULT([file not found])
+    fi
+
+    #
+    # If the $1_BIN_DIR is the build directory (not the install directory),
+    # then set the common variable name to the value of the build variables.
+    # For example, the variable $1_LIB_SPEC will be set to the value
+    # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC
+    # instead of $1_BUILD_LIB_SPEC since it will work with both an
+    # installed and uninstalled version of Tcl.
+    #
+
+    if test -f "${$1_BIN_DIR}/Makefile" ; then
+       AC_MSG_WARN([Found Makefile - using build library specs for $1])
+        $1_LIB_SPEC=${$1_BUILD_LIB_SPEC}
+        $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC}
+        $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH}
+        $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC}
+        $1_LIBRARY_PATH=${$1_LIBRARY_PATH}
+    fi
+
+    AC_SUBST($1_VERSION)
+    AC_SUBST($1_BIN_DIR)
+    AC_SUBST($1_SRC_DIR)
+
+    AC_SUBST($1_LIB_FILE)
+    AC_SUBST($1_LIB_SPEC)
+
+    AC_SUBST($1_STUB_LIB_FILE)
+    AC_SUBST($1_STUB_LIB_SPEC)
+    AC_SUBST($1_STUB_LIB_PATH)
+
+    # Allow the caller to prevent this auto-check by specifying any 2nd arg
+    AS_IF([test "x$2" = x], [
+       # Check both upper and lower-case variants
+       # If a dev wanted non-stubs libs, this function could take an option
+       # to not use _STUB in the paths below
+       AS_IF([test "x${$1_STUB_LIB_SPEC}" = x],
+           [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)],
+           [TEA_LOAD_CONFIG_LIB($1_STUB)])
+    ])
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_CONFIG_LIB --
+#
+#      Helper function to load correct library from another extension's
+#      ${PACKAGE}Config.sh.
+#
+# Results:
+#      Adds to LIBS the appropriate extension library
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_LOAD_CONFIG_LIB], [
+    AC_MSG_CHECKING([For $1 library for LIBS])
+    # This simplifies the use of stub libraries by automatically adding
+    # the stub lib to your path.  Normally this would add to SHLIB_LD_LIBS,
+    # but this is called before CONFIG_CFLAGS.  More importantly, this adds
+    # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD.
+    if test "x${$1_LIB_SPEC}" != "x" ; then
+       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then
+           TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"])
+           AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}])
+       else
+           TEA_ADD_LIBS([${$1_LIB_SPEC}])
+           AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}])
+       fi
+    else
+       AC_MSG_RESULT([file not found])
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_EXPORT_CONFIG --
+#
+#      Define the data to insert into the ${PACKAGE}Config.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              $1
+#
+# Results:
+#      Substitutes the following vars:
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_EXPORT_CONFIG], [
+    #--------------------------------------------------------------------
+    # These are for $1Config.sh
+    #--------------------------------------------------------------------
+
+    # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib)
+    eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}"
+    if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
+       eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}"
+       eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}"
+    else
+       eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
+       eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
+    fi
+    $1_BUILD_LIB_SPEC="-L`$CYGPATH $(pwd)` ${$1_LIB_FLAG}"
+    $1_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${$1_LIB_FLAG}"
+    $1_BUILD_STUB_LIB_SPEC="-L`$CYGPATH $(pwd)` [$]{$1_STUB_LIB_FLAG}"
+    $1_STUB_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` [$]{$1_STUB_LIB_FLAG}"
+    $1_BUILD_STUB_LIB_PATH="`$CYGPATH $(pwd)`/[$]{PKG_STUB_LIB_FILE}"
+    $1_STUB_LIB_PATH="`$CYGPATH ${pkglibdir}`/[$]{PKG_STUB_LIB_FILE}"
+
+    AC_SUBST($1_BUILD_LIB_SPEC)
+    AC_SUBST($1_LIB_SPEC)
+    AC_SUBST($1_BUILD_STUB_LIB_SPEC)
+    AC_SUBST($1_STUB_LIB_SPEC)
+    AC_SUBST($1_BUILD_STUB_LIB_PATH)
+    AC_SUBST($1_STUB_LIB_PATH)
+
+    AC_SUBST(MAJOR_VERSION)
+    AC_SUBST(MINOR_VERSION)
+    AC_SUBST(PATCHLEVEL)
+])
+
+
+#------------------------------------------------------------------------
+# TEA_PATH_CELIB --
+#
+#      Locate Keuchel's celib emulation layer for targeting Win/CE
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-celib=...
+#
+#      Defines the following vars:
+#              CELIB_DIR       Full path to the directory containing
+#                              the include and platform lib files
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_CELIB], [
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-celib
+
+    if test x"${no_celib}" = x ; then
+       # we reset no_celib in case something fails here
+       no_celib=true
+       AC_ARG_WITH(celib,[  --with-celib=DIR        use Windows/CE support library from DIR], with_celibconfig=${withval})
+       AC_MSG_CHECKING([for Windows/CE celib directory])
+       AC_CACHE_VAL(ac_cv_c_celibconfig,[
+           # First check to see if --with-celibconfig was specified.
+           if test x"${with_celibconfig}" != x ; then
+               if test -d "${with_celibconfig}/inc" ; then
+                   ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)`
+               else
+                   AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory])
+               fi
+           fi
+
+           # then check for a celib library
+           if test x"${ac_cv_c_celibconfig}" = x ; then
+               for i in \
+                       ../celib-palm-3.0 \
+                       ../celib \
+                       ../../celib-palm-3.0 \
+                       ../../celib \
+                       `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \
+                       ${srcdir}/../celib-palm-3.0 \
+                       ${srcdir}/../celib \
+                       `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \
+                       ; do
+                   if test -d "$i/inc" ; then
+                       ac_cv_c_celibconfig=`(cd $i; pwd)`
+                       break
+                   fi
+               done
+           fi
+       ])
+       if test x"${ac_cv_c_celibconfig}" = x ; then
+           AC_MSG_ERROR([Cannot find celib support library directory])
+       else
+           no_celib=
+           CELIB_DIR=${ac_cv_c_celibconfig}
+           CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
+           AC_MSG_RESULT([found $CELIB_DIR])
+       fi
+    fi
+])
+
+###
+# Tip 430 - ZipFS Modifications
+###
+#------------------------------------------------------------------------
+# SC_ZIPFS_SUPPORT
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
+#              TCL_ZIPFS_FLAG
+#              ZIP_PROG
+#------------------------------------------------------------------------
+
+#------------------------------------------------------------------------
+# SC_PROG_ZIP
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              ZIP_PROG
+#       ZIP_PROG_OPTIONS
+#       ZIP_PROG_VFSSEARCH
+#       ZIP_INSTALL_OBJS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ZIPFS_SUPPORT], [
+    AC_MSG_CHECKING([for zipfs support])
+    ZIP_PROG=""
+    ZIP_PROG_OPTIONS=""
+    ZIP_PROG_VFSSEARCH=""
+    INSTALL_MSGS=""
+    # If our native tclsh processes the "install" command line option
+    # we can use it to mint zip files
+    AS_IF([$TCLSH_PROG install],[
+      ZIP_PROG=${TCLSH_PROG}
+      ZIP_PROG_OPTIONS="install mkzip"
+      ZIP_PROG_VFSSEARCH="."
+      AC_MSG_RESULT([Can use Native Tclsh for Zip encoding])
+    ])
+    if test "x$ZIP_PROG" = "x" ; then
+        AC_CACHE_VAL(ac_cv_path_zip, [
+        search_path=`echo ${PATH} | sed -e 's/:/ /g'`
+        for dir in $search_path ; do
+            for j in `ls -r $dir/zip 2> /dev/null` \
+                `ls -r $dir/zip 2> /dev/null` ; do
+            if test x"$ac_cv_path_zip" = x ; then
+                if test -f "$j" ; then
+                ac_cv_path_zip=$j
+                break
+                fi
+            fi
+            done
+        done
+        ])
+        if test -f "$ac_cv_path_zip" ; then
+            ZIP_PROG="$ac_cv_path_zip "
+            AC_MSG_RESULT([$ZIP_PROG])
+            ZIP_PROG_OPTIONS="-rq"
+            ZIP_PROG_VFSSEARCH="."
+            AC_MSG_RESULT([Found INFO Zip in environment])
+            # Use standard arguments for zip
+        fi
+    fi
+    if test "x$ZIP_PROG" = "x" ; then
+           # It is not an error if an installed version of Zip can't be located.
+        ZIP_PROG=""
+        ZIP_PROG_OPTIONS=""
+        ZIP_PROG_VFSSEARCH=""
+        TCL_ZIPFS_SUPPORT=0
+        TCL_ZIPFS_FLAG=
+    else
+        # ZIPFS Support
+       eval "TCL_ZIP_FILE=\"${TCL_ZIP_FILE}\""
+       if test ${TCL_ZIP_FILE} = "" ; then
+          TCL_ZIPFS_SUPPORT=0
+          TCL_ZIPFS_FLAG=
+          INSTALL_LIBRARIES=install-libraries
+          INSTALL_MSGS=install-msgs
+       else
+           if test ${SHARED_BUILD} = 1 ; then
+              TCL_ZIPFS_SUPPORT=1
+              INSTALL_LIBRARIES=install-libraries-zipfs-shared
+           else
+              TCL_ZIPFS_SUPPORT=2
+              INSTALL_LIBRARIES=install-libraries-zipfs-static
+           fi
+          TCL_ZIPFS_FLAG=-DTCL_ZIPFS_SUPPORT
+       fi
+    fi
+
+    AC_SUBST(TCL_ZIP_FILE)
+    AC_SUBST(TCL_ZIPFS_SUPPORT)
+    AC_SUBST(TCL_ZIPFS_FLAG)
+    AC_SUBST(ZIP_PROG)
+    AC_SUBST(ZIP_PROG_OPTIONS)
+    AC_SUBST(ZIP_PROG_VFSSEARCH)
+    AC_SUBST(INSTALL_LIBRARIES)
+    AC_SUBST(INSTALL_MSGS)
+])
+
+# Local Variables:
+# mode: autoconf
+# End:
diff --git a/pkgs/tdbcpostgres1.0.6/win/makefile.vc b/pkgs/tdbcpostgres1.0.6/win/makefile.vc
new file mode 100644 (file)
index 0000000..05ec4e7
--- /dev/null
@@ -0,0 +1,111 @@
+#------------------------------------------------------------- -*- makefile -*-
+#
+# Makefile for TBDC Postgres interface
+#
+# Basic build, test and install
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir TCLDIR=c:\path\to\tcl\source
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir TCLDIR=c:\path\to\tcl\source test
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir TCLDIR=c:\path\to\tcl\source install
+#
+# For other build options (debug, static etc.)
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+# 
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+#------------------------------------------------------------------------------
+
+PROJECT = tdbcpostgres
+# Tcl 8.6 etc. compile with /DUNICODE. TDBC pre-nmake reform compiled
+# without -DUNICODE. Keep that behaviour.
+USE_WIDECHAR_API  = 0
+
+!include "rules-ext.vc"
+
+# nmakehelp -V <file> <tag> will search the file for tag, skips until a
+#      number and returns all character until a character not in [0-9.ab]
+#      is read.
+!if [echo REM = This file is generated from Makefile.vc > versions.vc]
+!endif
+!if [echo TCL_VERSION_REQ = \>> versions.vc] \
+   && [nmakehlp -V ..\configure.ac TCL_VERSION_REQ >> versions.vc]
+!endif
+!include "versions.vc"
+
+PRJ_OBJS = \
+       $(TMP_DIR)\tdbcpostgres.obj \
+       $(TMP_DIR)\pqStubInit.obj
+
+# Uncomment the following line if you want to build and install stubs
+# PRJ_STUBOBJS = $(TMP_DIR)\pqStubInit.obj
+
+PRJ_HEADERS = \
+       $(GENERICDIR)\fakepq.h \
+       $(GENERICDIR)\pqStubs.h
+
+# Locate TDBC headers and libraries.
+# In principle, we don't need the TDBC source directory, and an installed
+# TDBC should suffice. But that needs additional machinery not implemented
+# yet.
+!if [echo TDBC_DIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tdbcInt.h >> nmakehlp.out]
+!error Could not locate TDBC source directory.
+!endif
+!include nmakehlp.out
+
+# Get the TDBC version from its configure.ac
+!if [echo TDBC_DOTVERSION = \> versions.vc] \
+   && [nmakehlp -V "$(TDBC_DIR)\configure.ac" tdbc >> versions.vc]
+!error Could not retrieve TDBC version.
+!endif
+!include versions.vc
+
+TDBC_VERSION     = $(TDBC_DOTVERSION:.=)
+TDBC_GENERIC_DIR = $(TDBC_DIR)\generic
+TDBCSTUBLIBNAME         = tdbcstub$(TDBC_VERSION).lib
+TDBCSTUBLIB     = $(TDBC_DIR)\win\$(BUILDDIRTOP)\$(TDBCSTUBLIBNAME)
+TDBC_LIB_FILE   = tdbc$(TDBC_VERSION).dll
+TDBC_BIN_DIR     = $(TDBC_DIR)/win/$(BUILDDIRTOP)
+
+PRJ_INCLUDES   = -I"$(TDBC_GENERIC_DIR)"
+
+!if !$(STATIC_BUILD)
+PRJ_LIBS  = $(TDBCSTUBLIB)
+!endif
+
+# Disable standard test target because we have a custom one
+DISABLE_TARGET_test = 1
+!include "$(_RULESDIR)\targets.vc"
+
+# Additional default actions for install
+install: default-install-docs-n
+
+# The TIP 477 generation of pkgIndex.tcl from pkgIndex.tcl.in does not include
+# all replacements below so define our own target.
+pkgindex:   $(OUT_DIR)\pkgIndex.tcl
+$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in
+       @nmakehlp -s << $** > $@
+@PACKAGE_NAME@        $(PROJECT)
+@PACKAGE_VERSION@     $(DOTVERSION)
+@TCL_VERSION_REQ@     $(TCL_VERSION_REQ)
+@PKG_LIB_FILE@        $(PRJLIBNAME)
+<<
+
+test: setup $(PROJECT)
+        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
+        @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @set TDBC_LIBRARY=$(LIBDIR:\=/)
+       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)
+!if $(TCLINSTALL)
+        @set PATH=$(_TCLDIR)\bin;$(PATH)
+       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS)
+!else
+        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
+       $(DEBUGGER) $(TCLSH) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) \
+               -load "package ifneeded tdbc::postgres $(DOTVERSION) \
+                       {source {$(LIBDIR:\=/)/tdbcpostgres.tcl};load {$(PRJLIB:\=/)} $(PROJECT)};\
+               package ifneeded tdbc $(TDBC_DOTVERSION) \
+                       {source {$(TDBC_BIN_DIR:\=/)/tdbc.tcl};load {$(TDBC_BIN_DIR:\=/)/$(TDBC_LIB_FILE)} tdbc}"
+!endif
+
diff --git a/pkgs/tdbcpostgres1.0.6/win/nmakehlp.c b/pkgs/tdbcpostgres1.0.6/win/nmakehlp.c
new file mode 100644 (file)
index 0000000..025bb99
--- /dev/null
@@ -0,0 +1,814 @@
+/*
+ * ----------------------------------------------------------------------------
+ * nmakehlp.c --
+ *
+ *     This is used to fix limitations within nmake and the environment.
+ *
+ * Copyright (c) 2002 by David Gravereaux.
+ * Copyright (c) 2006 by Pat Thoyts
+ *
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ * ----------------------------------------------------------------------------
+ */
+
+#define _CRT_SECURE_NO_DEPRECATE
+#include <windows.h>
+#define NO_SHLWAPI_GDI
+#define NO_SHLWAPI_STREAM
+#define NO_SHLWAPI_REG
+#include <shlwapi.h>
+#pragma comment (lib, "user32.lib")
+#pragma comment (lib, "kernel32.lib")
+#pragma comment (lib, "shlwapi.lib")
+#include <stdio.h>
+#include <math.h>
+
+/*
+ * This library is required for x64 builds with _some_ versions of MSVC
+ */
+#if defined(_M_IA64) || defined(_M_AMD64)
+#if _MSC_VER >= 1400 && _MSC_VER < 1500
+#pragma comment(lib, "bufferoverflowU")
+#endif
+#endif
+
+/* ISO hack for dumb VC++ */
+#ifdef _MSC_VER
+#define   snprintf     _snprintf
+#endif
+
+
+/* protos */
+
+static int CheckForCompilerFeature(const char *option);
+static int CheckForLinkerFeature(const char **options, int count);
+static int IsIn(const char *string, const char *substring);
+static int SubstituteFile(const char *substs, const char *filename);
+static int QualifyPath(const char *path);
+static int LocateDependency(const char *keyfile);
+static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
+static DWORD WINAPI ReadFromPipe(LPVOID args);
+
+/* globals */
+
+#define CHUNK  25
+#define STATICBUFFERSIZE    1000
+typedef struct {
+    HANDLE pipe;
+    char buffer[STATICBUFFERSIZE];
+} pipeinfo;
+
+pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'};
+pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'};
+\f
+/*
+ * exitcodes: 0 == no, 1 == yes, 2 == error
+ */
+
+int
+main(
+    int argc,
+    char *argv[])
+{
+    char msg[300];
+    DWORD dwWritten;
+    int chars;
+    char *s;
+
+    /*
+     * Make sure children (cl.exe and link.exe) are kept quiet.
+     */
+
+    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
+
+    /*
+     * Make sure the compiler and linker aren't effected by the outside world.
+     */
+
+    SetEnvironmentVariable("CL", "");
+    SetEnvironmentVariable("LINK", "");
+
+    if (argc > 1 && *argv[1] == '-') {
+       switch (*(argv[1]+1)) {
+       case 'c':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -c <compiler option>\n"
+                       "Tests for whether cl.exe supports an option\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return CheckForCompilerFeature(argv[2]);
+       case 'l':
+           if (argc < 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -l <linker option> ?<mandatory option> ...?\n"
+                       "Tests for whether link.exe supports an option\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return CheckForLinkerFeature(&argv[2], argc-2);
+       case 'f':
+           if (argc == 2) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -f <string> <substring>\n"
+                       "Find a substring within another\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           } else if (argc == 3) {
+               /*
+                * If the string is blank, there is no match.
+                */
+
+               return 0;
+           } else {
+               return IsIn(argv[2], argv[3]);
+           }
+       case 's':
+           if (argc == 2) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -s <substitutions file> <file>\n"
+                       "Perform a set of string map type substutitions on a file\n"
+                       "exitcodes: 0\n",
+                       argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return SubstituteFile(argv[2], argv[3]);
+       case 'V':
+           if (argc != 4) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -V filename matchstring\n"
+                   "Extract a version from a file:\n"
+                   "eg: pkgIndex.tcl \"package ifneeded http\"",
+                   argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 0;
+           }
+           s = GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0');
+           if (s && *s) {
+               printf("%s\n", s);
+               return 0;
+           } else
+               return 1; /* Version not found. Return non-0 exit code */
+
+       case 'Q':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -Q path\n"
+                   "Emit the fully qualified path\n"
+                   "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return QualifyPath(argv[2]);
+
+       case 'L':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -L keypath\n"
+                   "Emit the fully qualified path of directory containing keypath\n"
+                   "exitcodes: 0 == success, 1 == not found, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return LocateDependency(argv[2]);
+       }
+    }
+    chars = snprintf(msg, sizeof(msg) - 1,
+           "usage: %s -c|-f|-l|-Q|-s|-V ...\n"
+           "This is a little helper app to equalize shell differences between WinNT and\n"
+           "Win9x and get nmake.exe to accomplish its job.\n",
+           argv[0]);
+    WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
+    return 2;
+}
+\f
+static int
+CheckForCompilerFeature(
+    const char *option)
+{
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;
+    SECURITY_ATTRIBUTES sa;
+    DWORD threadID;
+    char msg[300];
+    BOOL ok;
+    HANDLE hProcess, h, pipeThreads[2];
+    char cmdline[100];
+
+    hProcess = GetCurrentProcess();
+
+    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
+    ZeroMemory(&si, sizeof(STARTUPINFO));
+    si.cb = sizeof(STARTUPINFO);
+    si.dwFlags   = STARTF_USESTDHANDLES;
+    si.hStdInput = INVALID_HANDLE_VALUE;
+
+    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
+    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+    sa.lpSecurityDescriptor = NULL;
+    sa.bInheritHandle = FALSE;
+
+    /*
+     * Create a non-inheritible pipe.
+     */
+
+    CreatePipe(&Out.pipe, &h, &sa, 0);
+
+    /*
+     * Dupe the write side, make it inheritible, and close the original.
+     */
+
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Same as above, but for the error side.
+     */
+
+    CreatePipe(&Err.pipe, &h, &sa, 0);
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Base command line.
+     */
+
+    lstrcpy(cmdline, "cl.exe -nologo -c -TC -Zs -X -Fp.\\_junk.pch ");
+
+    /*
+     * Append our option for testing
+     */
+
+    lstrcat(cmdline, option);
+
+    /*
+     * Filename to compile, which exists, but is nothing and empty.
+     */
+
+    lstrcat(cmdline, " .\\nul");
+
+    ok = CreateProcess(
+           NULL,           /* Module name. */
+           cmdline,        /* Command line. */
+           NULL,           /* Process handle not inheritable. */
+           NULL,           /* Thread handle not inheritable. */
+           TRUE,           /* yes, inherit handles. */
+           DETACHED_PROCESS, /* No console for you. */
+           NULL,           /* Use parent's environment block. */
+           NULL,           /* Use parent's starting directory. */
+           &si,            /* Pointer to STARTUPINFO structure. */
+           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
+
+    if (!ok) {
+       DWORD err = GetLastError();
+       int chars = snprintf(msg, sizeof(msg) - 1,
+               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
+
+       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
+               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
+               (300-chars), 0);
+       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
+       return 2;
+    }
+
+    /*
+     * Close our references to the write handles that have now been inherited.
+     */
+
+    CloseHandle(si.hStdOutput);
+    CloseHandle(si.hStdError);
+
+    WaitForInputIdle(pi.hProcess, 5000);
+    CloseHandle(pi.hThread);
+
+    /*
+     * Start the pipe reader threads.
+     */
+
+    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
+    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
+
+    /*
+     * Block waiting for the process to end.
+     */
+
+    WaitForSingleObject(pi.hProcess, INFINITE);
+    CloseHandle(pi.hProcess);
+
+    /*
+     * Wait for our pipe to get done reading, should it be a little slow.
+     */
+
+    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
+    CloseHandle(pipeThreads[0]);
+    CloseHandle(pipeThreads[1]);
+
+    /*
+     * Look for the commandline warning code in both streams.
+     *  - in MSVC 6 & 7 we get D4002, in MSVC 8 we get D9002.
+     */
+
+    return !(strstr(Out.buffer, "D4002") != NULL
+             || strstr(Err.buffer, "D4002") != NULL
+             || strstr(Out.buffer, "D9002") != NULL
+             || strstr(Err.buffer, "D9002") != NULL
+             || strstr(Out.buffer, "D2021") != NULL
+             || strstr(Err.buffer, "D2021") != NULL);
+}
+\f
+static int
+CheckForLinkerFeature(
+    const char **options,
+    int count)
+{
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;
+    SECURITY_ATTRIBUTES sa;
+    DWORD threadID;
+    char msg[300];
+    BOOL ok;
+    HANDLE hProcess, h, pipeThreads[2];
+    int i;
+    char cmdline[255];
+
+    hProcess = GetCurrentProcess();
+
+    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
+    ZeroMemory(&si, sizeof(STARTUPINFO));
+    si.cb = sizeof(STARTUPINFO);
+    si.dwFlags   = STARTF_USESTDHANDLES;
+    si.hStdInput = INVALID_HANDLE_VALUE;
+
+    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
+    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+    sa.lpSecurityDescriptor = NULL;
+    sa.bInheritHandle = TRUE;
+
+    /*
+     * Create a non-inheritible pipe.
+     */
+
+    CreatePipe(&Out.pipe, &h, &sa, 0);
+
+    /*
+     * Dupe the write side, make it inheritible, and close the original.
+     */
+
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Same as above, but for the error side.
+     */
+
+    CreatePipe(&Err.pipe, &h, &sa, 0);
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Base command line.
+     */
+
+    lstrcpy(cmdline, "link.exe -nologo ");
+
+    /*
+     * Append our option for testing.
+     */
+
+    for (i = 0; i < count; i++) {
+       lstrcat(cmdline, " \"");
+       lstrcat(cmdline, options[i]);
+       lstrcat(cmdline, "\"");
+    }
+
+    ok = CreateProcess(
+           NULL,           /* Module name. */
+           cmdline,        /* Command line. */
+           NULL,           /* Process handle not inheritable. */
+           NULL,           /* Thread handle not inheritable. */
+           TRUE,           /* yes, inherit handles. */
+           DETACHED_PROCESS, /* No console for you. */
+           NULL,           /* Use parent's environment block. */
+           NULL,           /* Use parent's starting directory. */
+           &si,            /* Pointer to STARTUPINFO structure. */
+           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
+
+    if (!ok) {
+       DWORD err = GetLastError();
+       int chars = snprintf(msg, sizeof(msg) - 1,
+               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
+
+       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
+               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
+               (300-chars), 0);
+       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
+       return 2;
+    }
+
+    /*
+     * Close our references to the write handles that have now been inherited.
+     */
+
+    CloseHandle(si.hStdOutput);
+    CloseHandle(si.hStdError);
+
+    WaitForInputIdle(pi.hProcess, 5000);
+    CloseHandle(pi.hThread);
+
+    /*
+     * Start the pipe reader threads.
+     */
+
+    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
+    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
+
+    /*
+     * Block waiting for the process to end.
+     */
+
+    WaitForSingleObject(pi.hProcess, INFINITE);
+    CloseHandle(pi.hProcess);
+
+    /*
+     * Wait for our pipe to get done reading, should it be a little slow.
+     */
+
+    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
+    CloseHandle(pipeThreads[0]);
+    CloseHandle(pipeThreads[1]);
+
+    /*
+     * Look for the commandline warning code in the stderr stream.
+     */
+
+    return !(strstr(Out.buffer, "LNK1117") != NULL ||
+           strstr(Err.buffer, "LNK1117") != NULL ||
+           strstr(Out.buffer, "LNK4044") != NULL ||
+           strstr(Err.buffer, "LNK4044") != NULL ||
+           strstr(Out.buffer, "LNK4224") != NULL ||
+           strstr(Err.buffer, "LNK4224") != NULL);
+}
+\f
+static DWORD WINAPI
+ReadFromPipe(
+    LPVOID args)
+{
+    pipeinfo *pi = (pipeinfo *) args;
+    char *lastBuf = pi->buffer;
+    DWORD dwRead;
+    BOOL ok;
+
+  again:
+    if (lastBuf - pi->buffer + CHUNK > STATICBUFFERSIZE) {
+       CloseHandle(pi->pipe);
+       return (DWORD)-1;
+    }
+    ok = ReadFile(pi->pipe, lastBuf, CHUNK, &dwRead, 0L);
+    if (!ok || dwRead == 0) {
+       CloseHandle(pi->pipe);
+       return 0;
+    }
+    lastBuf += dwRead;
+    goto again;
+
+    return 0;  /* makes the compiler happy */
+}
+\f
+static int
+IsIn(
+    const char *string,
+    const char *substring)
+{
+    return (strstr(string, substring) != NULL);
+}
+\f
+/*
+ * GetVersionFromFile --
+ *     Looks for a match string in a file and then returns the version
+ *     following the match where a version is anything acceptable to
+ *     package provide or package ifneeded.
+ */
+
+static const char *
+GetVersionFromFile(
+    const char *filename,
+    const char *match,
+    int numdots)
+{
+    size_t cbBuffer = 100;
+    static char szBuffer[100];
+    char *szResult = NULL;
+    FILE *fp = fopen(filename, "rt");
+
+    if (fp != NULL) {
+       /*
+        * Read data until we see our match string.
+        */
+
+       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
+           LPSTR p, q;
+
+           p = strstr(szBuffer, match);
+           if (p != NULL) {
+               /*
+                * Skip to first digit after the match.
+                */
+
+               p += strlen(match);
+               while (*p && !isdigit(*p)) {
+                   ++p;
+               }
+
+               /*
+                * Find ending whitespace.
+                */
+
+               q = p;
+               while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q)
+                           && (!strchr("ab", q[-1])) || --numdots))) {
+                   ++q;
+               }
+
+               memcpy(szBuffer, p, q - p);
+               szBuffer[q-p] = 0;
+               szResult = szBuffer;
+               break;
+           }
+       }
+       fclose(fp);
+    }
+    return szResult;
+}
+\f
+/*
+ * List helpers for the SubstituteFile function
+ */
+
+typedef struct list_item_t {
+    struct list_item_t *nextPtr;
+    char * key;
+    char * value;
+} list_item_t;
+
+/* insert a list item into the list (list may be null) */
+static list_item_t *
+list_insert(list_item_t **listPtrPtr, const char *key, const char *value)
+{
+    list_item_t *itemPtr = malloc(sizeof(list_item_t));
+    if (itemPtr) {
+       itemPtr->key = strdup(key);
+       itemPtr->value = strdup(value);
+       itemPtr->nextPtr = NULL;
+
+       while(*listPtrPtr) {
+           listPtrPtr = &(*listPtrPtr)->nextPtr;
+       }
+       *listPtrPtr = itemPtr;
+    }
+    return itemPtr;
+}
+
+static void
+list_free(list_item_t **listPtrPtr)
+{
+    list_item_t *tmpPtr, *listPtr = *listPtrPtr;
+    while (listPtr) {
+       tmpPtr = listPtr;
+       listPtr = listPtr->nextPtr;
+       free(tmpPtr->key);
+       free(tmpPtr->value);
+       free(tmpPtr);
+    }
+}
+\f
+/*
+ * SubstituteFile --
+ *     As windows doesn't provide anything useful like sed and it's unreliable
+ *     to use the tclsh you are building against (consider x-platform builds -
+ *     eg compiling AMD64 target from IX86) we provide a simple substitution
+ *     option here to handle autoconf style substitutions.
+ *     The substitution file is whitespace and line delimited. The file should
+ *     consist of lines matching the regular expression:
+ *       \s*\S+\s+\S*$
+ *
+ *     Usage is something like:
+ *       nmakehlp -S << $** > $@
+ *        @PACKAGE_NAME@ $(PACKAGE_NAME)
+ *        @PACKAGE_VERSION@ $(PACKAGE_VERSION)
+ *        <<
+ */
+
+static int
+SubstituteFile(
+    const char *substitutions,
+    const char *filename)
+{
+    size_t cbBuffer = 1024;
+    static char szBuffer[1024], szCopy[1024];
+    char *szResult = NULL;
+    list_item_t *substPtr = NULL;
+    FILE *fp, *sp;
+
+    fp = fopen(filename, "rt");
+    if (fp != NULL) {
+
+       /*
+        * Build a list of substutitions from the first filename
+        */
+
+       sp = fopen(substitutions, "rt");
+       if (sp != NULL) {
+           while (fgets(szBuffer, cbBuffer, sp) != NULL) {
+               unsigned char *ks, *ke, *vs, *ve;
+               ks = (unsigned char*)szBuffer;
+               while (ks && *ks && isspace(*ks)) ++ks;
+               ke = ks;
+               while (ke && *ke && !isspace(*ke)) ++ke;
+               vs = ke;
+               while (vs && *vs && isspace(*vs)) ++vs;
+               ve = vs;
+               while (ve && *ve && !(*ve == '\r' || *ve == '\n')) ++ve;
+               *ke = 0, *ve = 0;
+               list_insert(&substPtr, (char*)ks, (char*)vs);
+           }
+           fclose(sp);
+       }
+
+       /* debug: dump the list */
+#ifdef _DEBUG
+       {
+           int n = 0;
+           list_item_t *p = NULL;
+           for (p = substPtr; p != NULL; p = p->nextPtr, ++n) {
+               fprintf(stderr, "% 3d '%s' => '%s'\n", n, p->key, p->value);
+           }
+       }
+#endif
+
+       /*
+        * Run the substitutions over each line of the input
+        */
+
+       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
+           list_item_t *p = NULL;
+           for (p = substPtr; p != NULL; p = p->nextPtr) {
+               char *m = strstr(szBuffer, p->key);
+               if (m) {
+                   char *cp, *op, *sp;
+                   cp = szCopy;
+                   op = szBuffer;
+                   while (op != m) *cp++ = *op++;
+                   sp = p->value;
+                   while (sp && *sp) *cp++ = *sp++;
+                   op += strlen(p->key);
+                   while (*op) *cp++ = *op++;
+                   *cp = 0;
+                   memcpy(szBuffer, szCopy, sizeof(szCopy));
+               }
+           }
+           printf(szBuffer);
+       }
+
+       list_free(&substPtr);
+    }
+    fclose(fp);
+    return 0;
+}
+\f
+/*
+ * QualifyPath --
+ *
+ *     This composes the current working directory with a provided path
+ *     and returns the fully qualified and normalized path.
+ *     Mostly needed to setup paths for testing.
+ */
+
+static int
+QualifyPath(
+    const char *szPath)
+{
+    char szCwd[MAX_PATH + 1];
+    char szTmp[MAX_PATH + 1];
+    char *p;
+    GetCurrentDirectory(MAX_PATH, szCwd);
+    while ((p = strchr(szPath, '/')) && *p)
+       *p = '\\';
+    PathCombine(szTmp, szCwd, szPath);
+    PathCanonicalize(szCwd, szTmp);
+    printf("%s\n", szCwd);
+    return 0;
+}
+
+/*
+ * Implements LocateDependency for a single directory. See that command
+ * for an explanation.
+ * Returns 0 if found after printing the directory.
+ * Returns 1 if not found but no errors.
+ * Returns 2 on any kind of error
+ * Basically, these are used as exit codes for the process.
+ */
+static int LocateDependencyHelper(const char *dir, const char *keypath)
+{
+    HANDLE hSearch;
+    char path[MAX_PATH+1];
+    int dirlen, keylen, ret;
+    WIN32_FIND_DATA finfo;
+
+    if (dir == NULL || keypath == NULL)
+       return 2; /* Have no real error reporting mechanism into nmake */
+    dirlen = strlen(dir);
+    if ((dirlen + 3) > sizeof(path))
+       return 2;
+    strncpy(path, dir, dirlen);
+    strncpy(path+dirlen, "\\*", 3);    /* Including terminating \0 */
+    keylen = strlen(keypath);
+
+#if 0 /* This function is not available in Visual C++ 6 */
+    /*
+     * Use numerics 0 -> FindExInfoStandard,
+     * 1 -> FindExSearchLimitToDirectories, 
+     * as these are not defined in Visual C++ 6
+     */
+    hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0);
+#else
+    hSearch = FindFirstFile(path, &finfo);
+#endif
+    if (hSearch == INVALID_HANDLE_VALUE)
+       return 1; /* Not found */
+
+    /* Loop through all subdirs checking if the keypath is under there */
+    ret = 1; /* Assume not found */
+    do {
+       int sublen;
+       /*
+        * We need to check it is a directory despite the 
+        * FindExSearchLimitToDirectories in the above call. See SDK docs
+        */
+       if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
+           continue;
+       sublen = strlen(finfo.cFileName);
+       if ((dirlen+1+sublen+1+keylen+1) > sizeof(path))
+           continue;           /* Path does not fit, assume not matched */
+       strncpy(path+dirlen+1, finfo.cFileName, sublen);
+       path[dirlen+1+sublen] = '\\';
+       strncpy(path+dirlen+1+sublen+1, keypath, keylen+1);
+       if (PathFileExists(path)) {
+           /* Found a match, print to stdout */
+           path[dirlen+1+sublen] = '\0';
+           QualifyPath(path);
+           ret = 0;
+           break;
+       }
+    } while (FindNextFile(hSearch, &finfo));
+    FindClose(hSearch);
+    return ret;
+}
+
+/*
+ * LocateDependency --
+ *
+ *     Locates a dependency for a package.
+ *        keypath - a relative path within the package directory
+ *          that is used to confirm it is the correct directory.
+ *     The search path for the package directory is currently only
+ *      the parent and grandparent of the current working directory.
+ *      If found, the command prints 
+ *         name_DIRPATH=<full path of located directory>
+ *      and returns 0. If not found, does not print anything and returns 1.
+ */
+static int LocateDependency(const char *keypath)
+{
+    int i, ret;
+    static char *paths[] = {"..", "..\\..", "..\\..\\.."};
+    
+    for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) {
+       ret = LocateDependencyHelper(paths[i], keypath);
+       if (ret == 0)
+           return ret;
+    }
+    return ret;
+}
+
+
+/*
+ * Local variables:
+ *   mode: c
+ *   c-basic-offset: 4
+ *   fill-column: 78
+ *   indent-tabs-mode: t
+ *   tab-width: 8
+ * End:
+ */
diff --git a/pkgs/tdbcpostgres1.0.6/win/rules-ext.vc b/pkgs/tdbcpostgres1.0.6/win/rules-ext.vc
new file mode 100644 (file)
index 0000000..ab86876
--- /dev/null
@@ -0,0 +1,118 @@
+# This file should only be included in makefiles for Tcl extensions,
+# NOT in the makefile for Tcl itself.
+
+!ifndef _RULES_EXT_VC
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+!if "$(PROJECT)" == "tcl"
+!error The rules-ext.vc file is not intended for Tcl itself.
+!endif
+
+# We extract version numbers using the nmakehlp program. For now use
+# the local copy of nmakehlp. Once we locate Tcl, we will use that
+# one if it is newer.
+!if [$(CC) -nologo "nmakehlp.c" -link -subsystem:console > nul]
+!endif
+
+# First locate the Tcl directory that we are working with.
+!ifdef TCLDIR
+
+_RULESDIR = $(TCLDIR:/=\)
+
+!else
+
+# If an installation path is specified, that is also the Tcl directory.
+# Also Tk never builds against an installed Tcl, it needs Tcl sources
+!if defined(INSTALLDIR) && "$(PROJECT)" != "tk"
+_RULESDIR=$(INSTALLDIR:/=\)
+!else
+# Locate Tcl sources
+!if [echo _RULESDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+_RULESDIR = ..\..\tcl
+!else
+!include nmakehlp.out
+!endif
+
+!endif # defined(INSTALLDIR)....
+
+!endif # ifndef TCLDIR
+
+# Now look for the targets.vc file under the Tcl root. Note we check this
+# file and not rules.vc because the latter also exists on older systems.
+!if exist("$(_RULESDIR)\lib\nmake\targets.vc") # Building against installed Tcl
+_RULESDIR = $(_RULESDIR)\lib\nmake
+!elseif exist("$(_RULESDIR)\win\targets.vc")   # Building against Tcl sources
+_RULESDIR = $(_RULESDIR)\win
+!else
+# If we have not located Tcl's targets file, most likely we are compiling
+# against an older version of Tcl and so must use our own support files.
+_RULESDIR = .
+!endif
+
+!if "$(_RULESDIR)" != "."
+# Potentially using Tcl's support files. If this extension has its own
+# nmake support files, need to compare the versions and pick newer.
+
+!if exist("rules.vc") # The extension has its own copy
+
+!if [echo TCL_RULES_MAJOR = \> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo TCL_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+
+!if [echo OUR_RULES_MAJOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo OUR_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+!include versions.vc
+# We have a newer version of the support files, use them
+!if ($(TCL_RULES_MAJOR) != $(OUR_RULES_MAJOR)) || ($(TCL_RULES_MINOR) < $(OUR_RULES_MINOR))
+_RULESDIR = .
+!endif
+
+!endif # if exist("rules.vc")
+
+!endif # if $(_RULESDIR) != "."
+
+# Let rules.vc know what copy of nmakehlp.c to use.
+NMAKEHLPC = $(_RULESDIR)\nmakehlp.c
+
+# Get rid of our internal defines before calling rules.vc
+!undef TCL_RULES_MAJOR
+!undef TCL_RULES_MINOR
+!undef OUR_RULES_MAJOR
+!undef OUR_RULES_MINOR
+
+!if exist("$(_RULESDIR)\rules.vc")
+!message *** Using $(_RULESDIR)\rules.vc
+!include "$(_RULESDIR)\rules.vc"
+!else
+!error *** Could not locate rules.vc in $(_RULESDIR)
+!endif
+
+!endif # _RULES_EXT_VC
\ No newline at end of file
diff --git a/pkgs/tdbcpostgres1.0.6/win/rules.vc b/pkgs/tdbcpostgres1.0.6/win/rules.vc
new file mode 100644 (file)
index 0000000..bbb412d
--- /dev/null
@@ -0,0 +1,1723 @@
+#------------------------------------------------------------- -*- makefile -*-
+# rules.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file does all the hard work in terms of parsing build options,
+# compiler switches, defining common targets and macros. The Tcl makefile
+# directly includes this. Extensions include it via "rules-ext.vc".
+#
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# Copyright (c) 2001-2003 David Gravereaux.
+# Copyright (c) 2003-2008 Patrick Thoyts
+# Copyright (c) 2017      Ashok P. Nadkarni
+#------------------------------------------------------------------------------
+
+!ifndef _RULES_VC
+_RULES_VC = 1
+
+# The following macros define the version of the rules.vc nmake build system
+# For modifications that are not backward-compatible, you *must* change
+# the major version.
+RULES_VERSION_MAJOR = 1
+RULES_VERSION_MINOR = 0
+
+# The PROJECT macro must be defined by parent makefile.
+!if "$(PROJECT)" == ""
+!error *** Error: Macro PROJECT not defined! Please define it before including rules.vc
+!endif
+
+!if "$(PRJ_PACKAGE_TCLNAME)" == ""
+PRJ_PACKAGE_TCLNAME = $(PROJECT)
+!endif
+
+# Also special case Tcl and Tk to save some typing later
+DOING_TCL = 0
+DOING_TK  = 0
+!if "$(PROJECT)" == "tcl"
+DOING_TCL = 1
+!elseif "$(PROJECT)" == "tk"
+DOING_TK = 1
+!endif
+
+!ifndef NEED_TK
+# Backwards compatibility
+!ifdef PROJECT_REQUIRES_TK
+NEED_TK = $(PROJECT_REQUIRES_TK)
+!else
+NEED_TK = 0
+!endif
+!endif
+
+!ifndef NEED_TCL_SOURCE
+NEED_TCL_SOURCE = 0
+!endif
+
+!ifdef NEED_TK_SOURCE
+!if $(NEED_TK_SOURCE)
+NEED_TK = 1
+!endif
+!else
+NEED_TK_SOURCE = 0
+!endif
+
+################################################################
+# Nmake is a pretty weak environment in syntax and capabilities
+# so this file is necessarily verbose. It's broken down into
+# the following parts.
+#
+# 0. Sanity check that compiler environment is set up and initialize
+#    any built-in settings from the parent makefile
+# 1. First define the external tools used for compiling, copying etc.
+#    as this is independent of everything else.
+# 2. Figure out our build structure in terms of the directory, whether
+#    we are building Tcl or an extension, etc.
+# 3. Determine the compiler and linker versions
+# 4. Build the nmakehlp helper application
+# 5. Determine the supported compiler options and features
+# 6. Parse the OPTS macro value for user-specified build configuration
+# 7. Parse the STATS macro value for statistics instrumentation
+# 8. Parse the CHECKS macro for additional compilation checks
+# 9. Extract Tcl, and possibly Tk, version numbers from the headers
+# 10. Based on this selected configuration, construct the output
+#     directory and file paths
+# 11. Construct the paths where the package is to be installed
+# 12. Set up the actual options passed to compiler and linker based
+#     on the information gathered above.
+# 13. Define some standard build targets and implicit rules. These may
+#     be optionally disabled by the parent makefile.
+# 14. (For extensions only.) Compare the configuration of the target
+#     Tcl and the extensions and warn against discrepancies.
+#
+# One final note about the macro names used. They are as they are
+# for historical reasons. We would like legacy extensions to
+# continue to work with this make include file so be wary of
+# changing them for consistency or clarity.
+
+# 0. Sanity check compiler environment
+
+# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
+# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
+
+!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)
+MSG = ^
+Visual C++ compiler environment not initialized.
+!error $(MSG)
+!endif
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+
+################################################################
+# 1. Define external programs being used
+
+#----------------------------------------------------------
+# Set the proper copy method to avoid overwrite questions
+# to the user when copying files and selecting the right
+# "delete all" method.
+#----------------------------------------------------------
+
+RMDIR  = rmdir /S /Q
+CPY    = xcopy /i /y >NUL
+CPYDIR  = xcopy /e /i /y >NUL
+COPY   = copy /y >NUL
+MKDIR   = mkdir
+
+######################################################################
+# 2. Figure out our build environment in terms of what we're building.
+#
+# (a) Tcl itself
+# (b) Tk
+# (c) a Tcl extension using libraries/includes from an *installed* Tcl
+# (d) a Tcl extension using libraries/includes from Tcl source directory
+#
+# This last is needed because some extensions still need
+# some Tcl interfaces that are not publicly exposed.
+#
+# The fragment will set the following macros:
+# ROOT - root of this module sources
+# COMPATDIR - source directory that holds compatibility sources
+# DOCDIR - source directory containing documentation files
+# GENERICDIR - platform-independent source directory
+# WINDIR - Windows-specific source directory
+# TESTDIR - directory containing test files
+# TOOLSDIR - directory containing build tools
+# _TCLDIR - root of the Tcl installation OR the Tcl sources. Not set
+#    when building Tcl itself.
+# _INSTALLDIR - native form of the installation path. For Tcl
+#    this will be the root of the Tcl installation. For extensions
+#    this will be the lib directory under the root.
+# TCLINSTALL  - set to 1 if _TCLDIR refers to
+#    headers and libraries from an installed Tcl, and 0 if built against
+#    Tcl sources. Not set when building Tcl itself. Yes, not very well
+#    named.
+# _TCL_H - native path to the tcl.h file
+#
+# If Tk is involved, also sets the following
+# _TKDIR - native form Tk installation OR Tk source. Not set if building
+#    Tk itself.
+# TKINSTALL - set 1 if _TKDIR refers to installed Tk and 0 if Tk sources
+# _TK_H - native path to the tk.h file
+
+# Root directory for sources and assumed subdirectories
+ROOT = $(MAKEDIR)\..
+# The following paths CANNOT have spaces in them as they appear on the
+# left side of implicit rules.
+!ifndef COMPATDIR
+COMPATDIR      = $(ROOT)\compat
+!endif
+!ifndef DOCDIR
+DOCDIR         = $(ROOT)\doc
+!endif
+!ifndef GENERICDIR
+GENERICDIR     = $(ROOT)\generic
+!endif
+!ifndef TOOLSDIR
+TOOLSDIR       = $(ROOT)\tools
+!endif
+!ifndef TESTDIR
+TESTDIR        = $(ROOT)\tests
+!endif
+!ifndef LIBDIR
+!if exist("$(ROOT)\library")
+LIBDIR          = $(ROOT)\library
+!else
+LIBDIR          = $(ROOT)\lib
+!endif
+!endif
+!ifndef DEMODIR
+!if exist("$(LIBDIR)\demos")
+DEMODIR                = $(LIBDIR)\demos
+!else
+DEMODIR                = $(ROOT)\demos
+!endif
+!endif # ifndef DEMODIR
+# Do NOT enclose WINDIR in a !ifndef because Windows always defines
+# WINDIR env var to point to c:\windows!
+# TBD - This is a potentially dangerous conflict, rename WINDIR to
+# something else
+WINDIR         = $(ROOT)\win
+
+!ifndef RCDIR
+!if exist("$(WINDIR)\rc")
+RCDIR           = $(WINDIR)\rc
+!else
+RCDIR           = $(WINDIR)
+!endif
+!endif
+RCDIR = $(RCDIR:/=\)
+
+# The target directory where the built packages and binaries will be installed.
+# INSTALLDIR is the (optional) path specified by the user.
+# _INSTALLDIR is INSTALLDIR using the backslash separator syntax
+!ifdef INSTALLDIR
+### Fix the path separators.
+_INSTALLDIR    = $(INSTALLDIR:/=\)
+!else
+### Assume the normal default.
+_INSTALLDIR    = $(HOMEDRIVE)\Tcl
+!endif
+
+!if $(DOING_TCL)
+
+# BEGIN Case 2(a) - Building Tcl itself
+
+# Only need to define _TCL_H
+_TCL_H = ..\generic\tcl.h
+
+# END Case 2(a) - Building Tcl itself
+
+!elseif $(DOING_TK)
+
+# BEGIN Case 2(b) - Building Tk
+
+TCLINSTALL = 0 # Tk always builds against Tcl source, not an installed Tcl
+!if "$(TCLDIR)" == ""
+!if [echo TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+!endif # TCLDIR == ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+_TCL_H  = $(_TCLDIR)\generic\tcl.h
+!if !exist("$(_TCL_H)")
+!error Could not locate tcl.h. Please set the TCLDIR macro to point to the Tcl *source* directory.
+!endif
+
+_TK_H = ..\generic\tk.h
+
+# END Case 2(b) - Building Tk
+
+!else
+
+# BEGIN Case 2(c) or (d) - Building an extension other than Tk
+
+# If command line has specified Tcl location through TCLDIR, use it
+# else default to the INSTALLDIR setting
+!if "$(TCLDIR)" != ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+!if exist("$(_TCLDIR)\include\tcl.h") # Case 2(c) with TCLDIR defined
+TCLINSTALL     = 1
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+!elseif exist("$(_TCLDIR)\generic\tcl.h") # Case 2(d) with TCLDIR defined
+TCLINSTALL     = 0
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+!endif
+
+!else  #  # Case 2(c) for extensions with TCLDIR undefined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tcl.h") && !$(NEED_TCL_SOURCE)
+
+TCLINSTALL     = 1
+TCLDIR          = $(_INSTALLDIR)\..
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TCLDIR                = $(_INSTALLDIR)\..
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+
+!else # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!if [echo _TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+TCLINSTALL      = 0
+TCLDIR         = $(_TCLDIR)
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+
+!endif # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!endif # TCLDIR
+
+!ifndef _TCL_H
+MSG =^
+Failed to find tcl.h. The TCLDIR macro is set incorrectly or is not set and default path does not contain tcl.h.
+!error $(MSG)
+!endif
+
+# Now do the same to locate Tk headers and libs if project requires Tk
+!if $(NEED_TK)
+
+!if "$(TKDIR)" != ""
+
+_TKDIR = $(TKDIR:/=\)
+!if exist("$(_TKDIR)\include\tk.h")
+TKINSTALL      = 1
+_TK_H          = $(_TKDIR)\include\tk.h
+!elseif exist("$(_TKDIR)\generic\tk.h")
+TKINSTALL      = 0
+_TK_H          = $(_TKDIR)\generic\tk.h
+!endif
+
+!else # TKDIR not defined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+TKINSTALL      = 1
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TKDIR         = $(_INSTALLDIR)\..
+_TK_H          = $(_TKDIR)\include\tk.h
+TKDIR          = $(_TKDIR)
+
+!else # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!if [echo _TKDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tk.h >> nmakehlp.out]
+!error *** Could not locate Tk source directory.
+!endif
+!include nmakehlp.out
+TKINSTALL      = 0
+TKDIR          = $(_TKDIR)
+_TK_H          = $(_TKDIR)\generic\tk.h
+
+!endif # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!endif # TKDIR
+
+!ifndef _TK_H
+MSG =^
+Failed to find tk.h. The TKDIR macro is set incorrectly or is not set and default path does not contain tk.h.
+!error $(MSG)
+!endif
+
+!endif # NEED_TK
+
+!if $(NEED_TCL_SOURCE) && $(TCLINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tcl.^
+*** Please set the TCLDIR macro to point to the Tcl sources.
+!error $(MSG)
+!endif
+
+!if $(NEED_TK_SOURCE)
+!if $(TKINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tk.^
+*** Please set the TKDIR macro to point to the Tk sources.
+!error $(MSG)
+!endif
+!endif
+
+
+# If INSTALLDIR set to tcl installation root dir then reset to the
+# lib dir for installing extensions 
+!if exist("$(_INSTALLDIR)\include\tcl.h")
+_INSTALLDIR=$(_INSTALLDIR)\lib
+!endif
+
+# END Case 2(c) or (d) - Building an extension
+!endif # if $(DOING_TCL)
+
+################################################################
+# 3. Determine compiler version and architecture
+# In this section, we figure out the compiler version and the
+# architecture for which we are building. This sets the
+# following macros:
+# VCVERSION - the internal compiler version as 1200, 1400, 1910 etc.
+#     This is also printed by the compiler in dotted form 19.10 etc.
+# VCVER - the "marketing version", for example Visual C++ 6 for internal
+#     compiler version 1200. This is kept only for legacy reasons as it
+#     does not make sense for recent Microsoft compilers. Only used for
+#     output directory names.
+# ARCH - set to IX86 or AMD64 depending on 32- or 64-bit target
+# NATIVE_ARCH - set to IX86 or AMD64 for the host machine
+# MACHINE - same as $(ARCH) - legacy
+# _VC_MANIFEST_EMBED_{DLL,EXE} - commands for embedding a manifest if needed
+# CFG_ENCODING - set to an character encoding.
+#   TBD - this is passed to compiler as TCL_CFGVAL_ENCODING but can't
+#   see where it is used
+
+cc32           = $(CC)   # built-in default.
+link32         = link
+lib32          = lib
+rc32           = $(RC)   # built-in default.
+
+#----------------------------------------------------------------
+# Figure out the compiler architecture and version by writing
+# the C macros to a file, preprocessing them with the C
+# preprocessor and reading back the created file
+
+_HASH=^#
+_VC_MANIFEST_EMBED_EXE=
+_VC_MANIFEST_EMBED_DLL=
+VCVER=0
+!if ![echo VCVERSION=_MSC_VER > vercl.x] \
+    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
+    && ![echo ARCH=IX86 >> vercl.x] \
+    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
+    && ![echo ARCH=AMD64 >> vercl.x] \
+    && ![echo $(_HASH)endif >> vercl.x] \
+    && ![$(cc32) -nologo -TC -P vercl.x 2>NUL]
+!include vercl.i
+!if $(VCVERSION) < 1900
+!if ![echo VCVER= ^\> vercl.vc] \
+    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
+!include vercl.vc
+!endif
+!else
+# The simple calculation above does not apply to new Visual Studio releases
+# Keep the compiler version in its native form.
+VCVER = $(VCVERSION)
+!endif
+!endif
+
+!if ![del 2>NUL /q/f vercl.x vercl.i vercl.vc]
+!endif
+
+#----------------------------------------------------------------
+# The MACHINE macro is used by legacy makefiles so set it as well
+!ifdef MACHINE
+!if "$(MACHINE)" == "x86"
+!undef MACHINE
+MACHINE = IX86
+!elseif "$(MACHINE)" == "x64"
+!undef MACHINE
+MACHINE = AMD64
+!endif
+!if "$(MACHINE)" != "$(ARCH)"
+!error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH).
+!endif
+!else
+MACHINE=$(ARCH)
+!endif
+
+#------------------------------------------------------------
+# Figure out the *host* architecture by reading the registry
+
+!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]
+NATIVE_ARCH=IX86
+!else
+NATIVE_ARCH=AMD64
+!endif
+
+# Since MSVC8 we must deal with manifest resources.
+!if $(VCVERSION) >= 1400
+_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1
+_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2
+!endif
+
+!ifndef CFG_ENCODING
+CFG_ENCODING   = \"cp1252\"
+!endif
+
+################################################################
+# 4. Build the nmakehlp program
+# This is a helper app we need to overcome nmake's limiting
+# environment. We will call out to it to get various bits of
+# information about supported compiler options etc.
+#
+# Tcl itself will always use the nmakehlp.c program which is
+# in its own source. This is the "master" copy and kept updated.
+#
+# Extensions built against an installed Tcl will use the installed
+# copy of Tcl's nmakehlp.c if there is one and their own version
+# otherwise. In the latter case, they would also be using their own
+# rules.vc. Note that older versions of Tcl do not install nmakehlp.c
+# or rules.vc.
+#
+# Extensions built against Tcl sources will use the one from the Tcl source.
+#
+# When building an extension using a sufficiently new version of Tcl,
+# rules-ext.vc will define NMAKEHLPC appropriately to point to the
+# copy of nmakehlp.c to be used.
+
+!ifndef NMAKEHLPC
+# Default to the one in the current directory (the extension's own nmakehlp.c)
+NMAKEHLPC = nmakehlp.c
+
+!if !$(DOING_TCL)
+!if $(TCLINSTALL)
+!if exist("$(_TCLDIR)\lib\nmake\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\lib\nmake\nmakehlp.c
+!endif
+!else # ! $(TCLINSTALL)
+!if exist("$(_TCLDIR)\win\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\win\nmakehlp.c
+!endif
+!endif # $(TCLINSTALL)
+!endif # !$(DOING_TCL)
+
+!endif # NMAKEHLPC
+
+# We always build nmakehlp even if it exists since we do not know
+# what source it was built from.
+!message *** Using $(NMAKEHLPC)
+!if [$(cc32) -nologo "$(NMAKEHLPC)" -link -subsystem:console > nul]
+!endif
+
+################################################################
+# 5. Test for compiler features
+# Visual C++ compiler options have changed over the years. Check
+# which options are supported by the compiler in use.
+#
+# The following macros are set:
+# OPTIMIZATIONS - the compiler flags to be used for optimized builds
+# DEBUGFLAGS - the compiler flags to be used for debug builds
+# LINKERFLAGS - Flags passed to the linker 
+#
+# Note that these are the compiler settings *available*, not those
+# that will be *used*. The latter depends on the OPTS macro settings
+# which we have not yet parsed.
+#
+# Also note that some of the flags in OPTIMIZATIONS are not really
+# related to optimization. They are placed there only for legacy reasons
+# as some extensions expect them to be included in that macro.
+
+# -Op improves float consistency. Note only needed for older compilers
+# Newer compilers do not need or support this option.
+!if [nmakehlp -c -Op]
+FPOPTS  = -Op
+!endif
+
+# Strict floating point semantics - present in newer compilers in lieu of -Op
+!if [nmakehlp -c -fp:strict]
+FPOPTS  = $(FPOPTS) -fp:strict
+!endif
+
+!if "$(MACHINE)" == "IX86"
+### test for pentium errata
+!if [nmakehlp -c -QI0f]
+!message *** Compiler has 'Pentium 0x0f fix'
+FPOPTS  = $(FPOPTS) -QI0f
+!else
+!message *** Compiler does not have 'Pentium 0x0f fix'
+!endif
+!endif
+
+### test for optimizations
+# /O2 optimization includes /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy as per
+# documentation. Note we do NOT want /Gs as that inserts a _chkstk
+# stack probe at *every* function entry, not just those with more than
+# a page of stack allocation resulting in a performance hit.  However,
+# /O2 documentation is misleading as its stack probes are simply the
+# default page size locals allocation probes and not what is implied
+# by an explicit /Gs option.
+
+OPTIMIZATIONS = $(FPOPTS)
+
+!if [nmakehlp -c -O2]
+!message *** Compiler has 'Optimizations'
+OPTIMIZING = 1
+OPTIMIZATIONS   = $(OPTIMIZATIONS) -O2
+!else
+# Legacy, really. All modern compilers support this
+!message *** Compiler does not have 'Optimizations'
+OPTIMIZING = 0
+!endif
+
+# Checks for buffer overflows in local arrays
+!if [nmakehlp -c -GS]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS
+!endif
+
+# Link time optimization. Note that this option (potentially) makes
+# generated libraries only usable by the specific VC++ version that
+# created it. Requires /LTCG linker option
+!if [nmakehlp -c -GL]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL
+CC_GL_OPT_ENABLED = 1
+!else
+# In newer compilers -GL and -YX are incompatible.
+!if [nmakehlp -c -YX]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX
+!endif
+!endif # [nmakehlp -c -GL]
+
+DEBUGFLAGS     = $(FPOPTS)
+
+# Run time error checks. Not available or valid in a release, non-debug build
+# RTC is for modern compilers, -GZ is legacy
+!if [nmakehlp -c -RTC1]
+DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1
+!elseif [nmakehlp -c -GZ]
+DEBUGFLAGS     = $(DEBUGFLAGS) -GZ
+!endif
+
+#----------------------------------------------------------------
+# Linker flags
+
+# LINKER_TESTFLAGS are for internal use when we call nmakehlp to test
+# if the linker supports a specific option. Without these flags link will
+# return "LNK1561: entry point must be defined" error compiling from VS-IDE:
+# They are not passed through to the actual application / extension
+# link rules.
+!ifndef LINKER_TESTFLAGS
+LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmakehlp.out
+!endif
+
+LINKERFLAGS     =
+
+# If compiler has enabled link time optimization, linker must too with -ltcg
+!ifdef CC_GL_OPT_ENABLED
+!if [nmakehlp -l -ltcg $(LINKER_TESTFLAGS)]
+LINKERFLAGS     = $(LINKERFLAGS) -ltcg
+!endif
+!endif
+
+########################################################################
+# 6. Parse the OPTS macro to work out the requested build configuration.
+# Based on this, we will construct the actual switches to be passed to the
+# compiler and linker using the macros defined in the previous section.
+# The following macros are defined by this section based on OPTS
+# STATIC_BUILD - 0 -> Tcl is to be built as a shared library
+#                1 -> build as a static library and shell
+# TCL_THREADS - legacy but always 1 on Windows since winsock requires it.
+# DEBUG - 1 -> debug build, 0 -> release builds
+# SYMBOLS - 1 -> generate PDB's, 0 -> no PDB's
+# PROFILE - 1 -> generate profiling info, 0 -> no profiling
+# PGO     - 1 -> profile based optimization, 0 -> no
+# MSVCRT  - 1 -> link to dynamic C runtime even when building static Tcl build
+#           0 -> link to static C runtime for static Tcl build.
+#           Does not impact shared Tcl builds (STATIC_BUILD == 0)
+# TCL_USE_STATIC_PACKAGES - 1 -> statically link the registry and dde extensions
+#           in the Tcl shell. 0 -> keep them as shared libraries
+#           Does not impact shared Tcl builds.
+# USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation.
+#           0 -> Use the non-thread allocator.
+# UNCHECKED - 1 -> when doing a debug build with symbols, use the release
+#           C runtime, 0 -> use the debug C runtime.
+# USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking
+# CONFIG_CHECK - 1 -> check current build configuration against Tcl
+#           configuration (ignored for Tcl itself)
+# Further, LINKERFLAGS are modified based on above.
+
+# Default values for all the above
+STATIC_BUILD   = 0
+TCL_THREADS    = 1
+DEBUG          = 0
+SYMBOLS                = 0
+PROFILE                = 0
+PGO            = 0
+MSVCRT         = 1
+TCL_USE_STATIC_PACKAGES        = 0
+USE_THREAD_ALLOC = 1
+UNCHECKED      = 0
+CONFIG_CHECK    = 1
+!if $(DOING_TCL)
+USE_STUBS       = 0
+!else
+USE_STUBS       = 1
+!endif
+
+# If OPTS is not empty AND does not contain "none" which turns off all OPTS
+# set the above macros based on OPTS content
+!if "$(OPTS)" != "" && ![nmakehlp -f "$(OPTS)" "none"]
+
+# OPTS are specified, parse them
+
+!if [nmakehlp -f $(OPTS) "static"]
+!message *** Doing static
+STATIC_BUILD   = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "nostubs"]
+!message *** Not using stubs
+USE_STUBS      = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nomsvcrt"]
+!message *** Doing nomsvcrt
+MSVCRT         = 0
+!else
+!if [nmakehlp -f $(OPTS) "msvcrt"]
+!message *** Doing msvcrt
+MSVCRT         = 1
+!else
+!if !$(STATIC_BUILD)
+MSVCRT         = 1
+!else
+MSVCRT         = 0
+!endif
+!endif
+!endif # [nmakehlp -f $(OPTS) "nomsvcrt"]
+
+!if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD)
+!message *** Doing staticpkg
+TCL_USE_STATIC_PACKAGES        = 1
+!else
+TCL_USE_STATIC_PACKAGES        = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nothreads"]
+!message *** Compile explicitly for non-threaded tcl
+TCL_THREADS    = 0
+USE_THREAD_ALLOC= 0
+!else
+TCL_THREADS    = 1
+USE_THREAD_ALLOC= 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "symbols"]
+!message *** Doing symbols
+DEBUG          = 1
+!else
+DEBUG          = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pdbs"]
+!message *** Doing pdbs
+SYMBOLS                = 1
+!else
+SYMBOLS                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "profile"]
+!message *** Doing profile
+PROFILE                = 1
+!else
+PROFILE                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pgi"]
+!message *** Doing profile guided optimization instrumentation
+PGO            = 1
+!elseif [nmakehlp -f $(OPTS) "pgo"]
+!message *** Doing profile guided optimization
+PGO            = 2
+!else
+PGO            = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "loimpact"]
+!message *** Warning: ignoring option "loimpact" - deprecated on modern Windows.
+!endif
+
+# TBD - should get rid of this option
+!if [nmakehlp -f $(OPTS) "thrdalloc"]
+!message *** Doing thrdalloc
+USE_THREAD_ALLOC = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "tclalloc"]
+USE_THREAD_ALLOC = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "unchecked"]
+!message *** Doing unchecked
+UNCHECKED = 1
+!else
+UNCHECKED = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "noconfigcheck"]
+CONFIG_CHECK = 1
+!else
+CONFIG_CHECK = 0
+!endif
+
+!endif # "$(OPTS)" != ""  && ... parsing of OPTS
+
+# Set linker flags based on above
+
+!if $(PGO) > 1
+!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!elseif $(PGO) > 0
+!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!endif
+
+################################################################
+# 7. Parse the STATS macro to configure code instrumentation
+# The following macros are set by this section:
+# TCL_MEM_DEBUG - 1 -> enables memory allocation instrumentation
+#                 0 -> disables
+# TCL_COMPILE_DEBUG - 1 -> enables byte compiler logging
+#                     0 -> disables
+
+# Default both are off
+TCL_MEM_DEBUG      = 0
+TCL_COMPILE_DEBUG   = 0
+
+!if "$(STATS)" != "" && ![nmakehlp -f "$(STATS)" "none"]
+
+!if [nmakehlp -f $(STATS) "memdbg"]
+!message *** Doing memdbg
+TCL_MEM_DEBUG      = 1
+!else
+TCL_MEM_DEBUG      = 0
+!endif
+
+!if [nmakehlp -f $(STATS) "compdbg"]
+!message *** Doing compdbg
+TCL_COMPILE_DEBUG   = 1
+!else
+TCL_COMPILE_DEBUG   = 0
+!endif
+
+!endif
+
+####################################################################
+# 8. Parse the CHECKS macro to configure additional compiler checks
+# The following macros are set by this section:
+# WARNINGS - compiler switches that control the warnings level
+# TCL_NO_DEPRECATED - 1 -> disable support for deprecated functions
+#                     0 -> enable deprecated functions
+
+# Defaults - Permit deprecated functions and warning level 3
+TCL_NO_DEPRECATED          = 0
+WARNINGS                   = -W3
+
+!if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"]
+
+!if [nmakehlp -f $(CHECKS) "nodep"]
+!message *** Doing nodep check
+TCL_NO_DEPRECATED          = 1
+!endif
+
+!if [nmakehlp -f $(CHECKS) "fullwarn"]
+!message *** Doing full warnings check
+WARNINGS                   = -W4
+!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)]
+LINKERFLAGS                = $(LINKERFLAGS) -warn:3
+!endif
+!endif
+
+!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]
+!message *** Doing 64bit portability warnings
+WARNINGS                   = $(WARNINGS) -Wp64
+!endif
+
+!endif
+
+################################################################
+# 9. Extract various version numbers
+# For Tcl and Tk, version numbers are extracted from tcl.h and tk.h
+# respectively. For extensions, versions are extracted from the
+# configure.in or configure.ac from the TEA configuration if it
+# exists, and unset otherwise.
+# Sets the following macros:
+# TCL_MAJOR_VERSION
+# TCL_MINOR_VERSION
+# TCL_PATCH_LEVEL
+# TCL_VERSION
+# TK_MAJOR_VERSION
+# TK_MINOR_VERSION
+# TK_PATCH_LEVEL
+# TK_VERSION
+# DOTVERSION - set as (for example) 2.5
+# VERSION - set as (for example 25)
+#--------------------------------------------------------------
+
+!if [echo REM = This file is generated from rules.vc > versions.vc]
+!endif
+!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]
+!endif
+
+!if defined(_TK_H)
+!if [echo TK_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]
+!endif
+!endif # _TK_H
+
+!include versions.vc
+
+TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)
+TCL_DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!if defined(_TK_H)
+TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)
+TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+
+# Set DOTVERSION and VERSION
+!if $(DOING_TCL)
+
+DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+VERSION = $(TCL_VERSION)
+
+!elseif $(DOING_TK)
+
+DOTVERSION = $(TK_DOTVERSION)
+VERSION = $(TK_VERSION)
+
+!else # Doing a non-Tk extension
+
+# If parent makefile has not defined DOTVERSION, try to get it from TEA
+# first from a configure.in file, and then from configure.ac
+!ifndef DOTVERSION
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.in ^[$(PROJECT)^] >> versions.vc]
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.ac ^[$(PROJECT)^] >> versions.vc]
+!error *** Could not figure out extension version. Please define DOTVERSION in parent makefile before including rules.vc.
+!endif
+!endif
+!include versions.vc
+!endif # DOTVERSION
+VERSION         = $(DOTVERSION:.=)
+
+!endif # $(DOING_TCL) ... etc.
+
+################################################################
+# 10. Construct output directory and file paths
+# Figure-out how to name our intermediate and output directories.
+# In order to avoid inadvertent mixing of object files built using
+# different compilers, build configurations etc.,
+#
+# Naming convention (suffixes):
+#   t = full thread support.
+#   s = static library (as opposed to an import library)
+#   g = linked to the debug enabled C run-time.
+#   x = special static build when it links to the dynamic C run-time.
+#
+# The following macros are set in this section:
+# SUFX - the suffix to use for binaries based on above naming convention
+# BUILDDIRTOP - the toplevel default output directory
+#      is of the form {Release,Debug}[_AMD64][_COMPILERVERSION]
+# TMP_DIR - directory where object files are created
+# OUT_DIR - directory where output executables are created
+# Both TMP_DIR and OUT_DIR are defaulted only if not defined by the
+# parent makefile (or command line). The default values are
+# based on BUILDDIRTOP.
+# STUBPREFIX - name of the stubs library for this project
+# PRJIMPLIB - output path of the generated project import library
+# PRJLIBNAME - name of generated project library
+# PRJLIB     - output path of generated project library
+# PRJSTUBLIBNAME - name of the generated project stubs library
+# PRJSTUBLIB - output path of the generated project stubs library
+# RESFILE - output resource file (only if not static build)
+
+SUFX       = tsgx
+
+!if $(DEBUG)
+BUILDDIRTOP = Debug
+!else
+BUILDDIRTOP = Release
+!endif
+
+!if "$(MACHINE)" != "IX86"
+BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)
+!endif
+!if $(VCVER) > 6
+BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)
+!endif
+
+!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)
+SUFX       = $(SUFX:g=)
+!endif
+
+TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
+
+!if !$(STATIC_BUILD)
+TMP_DIRFULL = $(TMP_DIRFULL:Static=)
+SUFX       = $(SUFX:s=)
+EXT        = dll
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!else
+TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
+EXT        = lib
+!if !$(MSVCRT)
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!endif
+!endif
+
+!if !$(TCL_THREADS)
+TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)
+SUFX       = $(SUFX:t=)
+!endif
+
+!ifndef TMP_DIR
+TMP_DIR            = $(TMP_DIRFULL)
+!ifndef OUT_DIR
+OUT_DIR            = .\$(BUILDDIRTOP)
+!endif
+!else
+!ifndef OUT_DIR
+OUT_DIR            = $(TMP_DIR)
+!endif
+!endif
+
+# Relative paths -> absolute
+!if [echo OUT_DIR = \> nmakehlp.out] \
+   || [nmakehlp -Q "$(OUT_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path OUT_DIR=$(OUT_DIR)
+!endif
+!if [echo TMP_DIR = \>> nmakehlp.out] \
+   || [nmakehlp -Q "$(TMP_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path TMP_DIR=$(TMP_DIR)
+!endif
+!include nmakehlp.out
+
+# The name of the stubs library for the project being built
+STUBPREFIX      = $(PROJECT)stub
+
+# Set up paths to various Tcl executables and libraries needed by extensions
+!if $(DOING_TCL)
+
+TCLSHNAME       = $(PROJECT)sh$(TCL_VERSION)$(SUFX).exe
+TCLSH          = $(OUT_DIR)\$(TCLSHNAME)
+TCLIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+TCLLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+TCLLIB         = $(OUT_DIR)\$(TCLLIBNAME)
+
+TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+TCLSTUBLIB     = $(OUT_DIR)\$(TCLSTUBLIBNAME)
+TCL_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+
+TCLSH          = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist("$(TCLSH)") && $(TCL_THREADS)
+TCLSH           = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\lib
+TCLREGLIB      = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target
+TCL_INCLUDES    = -I"$(_TCLDIR)\include"
+
+!else # Building against Tcl sources
+
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist($(TCLSH)) && $(TCL_THREADS)
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\library
+TCLREGLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = $(_TCLDIR)\tools
+TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"
+
+!endif # TCLINSTALL
+
+tcllibs = "$(TCLSTUBLIB)" "$(TCLIMPLIB)"
+
+!endif # $(DOING_TCL)
+
+# We need a tclsh that will run on the host machine as part of the build.
+# IX86 runs on all architectures.
+!ifndef TCLSH_NATIVE
+!if "$(MACHINE)" == "IX86" || "$(MACHINE)" == "$(NATIVE_ARCH)"
+TCLSH_NATIVE   = $(TCLSH)
+!else
+!error You must explicitly set TCLSH_NATIVE for cross-compilation
+!endif
+!endif
+
+# Do the same for Tk and Tk extensions that require the Tk libraries
+!if $(DOING_TK) || $(NEED_TK)
+WISHNAMEPREFIX = wish
+WISHNAME = $(WISHNAMEPREFIX)$(TK_VERSION)$(SUFX).exe
+TKLIBNAME      = $(PROJECT)$(TK_VERSION)$(SUFX).$(EXT)
+TKSTUBLIBNAME  = tkstub$(TK_VERSION).lib
+TKIMPLIBNAME   = tk$(TK_VERSION)$(SUFX).lib
+
+!if $(DOING_TK)
+WISH           = $(OUT_DIR)\$(WISHNAME)
+TKSTUBLIB      = $(OUT_DIR)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(OUT_DIR)\$(TKIMPLIBNAME)
+TKLIB          = $(OUT_DIR)\$(TKLIBNAME)
+TK_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # effectively NEED_TK
+
+!if $(TKINSTALL) # Building against installed Tk
+WISH           = $(_TKDIR)\bin\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\lib\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\lib\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\include"
+!else # Building against Tk sources
+WISH           = $(_TKDIR)\win\$(BUILDDIRTOP)\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
+!endif # TKINSTALL
+tklibs = "$(TKSTUBLIB)" "$(TKIMPLIB)"
+
+!endif # $(DOING_TK)
+!endif # $(DOING_TK) || $(NEED_TK)
+
+# Various output paths
+PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)
+
+PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)
+
+# If extension parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+!if !$(DOING_TCL) && !$(DOING_TK) && !$(STATIC_BUILD)
+!ifdef RCFILE
+RESFILE = $(TMP_DIR)\$(RCFILE:.rc=.res)
+!else
+RESFILE = $(TMP_DIR)\$(PROJECT).res
+!endif
+!endif
+
+###################################################################
+# 11. Construct the paths for the installation directories
+# The following macros get defined in this section:
+# LIB_INSTALL_DIR - where libraries should be installed
+# BIN_INSTALL_DIR - where the executables should be installed
+# DOC_INSTALL_DIR - where documentation should be installed
+# SCRIPT_INSTALL_DIR - where scripts should be installed
+# INCLUDE_INSTALL_DIR - where C include files should be installed
+# DEMO_INSTALL_DIR - where demos should be installed
+# PRJ_INSTALL_DIR - where package will be installed (not set for tcl and tk)
+
+!if $(DOING_TCL) || $(DOING_TK)
+LIB_INSTALL_DIR                = $(_INSTALLDIR)\lib
+BIN_INSTALL_DIR                = $(_INSTALLDIR)\bin
+DOC_INSTALL_DIR                = $(_INSTALLDIR)\doc
+!if $(DOING_TCL)
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!else # DOING_TK
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+DEMO_INSTALL_DIR       = $(SCRIPT_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\include
+
+!else # extension other than Tk
+
+PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)
+LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)
+DEMO_INSTALL_DIR       = $(PRJ_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include
+
+!endif
+
+###################################################################
+# 12. Set up actual options to be passed to the compiler and linker
+# Now we have all the information we need, set up the actual flags and
+# options that we will pass to the compiler and linker. The main
+# makefile should use these in combination with whatever other flags
+# and switches are specific to it.
+# The following macros are defined, names are for historical compatibility:
+# OPTDEFINES - /Dxxx C macro flags based on user-specified OPTS
+# COMPILERFLAGS - /Dxxx C macro flags independent of any configuration opttions
+# crt - Compiler switch that selects the appropriate C runtime
+# cdebug - Compiler switches related to debug AND optimizations
+# cwarn - Compiler switches that set warning levels
+# cflags - complete compiler switches (subsumes cdebug and cwarn)
+# ldebug - Linker switches controlling debug information and optimization
+# lflags - complete linker switches (subsumes ldebug) except subsystem type
+# dlllflags - complete linker switches to build DLLs (subsumes lflags)
+# conlflags - complete linker switches for console program (subsumes lflags)
+# guilflags - complete linker switches for GUI program (subsumes lflags)
+# baselibs - minimum Windows libraries required. Parent makefile can
+#    define PRJ_LIBS before including rules.rc if additional libs are needed
+
+OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS
+
+!if $(TCL_MEM_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG
+!endif
+!if $(TCL_COMPILE_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
+!endif
+!if $(TCL_THREADS)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1
+!if $(USE_THREAD_ALLOC)
+OPTDEFINES     = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1
+!endif
+!endif
+!if $(STATIC_BUILD)
+OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD
+!endif
+!if $(TCL_NO_DEPRECATED)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED
+!endif
+
+!if $(USE_STUBS)
+# Note we do not define USE_TCL_STUBS even when building tk since some
+# test targets in tk do not use stubs
+!if ! $(DOING_TCL)
+USE_STUBS_DEFS  = -DUSE_TCL_STUBS -DUSE_TCLOO_STUBS
+!if $(NEED_TK)
+USE_STUBS_DEFS  = $(USE_STUBS_DEFS) -DUSE_TK_STUBS
+!endif
+!endif
+!endif # USE_STUBS
+
+!if !$(DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DNDEBUG
+!if $(OPTIMIZING)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
+!endif
+!endif
+!if $(PROFILE)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED
+!endif
+!if "$(MACHINE)" == "AMD64"
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT
+!endif
+!if $(VCVERSION) < 1300
+OPTDEFINES     = $(OPTDEFINES) -DNO_STRTOI64
+!endif
+
+# _ATL_XP_TARGETING - Newer SDK's need this to build for XP
+COMPILERFLAGS  = /D_ATL_XP_TARGETING
+
+# Following is primarily for the benefit of extensions. Tcl 8.5 builds
+# Tcl without /DUNICODE, while 8.6 builds with it defined. When building
+# an extension, it is advisable (but not mandated) to use the same Windows
+# API as the Tcl build. This is accordingly defaulted below. A particular
+# extension can override this by pre-definining USE_WIDECHAR_API.
+!ifndef USE_WIDECHAR_API
+!if $(TCL_VERSION) > 85
+USE_WIDECHAR_API = 1
+!else
+USE_WIDECHAR_API = 0
+!endif
+!endif
+
+!if $(USE_WIDECHAR_API)
+COMPILERFLAGS = $(COMPILERFLAGS) /DUNICODE /D_UNICODE 
+!endif
+
+# Like the TEA system only set this non empty for non-Tk extensions
+# Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME
+# so we pass both
+!if !$(DOING_TCL) && !$(DOING_TK)
+PKGNAMEFLAGS = -DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_TCLNAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \
+               -DMODULE_SCOPE=extern 
+!endif
+
+# crt picks the C run time based on selected OPTS
+!if $(MSVCRT)
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MDd
+!else
+crt = -MD
+!endif
+!else
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MTd
+!else
+crt = -MT
+!endif
+!endif
+
+# cdebug includes compiler options for debugging as well as optimization.
+!if $(DEBUG)
+
+# In debugging mode, optimizations need to be disabled
+cdebug = -Zi -Od $(DEBUGFLAGS)
+
+!else
+
+cdebug = $(OPTIMIZATIONS)
+!if $(SYMBOLS)
+cdebug = $(cdebug) -Zi
+!endif
+
+!endif # $(DEBUG)
+
+# cwarn includes default warning levels.
+cwarn = $(WARNINGS)
+
+!if "$(MACHINE)" == "AMD64"
+# Disable pointer<->int warnings related to cast between different sizes
+# There are a gadzillion of these due to use of ClientData and
+# clutter up compiler
+# output increasing chance of a real warning getting lost. So disable them.
+# Eventually some day, Tcl will be 64-bit clean.
+cwarn = $(cwarn) -wd4311 -wd4312
+!endif
+
+### Common compiler options that are architecture specific
+!if "$(MACHINE)" == "ARM"
+carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
+!else
+carch =
+!endif
+
+!if $(DEBUG)
+# Turn warnings into errors
+cwarn = $(cwarn) -WX
+!endif
+
+INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES)
+!if !$(DOING_TCL) && !$(DOING_TK)
+INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WINDIR)" -I"$(COMPATDIR)"
+!endif
+
+# These flags are defined roughly in the order of the pre-reform
+# rules.vc/makefile.vc to help visually compare that the pre- and
+# post-reform build logs
+
+# cflags contains generic flags used for building practically all object files
+cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\ $(cdebug)
+
+# appcflags contains $(cflags) and flags for building the application
+# object files (e.g. tclsh, or wish) pkgcflags contains $(cflags) plus
+# flags used for building shared object files The two differ in the
+# BUILD_$(PROJECT) macro which should be defined only for the shared
+# library *implementation* and not for its caller interface
+
+appcflags = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES) $(USE_STUBS_DEFS)
+appcflags_nostubs = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES)
+pkgcflags = $(appcflags) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+pkgcflags_nostubs = $(appcflags_nostubs) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+
+# stubscflags contains $(cflags) plus flags used for building a stubs
+# library for the package.  Note: -DSTATIC_BUILD is defined in
+# $(OPTDEFINES) only if the OPTS configuration indicates a static
+# library. However the stubs library is ALWAYS static hence included
+# here irrespective of the OPTS setting.
+#
+# TBD - tclvfs has a comment that stubs libs should not be compiled with -GL
+# without stating why. Tcl itself compiled stubs libs with this flag.
+# so we do not remove it from cflags. -GL may prevent extensions
+# compiled with one VC version to fail to link against stubs library
+# compiled with another VC version. Check for this and fix accordingly.
+stubscflags = $(cflags) $(PKGNAMEFLAGS) $(PRJ_DEFINES) $(OPTDEFINES) -Zl -DSTATIC_BUILD $(INCLUDES)
+
+# Link flags 
+
+!if $(DEBUG)
+ldebug = -debug -debugtype:cv
+!else
+ldebug = -release -opt:ref -opt:icf,3
+!if $(SYMBOLS)
+ldebug = $(ldebug) -debug -debugtype:cv
+!endif
+!endif
+
+# Note: Profiling is currently only possible with the Visual Studio Enterprise
+!if $(PROFILE)
+ldebug= $(ldebug) -profile
+!endif
+
+### Declarations common to all linker versions 
+lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+lflags = $(lflags) -nodefaultlib:libucrt.lib
+!endif
+
+# Old linkers (Visual C++ 6 in particular) will link for fast loading
+# on Win98. Since we do not support Win98 any more, we specify nowin98
+# as recommended for NT and later. However, this is only required by
+# IX86 on older compilers and only needed if we are not doing a static build.
+
+!if "$(MACHINE)" == "IX86" && !$(STATIC_BUILD)
+!if [nmakehlp -l -opt:nowin98 $(LINKER_TESTFLAGS)]
+# Align sections for PE size savings.
+lflags = $(lflags) -opt:nowin98
+!endif
+!endif
+
+dlllflags = $(lflags) -dll
+conlflags = $(lflags) -subsystem:console
+guilflags = $(lflags) -subsystem:windows
+
+# Libraries that are required for every image.
+# Extensions should define any additional libraries with $(PRJ_LIBS)
+winlibs   = kernel32.lib advapi32.lib
+
+!if $(NEED_TK)
+winlibs = $(winlibs) gdi32.lib user32.lib uxtheme.lib
+!endif
+
+# Avoid 'unresolved external symbol __security_cookie' errors.
+# c.f. http://support.microsoft.com/?id=894573
+!if "$(MACHINE)" == "AMD64"
+!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500
+winlibs   = $(winlibs) bufferoverflowU.lib
+!endif
+!endif
+
+baselibs = $(winlibs) $(PRJ_LIBS)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+baselibs   = $(baselibs) ucrt.lib
+!endif
+
+################################################################
+# 13. Define standard commands, common make targets and implicit rules
+
+CCPKGCMD = $(cc32) $(pkgcflags) -Fo$(TMP_DIR)^\
+CCAPPCMD = $(cc32) $(appcflags) -Fo$(TMP_DIR)^\
+CCSTUBSCMD = $(cc32) $(stubscflags) -Fo$(TMP_DIR)^\
+
+LIBCMD = $(lib32) -nologo $(LINKERFLAGS) -out:$@
+DLLCMD = $(link32) $(dlllflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+
+CONEXECMD = $(link32) $(conlflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+GUIEXECMD = $(link32) $(guilflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+RESCMD  = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \
+           $(TCL_INCLUDES) \
+           -DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \
+           -DCOMMAVERSION=$(DOTVERSION:.=,),0 \
+           -DDOTVERSION=\"$(DOTVERSION)\" \
+           -DVERSION=\"$(VERSION)\" \
+           -DSUFX=\"$(SUFX)\" \
+            -DPROJECT=\"$(PROJECT)\" \
+            -DPRJLIBNAME=\"$(PRJLIBNAME)\" 
+
+!ifndef DEFAULT_BUILD_TARGET
+DEFAULT_BUILD_TARGET = $(PROJECT)
+!endif
+
+default-target: $(DEFAULT_BUILD_TARGET)
+
+default-pkgindex:
+       @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \
+           [list load [file join $$dir $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl
+
+default-pkgindex-tea:
+       @if exist $(ROOT)\pkgIndex.tcl.in nmakehlp -s << $(ROOT)\pkgIndex.tcl.in > $(OUT_DIR)\pkgIndex.tcl
+@PACKAGE_VERSION@    $(DOTVERSION)
+@PACKAGE_NAME@       $(PRJ_PACKAGE_TCLNAME)
+@PACKAGE_TCLNAME@    $(PRJ_PACKAGE_TCLNAME)
+@PKG_LIB_FILE@       $(PRJLIBNAME)
+<<
+
+
+default-install: default-install-binaries default-install-libraries
+
+default-install-binaries: $(PRJLIB)
+       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-libraries: $(OUT_DIR)\pkgIndex.tcl
+       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
+       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
+       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
+       @$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)
+
+default-install-stubs:
+       @echo Installing stubs library to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJSTUBLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-docs-html:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.html" "$(DOCDIR)\*.css" "$(DOCDIR)\*.png") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-docs-n:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.n") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-demos:
+       @echo Installing demos to '$(DEMO_INSTALL_DIR)'
+       @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)"
+       @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)"
+
+default-clean:
+       @echo Cleaning $(TMP_DIR)\* ...
+       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)
+       @echo Cleaning $(WINDIR)\nmakehlp.obj, nmakehlp.exe ...
+       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj
+       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe
+       @if exist $(WINDIR)\nmakehlp.out del $(WINDIR)\nmakehlp.out
+       @echo Cleaning $(WINDIR)\nmhlp-out.txt ...
+       @if exist $(WINDIR)\nmhlp-out.txt del $(WINDIR)\nmhlp-out.txt
+       @echo Cleaning $(WINDIR)\_junk.pch ...
+       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch
+       @echo Cleaning $(WINDIR)\vercl.x, vercl.i ...
+       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x
+       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i
+       @echo Cleaning $(WINDIR)\versions.vc, version.vc ...
+       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc
+       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc
+
+default-hose: default-clean
+       @echo Hosing $(OUT_DIR)\* ...
+       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)
+
+# Only for backward compatibility
+default-distclean: default-hose
+
+default-setup:
+       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
+       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
+
+!if "$(TESTPAT)" != ""
+TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
+!endif
+
+default-test: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS)
+
+default-shell: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       $(DEBUGGER) $(TCLSH)
+
+# Generation of Windows version resource 
+!ifdef RCFILE
+
+# Note: don't use $** in below rule because there may be other dependencies
+# and only the "master" rc must be passed to the resource compiler
+$(TMP_DIR)\$(PROJECT).res: $(RCDIR)\$(PROJECT).rc
+       $(RESCMD) $(RCDIR)\$(PROJECT).rc
+
+!else
+
+# If parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+$(TMP_DIR)\$(PROJECT).res: $(TMP_DIR)\$(PROJECT).rc
+
+$(TMP_DIR)\$(PROJECT).rc:
+       @$(COPY) << $(TMP_DIR)\$(PROJECT).rc
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION   COMMAVERSION
+ PRODUCTVERSION        COMMAVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef DEBUG
+ FILEFLAGS     VS_FF_DEBUG
+#else
+ FILEFLAGS     0x0L
+#endif
+ FILEOS                VOS_NT_WINDOWS32
+ FILETYPE      VFT_DLL
+ FILESUBTYPE   0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "FileDescription",  "Tcl extension " PROJECT
+            VALUE "OriginalFilename", PRJLIBNAME
+            VALUE "FileVersion",      DOTVERSION
+            VALUE "ProductName",      "Package " PROJECT " for Tcl"
+            VALUE "ProductVersion",   DOTVERSION 
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+<<
+
+!endif # ifdef RCFILE
+
+!ifndef DISABLE_IMPLICIT_RULES
+DISABLE_IMPLICIT_RULES = 0
+!endif
+
+!if !$(DISABLE_IMPLICIT_RULES)
+# Implicit rule definitions - only for building library objects. For stubs and
+# main application, the master makefile should define explicit rules.
+
+{$(ROOT)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(WINDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(RCDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(WINDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(TMP_DIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+.SUFFIXES:
+.SUFFIXES:.c .rc
+
+!endif
+
+################################################################
+# 14. Sanity check selected options against Tcl build options
+# When building an extension, certain configuration options should
+# match the ones used when Tcl was built. Here we check and
+# warn on a mismatch.
+!if ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+!if exist("$(_TCLDIR)\lib\nmake\tcl.nmake")
+TCLNMAKECONFIG = "$(_TCLDIR)\lib\nmake\tcl.nmake"
+!endif
+!else # ! $(TCLINSTALL) - building against Tcl source
+!if exist("$(OUT_DIR)\tcl.nmake")
+TCLNMAKECONFIG = "$(OUT_DIR)\tcl.nmake"
+!endif
+!endif # TCLINSTALL
+
+!if $(CONFIG_CHECK)
+!ifdef TCLNMAKECONFIG
+!include $(TCLNMAKECONFIG)
+
+!if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)"
+!error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)).
+!endif
+!if defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC)
+!message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)).
+!endif
+!if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG)
+!message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)).
+!endif
+!endif
+
+!endif # TCLNMAKECONFIG
+
+!endif # ! $(DOING_TCL)
+
+
+#----------------------------------------------------------
+# Display stats being used.
+#----------------------------------------------------------
+
+!if !$(DOING_TCL)
+!message *** Building against Tcl at '$(_TCLDIR)'
+!endif
+!if !$(DOING_TK) && $(NEED_TK)
+!message *** Building against Tk at '$(_TKDIR)'
+!endif
+!message *** Intermediate directory will be '$(TMP_DIR)'
+!message *** Output directory will be '$(OUT_DIR)'
+!message *** Installation, if selected, will be in '$(_INSTALLDIR)'
+!message *** Suffix for binaries will be '$(SUFX)'
+!message *** Compiler version $(VCVER). Target machine is $(MACHINE)
+!message *** Host architecture is $(NATIVE_ARCH)
+
+!endif # ifdef _RULES_VC
diff --git a/pkgs/tdbcpostgres1.0.6/win/targets.vc b/pkgs/tdbcpostgres1.0.6/win/targets.vc
new file mode 100644 (file)
index 0000000..312022d
--- /dev/null
@@ -0,0 +1,98 @@
+#------------------------------------------------------------- -*- makefile -*-
+# targets.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file defines some standard targets for the convenience of extensions
+# and can be optionally included by the extension makefile.
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for docs.
+
+$(PROJECT): setup pkgindex $(PRJLIB)
+
+!ifdef PRJ_STUBOBJS
+$(PROJECT): $(PRJSTUBLIB)
+$(PRJSTUBLIB): $(PRJ_STUBOBJS)
+       $(LIBCMD) $**
+
+$(PRJ_STUBOBJS):
+       $(CCSTUBSCMD) %s
+!endif # PRJ_STUBOBJS
+
+!ifdef PRJ_MANIFEST
+$(PROJECT): $(PRJLIB).manifest
+$(PRJLIB).manifest: $(PRJ_MANIFEST)
+       @nmakehlp -s << $** >$@
+@MACHINE@        $(MACHINE:IX86=X86)
+<<
+!endif
+
+!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"
+$(PRJLIB): $(PRJ_OBJS) $(RESFILE)
+!if $(STATIC_BUILD)
+       $(LIBCMD) $**
+!else
+       $(DLLCMD) $**
+       $(_VC_MANIFEST_EMBED_DLL)
+!endif
+       -@del $*.exp
+!endif
+
+!if "$(PRJ_HEADERS)" != "" && "$(PRJ_OBJS)" != ""
+$(PRJ_OBJS): $(PRJ_HEADERS)
+!endif
+
+# If parent makefile has defined stub objects, add their installation
+# to the default install
+!if "$(PRJ_STUBOBJS)" != ""
+default-install: default-install-stubs
+!endif
+
+# Unlike the other default targets, these cannot be in rules.vc because
+# the executed command depends on existence of macro PRJ_HEADERS_PUBLIC
+# that the parent makefile will not define until after including rules-ext.vc
+!if "$(PRJ_HEADERS_PUBLIC)" != ""
+default-install: default-install-headers
+default-install-headers:
+       @echo Installing headers to '$(INCLUDE_INSTALL_DIR)'
+       @for %f in ($(PRJ_HEADERS_PUBLIC)) do @$(COPY) %f "$(INCLUDE_INSTALL_DIR)"
+!endif
+
+!if "$(DISABLE_STANDARD_TARGETS)" == ""
+DISABLE_STANDARD_TARGETS = 0
+!endif
+
+!if "$(DISABLE_TARGET_setup)" == ""
+DISABLE_TARGET_setup = 0
+!endif
+!if "$(DISABLE_TARGET_install)" == ""
+DISABLE_TARGET_install = 0
+!endif
+!if "$(DISABLE_TARGET_clean)" == ""
+DISABLE_TARGET_clean = 0
+!endif
+!if "$(DISABLE_TARGET_test)" == ""
+DISABLE_TARGET_test = 0
+!endif
+!if "$(DISABLE_TARGET_shell)" == ""
+DISABLE_TARGET_shell = 0
+!endif
+
+!if !$(DISABLE_STANDARD_TARGETS)
+!if !$(DISABLE_TARGET_setup)
+setup: default-setup
+!endif
+!if !$(DISABLE_TARGET_install)
+install: default-install
+!endif
+!if !$(DISABLE_TARGET_clean)
+clean: default-clean
+realclean: hose
+hose: default-hose
+distclean: realclean default-distclean
+!endif
+!if !$(DISABLE_TARGET_test)
+test: default-test
+!endif
+!if !$(DISABLE_TARGET_shell)
+shell: default-shell
+!endif
+!endif # DISABLE_STANDARD_TARGETS
diff --git a/pkgs/tdbcsqlite3-1.0.5/tclconfig/tcl.m4 b/pkgs/tdbcsqlite3-1.0.5/tclconfig/tcl.m4
deleted file mode 100644 (file)
index 203a05d..0000000
+++ /dev/null
@@ -1,4241 +0,0 @@
-# tcl.m4 --
-#
-#      This file provides a set of autoconf macros to help TEA-enable
-#      a Tcl extension.
-#
-# Copyright (c) 1999-2000 Ajuba Solutions.
-# Copyright (c) 2002-2005 ActiveState Corporation.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-
-AC_PREREQ(2.57)
-
-dnl TEA extensions pass us the version of TEA they think they
-dnl are compatible with (must be set in TEA_INIT below)
-dnl TEA_VERSION="3.10"
-
-# Possible values for key variables defined:
-#
-# TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem')
-# TEA_PLATFORM        - windows unix
-# TEA_TK_EXTENSION    - True if this is a Tk extension
-#
-
-#------------------------------------------------------------------------
-# TEA_PATH_TCLCONFIG --
-#
-#      Locate the tclConfig.sh file and perform a sanity check on
-#      the Tcl compile flags
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-tcl=...
-#
-#      Defines the following vars:
-#              TCL_BIN_DIR     Full path to the directory containing
-#                              the tclConfig.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_TCLCONFIG], [
-    dnl TEA specific: Make sure we are initialized
-    AC_REQUIRE([TEA_INIT])
-    #
-    # Ok, lets find the tcl configuration
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-tcl
-    #
-
-    if test x"${no_tcl}" = x ; then
-       # we reset no_tcl in case something fails here
-       no_tcl=true
-       AC_ARG_WITH(tcl,
-           AC_HELP_STRING([--with-tcl],
-               [directory containing tcl configuration (tclConfig.sh)]),
-           with_tclconfig="${withval}")
-       AC_MSG_CHECKING([for Tcl configuration])
-       AC_CACHE_VAL(ac_cv_c_tclconfig,[
-
-           # First check to see if --with-tcl was specified.
-           if test x"${with_tclconfig}" != x ; then
-               case "${with_tclconfig}" in
-                   */tclConfig.sh )
-                       if test -f "${with_tclconfig}"; then
-                           AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself])
-                           with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`"
-                       fi ;;
-               esac
-               if test -f "${with_tclconfig}/tclConfig.sh" ; then
-                   ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`"
-               else
-                   AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
-               fi
-           fi
-
-           # then check for a private Tcl installation
-           if test x"${ac_cv_c_tclconfig}" = x ; then
-               for i in \
-                       ../tcl \
-                       `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../tcl \
-                       `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../../tcl \
-                       `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # on Darwin, check in Framework installation locations
-           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
-               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
-                       `ls -d /Library/Frameworks 2>/dev/null` \
-                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
-                       `ls -d /System/Library/Frameworks 2>/dev/null` \
-                       ; do
-                   if test -f "$i/Tcl.framework/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # TEA specific: on Windows, check in common installation locations
-           if test "${TEA_PLATFORM}" = "windows" \
-               -a x"${ac_cv_c_tclconfig}" = x ; then
-               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
-                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few common install locations
-           if test x"${ac_cv_c_tclconfig}" = x ; then
-               for i in `ls -d ${libdir} 2>/dev/null` \
-                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
-                       `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
-                       `ls -d /usr/contrib/lib 2>/dev/null` \
-                       `ls -d /usr/lib 2>/dev/null` \
-                       `ls -d /usr/lib64 2>/dev/null` \
-                       `ls -d /usr/lib/tcl8.6 2>/dev/null` \
-                       `ls -d /usr/lib/tcl8.5 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few other private locations
-           if test x"${ac_cv_c_tclconfig}" = x ; then
-               for i in \
-                       ${srcdir}/../tcl \
-                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tclConfig.sh" ; then
-                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-       ])
-
-       if test x"${ac_cv_c_tclconfig}" = x ; then
-           TCL_BIN_DIR="# no Tcl configs found"
-           AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh])
-       else
-           no_tcl=
-           TCL_BIN_DIR="${ac_cv_c_tclconfig}"
-           AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PATH_TKCONFIG --
-#
-#      Locate the tkConfig.sh file
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-tk=...
-#
-#      Defines the following vars:
-#              TK_BIN_DIR      Full path to the directory containing
-#                              the tkConfig.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_TKCONFIG], [
-    #
-    # Ok, lets find the tk configuration
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-tk
-    #
-
-    if test x"${no_tk}" = x ; then
-       # we reset no_tk in case something fails here
-       no_tk=true
-       AC_ARG_WITH(tk,
-           AC_HELP_STRING([--with-tk],
-               [directory containing tk configuration (tkConfig.sh)]),
-           with_tkconfig="${withval}")
-       AC_MSG_CHECKING([for Tk configuration])
-       AC_CACHE_VAL(ac_cv_c_tkconfig,[
-
-           # First check to see if --with-tkconfig was specified.
-           if test x"${with_tkconfig}" != x ; then
-               case "${with_tkconfig}" in
-                   */tkConfig.sh )
-                       if test -f "${with_tkconfig}"; then
-                           AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself])
-                           with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`"
-                       fi ;;
-               esac
-               if test -f "${with_tkconfig}/tkConfig.sh" ; then
-                   ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`"
-               else
-                   AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
-               fi
-           fi
-
-           # then check for a private Tk library
-           if test x"${ac_cv_c_tkconfig}" = x ; then
-               for i in \
-                       ../tk \
-                       `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../tk \
-                       `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
-                       ../../../tk \
-                       `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # on Darwin, check in Framework installation locations
-           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then
-               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
-                       `ls -d /Library/Frameworks 2>/dev/null` \
-                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
-                       `ls -d /System/Library/Frameworks 2>/dev/null` \
-                       ; do
-                   if test -f "$i/Tk.framework/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few common install locations
-           if test x"${ac_cv_c_tkconfig}" = x ; then
-               for i in `ls -d ${libdir} 2>/dev/null` \
-                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
-                       `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
-                       `ls -d /usr/contrib/lib 2>/dev/null` \
-                       `ls -d /usr/lib 2>/dev/null` \
-                       `ls -d /usr/lib64 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # TEA specific: on Windows, check in common installation locations
-           if test "${TEA_PLATFORM}" = "windows" \
-               -a x"${ac_cv_c_tkconfig}" = x ; then
-               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
-                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
-                       ; do
-                   if test -f "$i/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few other private locations
-           if test x"${ac_cv_c_tkconfig}" = x ; then
-               for i in \
-                       ${srcdir}/../tk \
-                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
-                   if test "${TEA_PLATFORM}" = "windows" \
-                           -a -f "$i/win/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
-                       break
-                   fi
-                   if test -f "$i/unix/tkConfig.sh" ; then
-                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
-                       break
-                   fi
-               done
-           fi
-       ])
-
-       if test x"${ac_cv_c_tkconfig}" = x ; then
-           TK_BIN_DIR="# no Tk configs found"
-           AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh])
-       else
-           no_tk=
-           TK_BIN_DIR="${ac_cv_c_tkconfig}"
-           AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_TCLCONFIG --
-#
-#      Load the tclConfig.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              TCL_BIN_DIR
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TCL_BIN_DIR
-#              TCL_SRC_DIR
-#              TCL_LIB_FILE
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_TCLCONFIG], [
-    AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh])
-
-    if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
-        AC_MSG_RESULT([loading])
-       . "${TCL_BIN_DIR}/tclConfig.sh"
-    else
-        AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh])
-    fi
-
-    # eval is required to do the TCL_DBGX substitution
-    eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
-    eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
-
-    # If the TCL_BIN_DIR is the build directory (not the install directory),
-    # then set the common variable name to the value of the build variables.
-    # For example, the variable TCL_LIB_SPEC will be set to the value
-    # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
-    # instead of TCL_BUILD_LIB_SPEC since it will work with both an
-    # installed and uninstalled version of Tcl.
-    if test -f "${TCL_BIN_DIR}/Makefile" ; then
-        TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}"
-        TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}"
-        TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}"
-    elif test "`uname -s`" = "Darwin"; then
-       # If Tcl was built as a framework, attempt to use the libraries
-       # from the framework at the given location so that linking works
-       # against Tcl.framework installed in an arbitrary location.
-       case ${TCL_DEFS} in
-           *TCL_FRAMEWORK*)
-               if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
-                   for i in "`cd "${TCL_BIN_DIR}"; pwd`" \
-                            "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do
-                       if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then
-                           TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}"
-                           break
-                       fi
-                   done
-               fi
-               if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then
-                   TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}"
-                   TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"
-               fi
-               ;;
-       esac
-    fi
-
-    # eval is required to do the TCL_DBGX substitution
-    eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
-    eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
-    eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
-    eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
-
-    AC_SUBST(TCL_VERSION)
-    AC_SUBST(TCL_PATCH_LEVEL)
-    AC_SUBST(TCL_BIN_DIR)
-    AC_SUBST(TCL_SRC_DIR)
-
-    AC_SUBST(TCL_LIB_FILE)
-    AC_SUBST(TCL_LIB_FLAG)
-    AC_SUBST(TCL_LIB_SPEC)
-
-    AC_SUBST(TCL_STUB_LIB_FILE)
-    AC_SUBST(TCL_STUB_LIB_FLAG)
-    AC_SUBST(TCL_STUB_LIB_SPEC)
-
-    AC_MSG_CHECKING([platform])
-    hold_cc=$CC; CC="$TCL_CC"
-    AC_TRY_COMPILE(,[
-           #ifdef _WIN32
-               #error win32
-           #endif
-       ], [
-           TEA_PLATFORM="unix"
-           CYGPATH=echo
-       ], [
-           TEA_PLATFORM="windows"
-           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)   ]
-    )
-    CC=$hold_cc
-    AC_MSG_RESULT($TEA_PLATFORM)
-
-    # The BUILD_$pkg is to define the correct extern storage class
-    # handling when making this package
-    AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [],
-           [Building extension source?])
-    # Do this here as we have fully defined TEA_PLATFORM now
-    if test "${TEA_PLATFORM}" = "windows" ; then
-       EXEEXT=".exe"
-       CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp"
-    fi
-
-    # TEA specific:
-    AC_SUBST(CLEANFILES)
-    AC_SUBST(TCL_LIBS)
-    AC_SUBST(TCL_DEFS)
-    AC_SUBST(TCL_EXTRA_CFLAGS)
-    AC_SUBST(TCL_LD_FLAGS)
-    AC_SUBST(TCL_SHLIB_LD_LIBS)
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_TKCONFIG --
-#
-#      Load the tkConfig.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              TK_BIN_DIR
-#
-# Results:
-#
-#      Sets the following vars that should be in tkConfig.sh:
-#              TK_BIN_DIR
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_TKCONFIG], [
-    AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh])
-
-    if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then
-        AC_MSG_RESULT([loading])
-       . "${TK_BIN_DIR}/tkConfig.sh"
-    else
-        AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh])
-    fi
-
-    # eval is required to do the TK_DBGX substitution
-    eval "TK_LIB_FILE=\"${TK_LIB_FILE}\""
-    eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\""
-
-    # If the TK_BIN_DIR is the build directory (not the install directory),
-    # then set the common variable name to the value of the build variables.
-    # For example, the variable TK_LIB_SPEC will be set to the value
-    # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC
-    # instead of TK_BUILD_LIB_SPEC since it will work with both an
-    # installed and uninstalled version of Tcl.
-    if test -f "${TK_BIN_DIR}/Makefile" ; then
-        TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}"
-        TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}"
-        TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}"
-    elif test "`uname -s`" = "Darwin"; then
-       # If Tk was built as a framework, attempt to use the libraries
-       # from the framework at the given location so that linking works
-       # against Tk.framework installed in an arbitrary location.
-       case ${TK_DEFS} in
-           *TK_FRAMEWORK*)
-               if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then
-                   for i in "`cd "${TK_BIN_DIR}"; pwd`" \
-                            "`cd "${TK_BIN_DIR}"/../..; pwd`"; do
-                       if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then
-                           TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}"
-                           break
-                       fi
-                   done
-               fi
-               if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then
-                   TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}"
-                   TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"
-               fi
-               ;;
-       esac
-    fi
-
-    # eval is required to do the TK_DBGX substitution
-    eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\""
-    eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\""
-    eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\""
-    eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\""
-
-    # TEA specific: Ensure windowingsystem is defined
-    if test "${TEA_PLATFORM}" = "unix" ; then
-       case ${TK_DEFS} in
-           *MAC_OSX_TK*)
-               AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?])
-               TEA_WINDOWINGSYSTEM="aqua"
-               ;;
-           *)
-               TEA_WINDOWINGSYSTEM="x11"
-               ;;
-       esac
-    elif test "${TEA_PLATFORM}" = "windows" ; then
-       TEA_WINDOWINGSYSTEM="win32"
-    fi
-
-    AC_SUBST(TK_VERSION)
-    AC_SUBST(TK_BIN_DIR)
-    AC_SUBST(TK_SRC_DIR)
-
-    AC_SUBST(TK_LIB_FILE)
-    AC_SUBST(TK_LIB_FLAG)
-    AC_SUBST(TK_LIB_SPEC)
-
-    AC_SUBST(TK_STUB_LIB_FILE)
-    AC_SUBST(TK_STUB_LIB_FLAG)
-    AC_SUBST(TK_STUB_LIB_SPEC)
-
-    # TEA specific:
-    AC_SUBST(TK_LIBS)
-    AC_SUBST(TK_XINCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_PROG_TCLSH
-#      Determine the fully qualified path name of the tclsh executable
-#      in the Tcl build directory or the tclsh installed in a bin
-#      directory. This macro will correctly determine the name
-#      of the tclsh executable even if tclsh has not yet been
-#      built in the build directory. The tclsh found is always
-#      associated with a tclConfig.sh file. This tclsh should be used
-#      only for running extension test cases. It should never be
-#      or generation of files (like pkgIndex.tcl) at build time.
-#
-# Arguments:
-#      none
-#
-# Results:
-#      Substitutes the following vars:
-#              TCLSH_PROG
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PROG_TCLSH], [
-    AC_MSG_CHECKING([for tclsh])
-    if test -f "${TCL_BIN_DIR}/Makefile" ; then
-        # tclConfig.sh is in Tcl build directory
-        if test "${TEA_PLATFORM}" = "windows"; then
-          if test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
-          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}"
-          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}"
-          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}" ; then
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}"
-          fi
-        else
-            TCLSH_PROG="${TCL_BIN_DIR}/tclsh"
-        fi
-    else
-        # tclConfig.sh is in install location
-        if test "${TEA_PLATFORM}" = "windows"; then
-            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
-        else
-            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}"
-        fi
-        list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \
-              `ls -d ${TCL_BIN_DIR}/..     2>/dev/null` \
-              `ls -d ${TCL_PREFIX}/bin     2>/dev/null`"
-        for i in $list ; do
-            if test -f "$i/${TCLSH_PROG}" ; then
-                REAL_TCL_BIN_DIR="`cd "$i"; pwd`/"
-                break
-            fi
-        done
-        TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}"
-    fi
-    AC_MSG_RESULT([${TCLSH_PROG}])
-    AC_SUBST(TCLSH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_PROG_WISH
-#      Determine the fully qualified path name of the wish executable
-#      in the Tk build directory or the wish installed in a bin
-#      directory. This macro will correctly determine the name
-#      of the wish executable even if wish has not yet been
-#      built in the build directory. The wish found is always
-#      associated with a tkConfig.sh file. This wish should be used
-#      only for running extension test cases. It should never be
-#      or generation of files (like pkgIndex.tcl) at build time.
-#
-# Arguments:
-#      none
-#
-# Results:
-#      Substitutes the following vars:
-#              WISH_PROG
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PROG_WISH], [
-    AC_MSG_CHECKING([for wish])
-    if test -f "${TK_BIN_DIR}/Makefile" ; then
-        # tkConfig.sh is in Tk build directory
-        if test "${TEA_PLATFORM}" = "windows"; then
-          if test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
-          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}s${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}$s{EXEEXT}"
-          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}"
-          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}" ; then
-            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}"
-          fi
-        else
-            WISH_PROG="${TK_BIN_DIR}/wish"
-        fi
-    else
-        # tkConfig.sh is in install location
-        if test "${TEA_PLATFORM}" = "windows"; then
-            WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
-        else
-            WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}"
-        fi
-        list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \
-              `ls -d ${TK_BIN_DIR}/..     2>/dev/null` \
-              `ls -d ${TK_PREFIX}/bin     2>/dev/null`"
-        for i in $list ; do
-            if test -f "$i/${WISH_PROG}" ; then
-                REAL_TK_BIN_DIR="`cd "$i"; pwd`/"
-                break
-            fi
-        done
-        WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}"
-    fi
-    AC_MSG_RESULT([${WISH_PROG}])
-    AC_SUBST(WISH_PROG)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_SHARED --
-#
-#      Allows the building of shared libraries
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-shared=yes|no
-#              --enable-stubs=yes|no
-#
-#      Defines the following vars:
-#              STATIC_BUILD    Used for building import/export libraries
-#                              on Windows.
-#
-#      Sets the following vars:
-#              SHARED_BUILD    Value of 1 or 0
-#               STUBS_BUILD     Value if 1 or 0
-#               USE_TCL_STUBS   Value true: if SHARED_BUILD or --enable-stubs
-#               USE_TCLOO_STUBS Value true: if SHARED_BUILD or --enable-stubs
-#               USE_TK_STUBS    Value true: if SHARED_BUILD or --enable-stubs
-#                                AND TEA_WINDOWING_SYSTEM != ""
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ENABLE_SHARED], [
-    AC_MSG_CHECKING([how to build libraries])
-    AC_ARG_ENABLE(shared,
-       AC_HELP_STRING([--enable-shared],
-           [build and link with shared libraries (default: on)]),
-       [shared_ok=$enableval], [shared_ok=yes])
-
-    if test "${enable_shared+set}" = set; then
-       enableval="$enable_shared"
-       shared_ok=$enableval
-    else
-       shared_ok=yes
-    fi
-
-    AC_ARG_ENABLE(stubs,
-       AC_HELP_STRING([--enable-stubs],
-           [build and link with stub libraries. Always true for shared builds (default: on)]),
-       [stubs_ok=$enableval], [stubs_ok=yes])
-
-    if test "${enable_stubs+set}" = set; then
-       enableval="$enable_stubs"
-       stubs_ok=$enableval
-    else
-       stubs_ok=yes
-    fi
-
-    # Stubs are always enabled for shared builds
-    if test "$shared_ok" = "yes" ; then
-       AC_MSG_RESULT([shared])
-       SHARED_BUILD=1
-        STUBS_BUILD=1
-    else
-       AC_MSG_RESULT([static])
-       SHARED_BUILD=0
-       AC_DEFINE(STATIC_BUILD, 1, [This a static build])
-        if test "$stubs_ok" = "yes" ; then
-          STUBS_BUILD=1
-        else
-          STUBS_BUILD=0
-        fi
-    fi
-    if test "${STUBS_BUILD}" = "1" ; then
-      AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs])
-      AC_DEFINE(USE_TCLOO_STUBS, 1, [Use TclOO stubs])
-      if test "${TEA_WINDOWINGSYSTEM}" != ""; then
-        AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs])
-      fi
-    fi
-
-    AC_SUBST(SHARED_BUILD)
-    AC_SUBST(STUBS_BUILD)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_THREADS --
-#
-#      Specify if thread support should be enabled.  If "yes" is specified
-#      as an arg (optional), threads are enabled by default, "no" means
-#      threads are disabled.  "yes" is the default.
-#
-#      TCL_THREADS is checked so that if you are compiling an extension
-#      against a threaded core, your extension must be compiled threaded
-#      as well.
-#
-#      Note that it is legal to have a thread enabled extension run in a
-#      threaded or non-threaded Tcl core, but a non-threaded extension may
-#      only run in a non-threaded Tcl core.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-threads
-#
-#      Sets the following vars:
-#              THREADS_LIBS    Thread library(s)
-#
-#      Defines the following vars:
-#              TCL_THREADS
-#              _REENTRANT
-#              _THREAD_SAFE
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_THREADS], [
-    AC_ARG_ENABLE(threads,
-       AC_HELP_STRING([--enable-threads],
-           [build with threads]),
-       [tcl_ok=$enableval], [tcl_ok=yes])
-
-    if test "${enable_threads+set}" = set; then
-       enableval="$enable_threads"
-       tcl_ok=$enableval
-    else
-       tcl_ok=yes
-    fi
-
-    if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
-       TCL_THREADS=1
-
-       if test "${TEA_PLATFORM}" != "windows" ; then
-           # We are always OK on Windows, so check what this platform wants:
-
-           # USE_THREAD_ALLOC tells us to try the special thread-based
-           # allocator that significantly reduces lock contention
-           AC_DEFINE(USE_THREAD_ALLOC, 1,
-               [Do we want to use the threaded memory allocator?])
-           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
-           if test "`uname -s`" = "SunOS" ; then
-               AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
-                       [Do we really want to follow the standard? Yes we do!])
-           fi
-           AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?])
-           AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
-           if test "$tcl_ok" = "no"; then
-               # Check a little harder for __pthread_mutex_init in the same
-               # library, as some systems hide it there until pthread.h is
-               # defined.  We could alternatively do an AC_TRY_COMPILE with
-               # pthread.h, but that will work with libpthread really doesn't
-               # exist, like AIX 4.2.  [Bug: 4359]
-               AC_CHECK_LIB(pthread, __pthread_mutex_init,
-                   tcl_ok=yes, tcl_ok=no)
-           fi
-
-           if test "$tcl_ok" = "yes"; then
-               # The space is needed
-               THREADS_LIBS=" -lpthread"
-           else
-               AC_CHECK_LIB(pthreads, pthread_mutex_init,
-                   tcl_ok=yes, tcl_ok=no)
-               if test "$tcl_ok" = "yes"; then
-                   # The space is needed
-                   THREADS_LIBS=" -lpthreads"
-               else
-                   AC_CHECK_LIB(c, pthread_mutex_init,
-                       tcl_ok=yes, tcl_ok=no)
-                   if test "$tcl_ok" = "no"; then
-                       AC_CHECK_LIB(c_r, pthread_mutex_init,
-                           tcl_ok=yes, tcl_ok=no)
-                       if test "$tcl_ok" = "yes"; then
-                           # The space is needed
-                           THREADS_LIBS=" -pthread"
-                       else
-                           TCL_THREADS=0
-                           AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled])
-                       fi
-                   fi
-               fi
-           fi
-       fi
-    else
-       TCL_THREADS=0
-    fi
-    # Do checking message here to not mess up interleaved configure output
-    AC_MSG_CHECKING([for building with threads])
-    if test "${TCL_THREADS}" = 1; then
-       AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?])
-       AC_MSG_RESULT([yes (default)])
-    else
-       AC_MSG_RESULT([no])
-    fi
-    # TCL_THREADS sanity checking.  See if our request for building with
-    # threads is the same as the way Tcl was built.  If not, warn the user.
-    case ${TCL_DEFS} in
-       *THREADS=1*)
-           if test "${TCL_THREADS}" = "0"; then
-               AC_MSG_WARN([
-    Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
-    that IS thread-enabled.  It is recommended to use --enable-threads.])
-           fi
-           ;;
-       *)
-           if test "${TCL_THREADS}" = "1"; then
-               AC_MSG_WARN([
-    --enable-threads requested, but building against a Tcl that is NOT
-    thread-enabled.  This is an OK configuration that will also run in
-    a thread-enabled core.])
-           fi
-           ;;
-    esac
-    AC_SUBST(TCL_THREADS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_SYMBOLS --
-#
-#      Specify if debugging symbols should be used.
-#      Memory (TCL_MEM_DEBUG) debugging can also be enabled.
-#
-# Arguments:
-#      none
-#
-#      TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives
-#      the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted.
-#      Requires the following vars to be set in the Makefile:
-#              CFLAGS_DEFAULT
-#              LDFLAGS_DEFAULT
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-symbols
-#
-#      Defines the following vars:
-#              CFLAGS_DEFAULT  Sets to $(CFLAGS_DEBUG) if true
-#                              Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false
-#              LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
-#                              Sets to $(LDFLAGS_OPTIMIZE) if false
-#              DBGX            Formerly used as debug library extension;
-#                              always blank now.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_SYMBOLS], [
-    dnl TEA specific: Make sure we are initialized
-    AC_REQUIRE([TEA_CONFIG_CFLAGS])
-    AC_MSG_CHECKING([for build with symbols])
-    AC_ARG_ENABLE(symbols,
-       AC_HELP_STRING([--enable-symbols],
-           [build with debugging symbols (default: off)]),
-       [tcl_ok=$enableval], [tcl_ok=no])
-    DBGX=""
-    if test "$tcl_ok" = "no"; then
-       CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG"
-       LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
-       AC_MSG_RESULT([no])
-    else
-       CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
-       LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
-       if test "$tcl_ok" = "yes"; then
-           AC_MSG_RESULT([yes (standard debugging)])
-       fi
-    fi
-    # TEA specific:
-    if test "${TEA_PLATFORM}" != "windows" ; then
-       LDFLAGS_DEFAULT="${LDFLAGS}"
-    fi
-    AC_SUBST(CFLAGS_DEFAULT)
-    AC_SUBST(LDFLAGS_DEFAULT)
-    AC_SUBST(TCL_DBGX)
-
-    if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
-       AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?])
-    fi
-
-    if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
-       if test "$tcl_ok" = "all"; then
-           AC_MSG_RESULT([enabled symbols mem debugging])
-       else
-           AC_MSG_RESULT([enabled $tcl_ok debugging])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_ENABLE_LANGINFO --
-#
-#      Allows use of modern nl_langinfo check for better l10n.
-#      This is only relevant for Unix.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --enable-langinfo=yes|no (default is yes)
-#
-#      Defines the following vars:
-#              HAVE_LANGINFO   Triggers use of nl_langinfo if defined.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_ENABLE_LANGINFO], [
-    AC_ARG_ENABLE(langinfo,
-       AC_HELP_STRING([--enable-langinfo],
-           [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]),
-       [langinfo_ok=$enableval], [langinfo_ok=yes])
-
-    HAVE_LANGINFO=0
-    if test "$langinfo_ok" = "yes"; then
-       AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no])
-    fi
-    AC_MSG_CHECKING([whether to use nl_langinfo])
-    if test "$langinfo_ok" = "yes"; then
-       AC_CACHE_VAL(tcl_cv_langinfo_h, [
-           AC_TRY_COMPILE([#include <langinfo.h>], [nl_langinfo(CODESET);],
-                   [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])])
-       AC_MSG_RESULT([$tcl_cv_langinfo_h])
-       if test $tcl_cv_langinfo_h = yes; then
-           AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?])
-       fi
-    else
-       AC_MSG_RESULT([$langinfo_ok])
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_CONFIG_SYSTEM
-#
-#      Determine what the system is (some things cannot be easily checked
-#      on a feature-driven basis, alas). This can usually be done via the
-#      "uname" command.
-#
-# Arguments:
-#      none
-#
-# Results:
-#      Defines the following var:
-#
-#      system -        System/platform/version identification code.
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_CONFIG_SYSTEM], [
-    AC_CACHE_CHECK([system version], tcl_cv_sys_version, [
-       # TEA specific:
-       if test "${TEA_PLATFORM}" = "windows" ; then
-           tcl_cv_sys_version=windows
-       else
-           tcl_cv_sys_version=`uname -s`-`uname -r`
-           if test "$?" -ne 0 ; then
-               AC_MSG_WARN([can't find uname command])
-               tcl_cv_sys_version=unknown
-           else
-               if test "`uname -s`" = "AIX" ; then
-                   tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
-               fi
-           fi
-       fi
-    ])
-    system=$tcl_cv_sys_version
-])
-
-#--------------------------------------------------------------------
-# TEA_CONFIG_CFLAGS
-#
-#      Try to determine the proper flags to pass to the compiler
-#      for building shared libraries and other such nonsense.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines and substitutes the following vars:
-#
-#      DL_OBJS, DL_LIBS - removed for TEA, only needed by core.
-#       LDFLAGS -      Flags to pass to the compiler when linking object
-#                       files into an executable application binary such
-#                       as tclsh.
-#       LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
-#                       that tell the run-time dynamic linker where to look
-#                       for shared libraries such as libtcl.so.  Depends on
-#                       the variable LIB_RUNTIME_DIR in the Makefile. Could
-#                       be the same as CC_SEARCH_FLAGS if ${CC} is used to link.
-#       CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib",
-#                       that tell the run-time dynamic linker where to look
-#                       for shared libraries such as libtcl.so.  Depends on
-#                       the variable LIB_RUNTIME_DIR in the Makefile.
-#       SHLIB_CFLAGS -  Flags to pass to cc when compiling the components
-#                       of a shared library (may request position-independent
-#                       code, among other things).
-#       SHLIB_LD -      Base command to use for combining object files
-#                       into a shared library.
-#       SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
-#                       creating shared libraries.  This symbol typically
-#                       goes at the end of the "ld" commands that build
-#                       shared libraries. The value of the symbol defaults to
-#                       "${LIBS}" if all of the dependent libraries should
-#                       be specified when creating a shared library.  If
-#                       dependent libraries should not be specified (as on
-#                       SunOS 4.x, where they cause the link to fail, or in
-#                       general if Tcl and Tk aren't themselves shared
-#                       libraries), then this symbol has an empty string
-#                       as its value.
-#       SHLIB_SUFFIX -  Suffix to use for the names of dynamically loadable
-#                       extensions.  An empty string means we don't know how
-#                       to use shared libraries on this platform.
-#       LIB_SUFFIX -    Specifies everything that comes after the "libfoo"
-#                       in a static or shared library name, using the $PACKAGE_VERSION variable
-#                       to put the version in the right place.  This is used
-#                       by platforms that need non-standard library names.
-#                       Examples:  ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs
-#                       to have a version after the .so, and ${PACKAGE_VERSION}.a
-#                       on AIX, since a shared library needs to have
-#                       a .a extension whereas shared objects for loadable
-#                       extensions have a .so extension.  Defaults to
-#                       ${PACKAGE_VERSION}${SHLIB_SUFFIX}.
-#      CFLAGS_DEBUG -
-#                      Flags used when running the compiler in debug mode
-#      CFLAGS_OPTIMIZE -
-#                      Flags used when running the compiler in optimize mode
-#      CFLAGS -        Additional CFLAGS added as necessary (usually 64-bit)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_CONFIG_CFLAGS], [
-    dnl TEA specific: Make sure we are initialized
-    AC_REQUIRE([TEA_INIT])
-
-    # Step 0.a: Enable 64 bit support?
-
-    AC_MSG_CHECKING([if 64bit support is requested])
-    AC_ARG_ENABLE(64bit,
-       AC_HELP_STRING([--enable-64bit],
-           [enable 64bit support (default: off)]),
-       [do64bit=$enableval], [do64bit=no])
-    AC_MSG_RESULT([$do64bit])
-
-    # Step 0.b: Enable Solaris 64 bit VIS support?
-
-    AC_MSG_CHECKING([if 64bit Sparc VIS support is requested])
-    AC_ARG_ENABLE(64bit-vis,
-       AC_HELP_STRING([--enable-64bit-vis],
-           [enable 64bit Sparc VIS support (default: off)]),
-       [do64bitVIS=$enableval], [do64bitVIS=no])
-    AC_MSG_RESULT([$do64bitVIS])
-    # Force 64bit on with VIS
-    AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes])
-
-    # Step 0.c: Check if visibility support is available. Do this here so
-    # that platform specific alternatives can be used below if this fails.
-
-    AC_CACHE_CHECK([if compiler supports visibility "hidden"],
-       tcl_cv_cc_visibility_hidden, [
-       hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror"
-       AC_TRY_LINK([
-           extern __attribute__((__visibility__("hidden"))) void f(void);
-           void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes,
-           tcl_cv_cc_visibility_hidden=no)
-       CFLAGS=$hold_cflags])
-    AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [
-       AC_DEFINE(MODULE_SCOPE,
-           [extern __attribute__((__visibility__("hidden")))],
-           [Compiler support for module scope symbols])
-       AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols])
-    ])
-
-    # Step 0.d: Disable -rpath support?
-
-    AC_MSG_CHECKING([if rpath support is requested])
-    AC_ARG_ENABLE(rpath,
-       AC_HELP_STRING([--disable-rpath],
-           [disable rpath support (default: on)]),
-       [doRpath=$enableval], [doRpath=yes])
-    AC_MSG_RESULT([$doRpath])
-
-    # TEA specific: Cross-compiling options for Windows/CE builds?
-
-    AS_IF([test "${TEA_PLATFORM}" = windows], [
-       AC_MSG_CHECKING([if Windows/CE build is requested])
-       AC_ARG_ENABLE(wince,
-           AC_HELP_STRING([--enable-wince],
-               [enable Win/CE support (where applicable)]),
-           [doWince=$enableval], [doWince=no])
-       AC_MSG_RESULT([$doWince])
-    ])
-
-    # Set the variable "system" to hold the name and version number
-    # for the system.
-
-    TEA_CONFIG_SYSTEM
-
-    # Require ranlib early so we can override it in special cases below.
-
-    AC_REQUIRE([AC_PROG_RANLIB])
-
-    # Set configuration options based on system name and version.
-    # This is similar to Tcl's unix/tcl.m4 except that we've added a
-    # "windows" case and removed some core-only vars.
-
-    do64bit_ok=no
-    # default to '{$LIBS}' and set to "" on per-platform necessary basis
-    SHLIB_LD_LIBS='${LIBS}'
-    # When ld needs options to work in 64-bit mode, put them in
-    # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load]
-    # is disabled by the user. [Bug 1016796]
-    LDFLAGS_ARCH=""
-    UNSHARED_LIB_SUFFIX=""
-    # TEA specific: use PACKAGE_VERSION instead of VERSION
-    TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
-    ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
-    TCL_LIB_VERSIONS_OK=ok
-    CFLAGS_DEBUG=-g
-    AS_IF([test "$GCC" = yes], [
-       CFLAGS_OPTIMIZE=-O2
-       CFLAGS_WARNING="-Wall"
-    ], [
-       CFLAGS_OPTIMIZE=-O
-       CFLAGS_WARNING=""
-    ])
-    AC_CHECK_TOOL(AR, ar)
-    STLIB_LD='${AR} cr'
-    LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
-    AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION=""],[SHLIB_VERSION=".$SHLIB_VERSION"])
-    case $system in
-       # TEA specific:
-       windows)
-           # This is a 2-stage check to make sure we have the 64-bit SDK
-           # We have to know where the SDK is installed.
-           # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs
-           # MACHINE is IX86 for LINK, but this is used by the manifest,
-           # which requires x86|amd64|ia64.
-           MACHINE="X86"
-           if test "$do64bit" != "no" ; then
-               if test "x${MSSDK}x" = "xx" ; then
-                   MSSDK="C:/Progra~1/Microsoft Platform SDK"
-               fi
-               MSSDK=`echo "$MSSDK" | sed -e  's!\\\!/!g'`
-               PATH64=""
-               case "$do64bit" in
-                   amd64|x64|yes)
-                       MACHINE="AMD64" ; # default to AMD64 64-bit build
-                       PATH64="${MSSDK}/Bin/Win64/x86/AMD64"
-                       ;;
-                   ia64)
-                       MACHINE="IA64"
-                       PATH64="${MSSDK}/Bin/Win64"
-                       ;;
-               esac
-               if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then
-                   AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode])
-                   AC_MSG_WARN([Ensure latest Platform SDK is installed])
-                   do64bit="no"
-               else
-                   AC_MSG_RESULT([   Using 64-bit $MACHINE mode])
-                   do64bit_ok="yes"
-               fi
-           fi
-
-           if test "$doWince" != "no" ; then
-               if test "$do64bit" != "no" ; then
-                   AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible])
-               fi
-               if test "$GCC" = "yes" ; then
-                   AC_MSG_ERROR([Windows/CE and GCC builds incompatible])
-               fi
-               TEA_PATH_CELIB
-               # Set defaults for common evc4/PPC2003 setup
-               # Currently Tcl requires 300+, possibly 420+ for sockets
-               CEVERSION=420;          # could be 211 300 301 400 420 ...
-               TARGETCPU=ARMV4;        # could be ARMV4 ARM MIPS SH3 X86 ...
-               ARCH=ARM;               # could be ARM MIPS X86EM ...
-               PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
-               if test "$doWince" != "yes"; then
-                   # If !yes then the user specified something
-                   # Reset ARCH to allow user to skip specifying it
-                   ARCH=
-                   eval `echo $doWince | awk -F, '{ \
-           if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \
-           if ([$]1 < 400)   { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
-           if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \
-           if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \
-           if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \
-                   }'`
-                   if test "x${ARCH}" = "x" ; then
-                       ARCH=$TARGETCPU;
-                   fi
-               fi
-               OSVERSION=WCE$CEVERSION;
-               if test "x${WCEROOT}" = "x" ; then
-                       WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
-                   if test ! -d "${WCEROOT}" ; then
-                       WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
-                   fi
-               fi
-               if test "x${SDKROOT}" = "x" ; then
-                   SDKROOT="C:/Program Files/Windows CE Tools"
-                   if test ! -d "${SDKROOT}" ; then
-                       SDKROOT="C:/Windows CE Tools"
-                   fi
-               fi
-               WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
-               SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
-               if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \
-                   -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
-                   AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]])
-                   doWince="no"
-               else
-                   # We could PATH_NOSPACE these, but that's not important,
-                   # as long as we quote them when used.
-                   CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
-                   if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
-                       CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
-                   fi
-                   CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
-               fi
-           fi
-
-           if test "$GCC" != "yes" ; then
-               if test "${SHARED_BUILD}" = "0" ; then
-                   runtime=-MT
-               else
-                   runtime=-MD
-               fi
-               case "x`echo \${VisualStudioVersion}`" in
-                   x1[[4-9]]*)
-                       lflags="${lflags} -nodefaultlib:libucrt.lib"
-                       TEA_ADD_LIBS([ucrt.lib])
-                   ;;
-                   *)
-                   ;;
-               esac
-
-                if test "$do64bit" != "no" ; then
-                   # All this magic is necessary for the Win64 SDK RC1 - hobbs
-                   CC="\"${PATH64}/cl.exe\""
-                   CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\""
-                   RC="\"${MSSDK}/bin/rc.exe\""
-                   lflags="${lflags} -nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\""
-                   LINKBIN="\"${PATH64}/link.exe\""
-                   CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d"
-                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
-                   # Avoid 'unresolved external symbol __security_cookie'
-                   # errors, c.f. http://support.microsoft.com/?id=894573
-                   TEA_ADD_LIBS([bufferoverflowU.lib])
-               elif test "$doWince" != "no" ; then
-                   CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
-                   if test "${TARGETCPU}" = "X86"; then
-                       CC="\"${CEBINROOT}/cl.exe\""
-                   else
-                       CC="\"${CEBINROOT}/cl${ARCH}.exe\""
-                   fi
-                   CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
-                   RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
-                   arch=`echo ${ARCH} | awk '{print tolower([$]0)}'`
-                   defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS"
-                   if test "${SHARED_BUILD}" = "1" ; then
-                       # Static CE builds require static celib as well
-                       defs="${defs} _DLL"
-                   fi
-                   for i in $defs ; do
-                       AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i)
-                   done
-                   AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version])
-                   AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version])
-                   CFLAGS_DEBUG="-nologo -Zi -Od"
-                   CFLAGS_OPTIMIZE="-nologo -Ox"
-                   lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
-                   lflags="${lflags} -MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
-                   LINKBIN="\"${CEBINROOT}/link.exe\""
-                   AC_SUBST(CELIB_DIR)
-               else
-                   RC="rc"
-                   lflags="${lflags} -nologo"
-                   LINKBIN="link"
-                   CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d"
-                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
-               fi
-           fi
-
-           if test "$GCC" = "yes"; then
-               # mingw gcc mode
-               AC_CHECK_TOOL(RC, windres)
-               CFLAGS_DEBUG="-g"
-               CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
-               SHLIB_LD='${CC} -shared'
-               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
-               LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}"
-               LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}"
-
-               AC_CACHE_CHECK(for cross-compile version of gcc,
-                       ac_cv_cross,
-                       AC_TRY_COMPILE([
-                           #ifdef _WIN32
-                               #error cross-compiler
-                           #endif
-                       ], [],
-                       ac_cv_cross=yes,
-                       ac_cv_cross=no)
-                     )
-                     if test "$ac_cv_cross" = "yes"; then
-                       case "$do64bit" in
-                           amd64|x64|yes)
-                               CC="x86_64-w64-mingw32-gcc"
-                               LD="x86_64-w64-mingw32-ld"
-                               AR="x86_64-w64-mingw32-ar"
-                               RANLIB="x86_64-w64-mingw32-ranlib"
-                               RC="x86_64-w64-mingw32-windres"
-                           ;;
-                           *)
-                               CC="i686-w64-mingw32-gcc"
-                               LD="i686-w64-mingw32-ld"
-                               AR="i686-w64-mingw32-ar"
-                               RANLIB="i686-w64-mingw32-ranlib"
-                               RC="i686-w64-mingw32-windres"
-                           ;;
-                       esac
-               fi
-
-           else
-               SHLIB_LD="${LINKBIN} -dll ${lflags}"
-               # link -lib only works when -lib is the first arg
-               STLIB_LD="${LINKBIN} -lib ${lflags}"
-               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib'
-               PATHTYPE=-w
-               # For information on what debugtype is most useful, see:
-               # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
-               # and also
-               # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx
-               # This essentially turns it all on.
-               LDFLAGS_DEBUG="-debug -debugtype:cv"
-               LDFLAGS_OPTIMIZE="-release"
-               if test "$doWince" != "no" ; then
-                   LDFLAGS_CONSOLE="-link ${lflags}"
-                   LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
-               else
-                   LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
-                   LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
-               fi
-           fi
-
-           SHLIB_SUFFIX=".dll"
-           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll'
-
-           TCL_LIB_VERSIONS_OK=nodots
-           ;;
-       AIX-*)
-           AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [
-               # AIX requires the _r compiler when gcc isn't being used
-               case "${CC}" in
-                   *_r|*_r\ *)
-                       # ok ...
-                       ;;
-                   *)
-                       # Make sure only first arg gets _r
-                       CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'`
-                       ;;
-               esac
-               AC_MSG_RESULT([Using $CC for compiling with threads])
-           ])
-           LIBS="$LIBS -lc"
-           SHLIB_CFLAGS=""
-           SHLIB_SUFFIX=".so"
-
-           LD_LIBRARY_PATH_VAR="LIBPATH"
-
-           # Check to enable 64-bit flags for compiler/linker
-           AS_IF([test "$do64bit" = yes], [
-               AS_IF([test "$GCC" = yes], [
-                   AC_MSG_WARN([64bit mode not supported with GCC on $system])
-               ], [
-                   do64bit_ok=yes
-                   CFLAGS="$CFLAGS -q64"
-                   LDFLAGS_ARCH="-q64"
-                   RANLIB="${RANLIB} -X64"
-                   AR="${AR} -X64"
-                   SHLIB_LD_FLAGS="-b64"
-               ])
-           ])
-
-           AS_IF([test "`uname -m`" = ia64], [
-               # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
-               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
-               AS_IF([test "$GCC" = yes], [
-                   CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               ], [
-                   CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
-               ])
-               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
-           ], [
-               AS_IF([test "$GCC" = yes], [
-                   SHLIB_LD='${CC} -shared -Wl,-bexpall'
-               ], [
-                   SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry"
-                   LDFLAGS="$LDFLAGS -brtl"
-               ])
-               SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}"
-               CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ])
-           ;;
-       BeOS*)
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -nostart'
-           SHLIB_SUFFIX=".so"
-
-           #-----------------------------------------------------------
-           # Check for inet_ntoa in -lbind, for BeOS (which also needs
-           # -lsocket, even if the network functions are in -lnet which
-           # is always linked to, for compatibility.
-           #-----------------------------------------------------------
-           AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"])
-           ;;
-       BSD/OS-4.*)
-           SHLIB_CFLAGS="-export-dynamic -fPIC"
-           SHLIB_LD='${CC} -shared'
-           SHLIB_SUFFIX=".so"
-           LDFLAGS="$LDFLAGS -export-dynamic"
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       CYGWIN_*)
-           SHLIB_CFLAGS=""
-           SHLIB_LD='${CC} -shared'
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$[@].a"
-           SHLIB_SUFFIX=".dll"
-           EXEEXT=".exe"
-           do64bit_ok=yes
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       Haiku*)
-           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
-           AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
-           ;;
-       HP-UX-*.11.*)
-           # Use updated header definitions where possible
-           AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?])
-           # TEA specific: Needed by Tcl, but not most extensions
-           #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
-           #LIBS="$LIBS -lxnet"               # Use the XOPEN network library
-
-           AS_IF([test "`uname -m`" = ia64], [
-               SHLIB_SUFFIX=".so"
-               # Use newer C++ library for C++ extensions
-               #if test "$GCC" != "yes" ; then
-               #   CPPFLAGS="-AA"
-               #fi
-           ], [
-               SHLIB_SUFFIX=".sl"
-           ])
-           AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
-           AS_IF([test "$tcl_ok" = yes], [
-               LDFLAGS="$LDFLAGS -Wl,-E"
-               CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
-               LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
-               LD_LIBRARY_PATH_VAR="SHLIB_PATH"
-           ])
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_LD='${CC} -shared'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ], [
-               CFLAGS="$CFLAGS -z"
-               # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
-               #CFLAGS="$CFLAGS +DAportable"
-               SHLIB_CFLAGS="+z"
-               SHLIB_LD="ld -b"
-           ])
-
-           # Check to enable 64-bit flags for compiler/linker
-           AS_IF([test "$do64bit" = "yes"], [
-               AS_IF([test "$GCC" = yes], [
-                   case `${CC} -dumpmachine` in
-                       hppa64*)
-                           # 64-bit gcc in use.  Fix flags for GNU ld.
-                           do64bit_ok=yes
-                           SHLIB_LD='${CC} -shared'
-                           AS_IF([test $doRpath = yes], [
-                               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-                           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-                           ;;
-                       *)
-                           AC_MSG_WARN([64bit mode not supported with GCC on $system])
-                           ;;
-                   esac
-               ], [
-                   do64bit_ok=yes
-                   CFLAGS="$CFLAGS +DD64"
-                   LDFLAGS_ARCH="+DD64"
-               ])
-           ]) ;;
-       IRIX-6.*)
-           SHLIB_CFLAGS=""
-           SHLIB_LD="ld -n32 -shared -rdata_shared"
-           SHLIB_SUFFIX=".so"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
-           AS_IF([test "$GCC" = yes], [
-               CFLAGS="$CFLAGS -mabi=n32"
-               LDFLAGS="$LDFLAGS -mabi=n32"
-           ], [
-               case $system in
-                   IRIX-6.3)
-                       # Use to build 6.2 compatible binaries on 6.3.
-                       CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
-                       ;;
-                   *)
-                       CFLAGS="$CFLAGS -n32"
-                       ;;
-               esac
-               LDFLAGS="$LDFLAGS -n32"
-           ])
-           ;;
-       IRIX64-6.*)
-           SHLIB_CFLAGS=""
-           SHLIB_LD="ld -n32 -shared -rdata_shared"
-           SHLIB_SUFFIX=".so"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
-
-           # Check to enable 64-bit flags for compiler/linker
-
-           AS_IF([test "$do64bit" = yes], [
-               AS_IF([test "$GCC" = yes], [
-                   AC_MSG_WARN([64bit mode not supported by gcc])
-               ], [
-                   do64bit_ok=yes
-                   SHLIB_LD="ld -64 -shared -rdata_shared"
-                   CFLAGS="$CFLAGS -64"
-                   LDFLAGS_ARCH="-64"
-               ])
-           ])
-           ;;
-       Linux*|GNU*|NetBSD-Debian)
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_SUFFIX=".so"
-
-           # TEA specific:
-           CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
-
-           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
-           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"])
-           AS_IF([test $do64bit = yes], [
-               AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [
-                   hold_cflags=$CFLAGS
-                   CFLAGS="$CFLAGS -m64"
-                   AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no)
-                   CFLAGS=$hold_cflags])
-               AS_IF([test $tcl_cv_cc_m64 = yes], [
-                   CFLAGS="$CFLAGS -m64"
-                   do64bit_ok=yes
-               ])
-          ])
-
-           # The combo of gcc + glibc has a bug related to inlining of
-           # functions like strtod(). The -fno-builtin flag should address
-           # this problem but it does not work. The -fno-inline flag is kind
-           # of overkill but it works. Disable inlining only when one of the
-           # files in compat/*.c is being linked in.
-
-           AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"])
-           ;;
-       Lynx*)
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_SUFFIX=".so"
-           CFLAGS_OPTIMIZE=-02
-           SHLIB_LD='${CC} -shared'
-           LD_FLAGS="-Wl,--export-dynamic"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           ;;
-       OpenBSD-*)
-           arch=`arch -s`
-           case "$arch" in
-           vax)
-               SHLIB_SUFFIX=""
-               SHARED_LIB_SUFFIX=""
-               LDFLAGS=""
-               ;;
-           *)
-               case "$arch" in
-               alpha|sparc64)
-                   SHLIB_CFLAGS="-fPIC"
-                   ;;
-               *)
-                   SHLIB_CFLAGS="-fpic"
-                   ;;
-               esac
-               SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-               SHLIB_SUFFIX=".so"
-               AS_IF([test $doRpath = yes], [
-                   CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
-               LDFLAGS="-Wl,-export-dynamic"
-               ;;
-           esac
-           case "$arch" in
-           vax)
-               CFLAGS_OPTIMIZE="-O1"
-               ;;
-           *)
-               CFLAGS_OPTIMIZE="-O2"
-               ;;
-           esac
-           AS_IF([test "${TCL_THREADS}" = "1"], [
-               # On OpenBSD:   Compile with -pthread
-               #               Don't link with -lpthread
-               LIBS=`echo $LIBS | sed s/-lpthread//`
-               CFLAGS="$CFLAGS -pthread"
-           ])
-           # OpenBSD doesn't do version numbers with dots.
-           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
-           TCL_LIB_VERSIONS_OK=nodots
-           ;;
-       NetBSD-*)
-           # NetBSD has ELF and can use 'cc -shared' to build shared libs
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
-           SHLIB_SUFFIX=".so"
-           LDFLAGS="$LDFLAGS -export-dynamic"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           AS_IF([test "${TCL_THREADS}" = "1"], [
-               # The -pthread needs to go in the CFLAGS, not LIBS
-               LIBS=`echo $LIBS | sed s/-pthread//`
-               CFLAGS="$CFLAGS -pthread"
-               LDFLAGS="$LDFLAGS -pthread"
-           ])
-           ;;
-       FreeBSD-*)
-           # This configuration from FreeBSD Ports.
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD="${CC} -shared"
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$[@]"
-           SHLIB_SUFFIX=".so"
-           LDFLAGS=""
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
-           AS_IF([test "${TCL_THREADS}" = "1"], [
-               # The -pthread needs to go in the LDFLAGS, not LIBS
-               LIBS=`echo $LIBS | sed s/-pthread//`
-               CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-               LDFLAGS="$LDFLAGS $PTHREAD_LIBS"])
-           case $system in
-           FreeBSD-3.*)
-               # Version numbers are dot-stripped by system policy.
-               TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .`
-               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
-               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1'
-               TCL_LIB_VERSIONS_OK=nodots
-               ;;
-           esac
-           ;;
-       Darwin-*)
-           CFLAGS_OPTIMIZE="-Os"
-           SHLIB_CFLAGS="-fno-common"
-           # To avoid discrepancies between what headers configure sees during
-           # preprocessing tests and compiling tests, move any -isysroot and
-           # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
-           CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
-               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
-               if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`"
-           CFLAGS="`echo " ${CFLAGS}" | \
-               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
-               if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`"
-           AS_IF([test $do64bit = yes], [
-               case `arch` in
-                   ppc)
-                       AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag],
-                               tcl_cv_cc_arch_ppc64, [
-                           hold_cflags=$CFLAGS
-                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
-                           AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes,
-                                   tcl_cv_cc_arch_ppc64=no)
-                           CFLAGS=$hold_cflags])
-                       AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [
-                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
-                           do64bit_ok=yes
-                       ]);;
-                   i386)
-                       AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag],
-                               tcl_cv_cc_arch_x86_64, [
-                           hold_cflags=$CFLAGS
-                           CFLAGS="$CFLAGS -arch x86_64"
-                           AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes,
-                                   tcl_cv_cc_arch_x86_64=no)
-                           CFLAGS=$hold_cflags])
-                       AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [
-                           CFLAGS="$CFLAGS -arch x86_64"
-                           do64bit_ok=yes
-                       ]);;
-                   *)
-                       AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);;
-               esac
-           ], [
-               # Check for combined 32-bit and 64-bit fat build
-               AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \
-                   && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [
-                   fat_32_64=yes])
-           ])
-           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}'
-           AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [
-               hold_ldflags=$LDFLAGS
-               LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
-               AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no)
-               LDFLAGS=$hold_ldflags])
-           AS_IF([test $tcl_cv_ld_single_module = yes], [
-               SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
-           ])
-           # TEA specific: link shlib with current and compatibility version flags
-           vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d`
-           SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}"
-           SHLIB_SUFFIX=".dylib"
-           # Don't use -prebind when building for Mac OS X 10.4 or later only:
-           AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \
-               "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [
-               LDFLAGS="$LDFLAGS -prebind"])
-           LDFLAGS="$LDFLAGS -headerpad_max_install_names"
-           AC_CACHE_CHECK([if ld accepts -search_paths_first flag],
-                   tcl_cv_ld_search_paths_first, [
-               hold_ldflags=$LDFLAGS
-               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
-               AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes,
-                       tcl_cv_ld_search_paths_first=no)
-               LDFLAGS=$hold_ldflags])
-           AS_IF([test $tcl_cv_ld_search_paths_first = yes], [
-               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
-           ])
-           AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
-               AC_DEFINE(MODULE_SCOPE, [__private_extern__],
-                   [Compiler support for module scope symbols])
-               tcl_cv_cc_visibility_hidden=yes
-           ])
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
-           # TEA specific: for combined 32 & 64 bit fat builds of Tk
-           # extensions, verify that 64-bit build is possible.
-           AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [
-               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [
-                   AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
-                       done
-                       CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
-                       LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
-                       AC_TRY_LINK([#include <X11/Xlib.h>], [XrmInitialize();],
-                           tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no)
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval $v'="$hold_'$v'"'
-                       done])
-               ])
-               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [
-                   AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
-                       done
-                       CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}"
-                       LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}"
-                       AC_TRY_LINK([#include <tk.h>], [Tk_InitStubs(NULL, "", 0);],
-                           tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no)
-                       for v in CFLAGS CPPFLAGS LDFLAGS; do
-                           eval $v'="$hold_'$v'"'
-                       done])
-               ])
-               # remove 64-bit arch flags from CFLAGS et al. if configuration
-               # does not support 64-bit.
-               AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [
-                   AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags])
-                   for v in CFLAGS CPPFLAGS LDFLAGS; do
-                       eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"'
-                   done])
-           ])
-           ;;
-       OS/390-*)
-           CFLAGS_OPTIMIZE=""          # Optimizer is buggy
-           AC_DEFINE(_OE_SOCKETS, 1,   # needed in sys/socket.h
-               [Should OS/390 do the right thing with sockets?])
-           ;;
-       OSF1-V*)
-           # Digital OSF/1
-           SHLIB_CFLAGS=""
-           AS_IF([test "$SHARED_BUILD" = 1], [
-               SHLIB_LD='ld -shared -expect_unresolved "*"'
-           ], [
-               SHLIB_LD='ld -non_shared -expect_unresolved "*"'
-           ])
-           SHLIB_SUFFIX=".so"
-           AS_IF([test $doRpath = yes], [
-               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
-           AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [
-               CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"])
-           # see pthread_intro(3) for pthread support on osf1, k.furukawa
-           AS_IF([test "${TCL_THREADS}" = 1], [
-               CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
-               CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
-               LIBS=`echo $LIBS | sed s/-lpthreads//`
-               AS_IF([test "$GCC" = yes], [
-                   LIBS="$LIBS -lpthread -lmach -lexc"
-               ], [
-                   CFLAGS="$CFLAGS -pthread"
-                   LDFLAGS="$LDFLAGS -pthread"
-               ])
-           ])
-           ;;
-       QNX-6*)
-           # QNX RTP
-           # This may work for all QNX, but it was only reported for v6.
-           SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD="ld -Bshareable -x"
-           SHLIB_LD_LIBS=""
-           SHLIB_SUFFIX=".so"
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       SCO_SV-3.2*)
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_CFLAGS="-fPIC -melf"
-               LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
-           ], [
-               SHLIB_CFLAGS="-Kpic -belf"
-               LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
-           ])
-           SHLIB_LD="ld -G"
-           SHLIB_LD_LIBS=""
-           SHLIB_SUFFIX=".so"
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-       SunOS-5.[[0-6]])
-           # Careful to not let 5.10+ fall into this case
-
-           # Note: If _REENTRANT isn't defined, then Solaris
-           # won't define thread-safe library routines.
-
-           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
-           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
-               [Do we really want to follow the standard? Yes we do!])
-
-           SHLIB_CFLAGS="-KPIC"
-           SHLIB_SUFFIX=".so"
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_LD='${CC} -shared'
-               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ], [
-               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
-               CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-           ])
-           ;;
-       SunOS-5*)
-           # Note: If _REENTRANT isn't defined, then Solaris
-           # won't define thread-safe library routines.
-
-           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
-           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
-               [Do we really want to follow the standard? Yes we do!])
-
-           SHLIB_CFLAGS="-KPIC"
-
-           # Check to enable 64-bit flags for compiler/linker
-           AS_IF([test "$do64bit" = yes], [
-               arch=`isainfo`
-               AS_IF([test "$arch" = "sparcv9 sparc"], [
-                   AS_IF([test "$GCC" = yes], [
-                       AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [
-                           AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system])
-                       ], [
-                           do64bit_ok=yes
-                           CFLAGS="$CFLAGS -m64 -mcpu=v9"
-                           LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
-                           SHLIB_CFLAGS="-fPIC"
-                       ])
-                   ], [
-                       do64bit_ok=yes
-                       AS_IF([test "$do64bitVIS" = yes], [
-                           CFLAGS="$CFLAGS -xarch=v9a"
-                           LDFLAGS_ARCH="-xarch=v9a"
-                       ], [
-                           CFLAGS="$CFLAGS -xarch=v9"
-                           LDFLAGS_ARCH="-xarch=v9"
-                       ])
-                       # Solaris 64 uses this as well
-                       #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
-                   ])
-               ], [AS_IF([test "$arch" = "amd64 i386"], [
-                   AS_IF([test "$GCC" = yes], [
-                       case $system in
-                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
-                               do64bit_ok=yes
-                               CFLAGS="$CFLAGS -m64"
-                               LDFLAGS="$LDFLAGS -m64";;
-                           *)
-                               AC_MSG_WARN([64bit mode not supported with GCC on $system]);;
-                       esac
-                   ], [
-                       do64bit_ok=yes
-                       case $system in
-                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
-                               CFLAGS="$CFLAGS -m64"
-                               LDFLAGS="$LDFLAGS -m64";;
-                           *)
-                               CFLAGS="$CFLAGS -xarch=amd64"
-                               LDFLAGS="$LDFLAGS -xarch=amd64";;
-                       esac
-                   ])
-               ], [AC_MSG_WARN([64bit mode not supported for $arch])])])
-           ])
-
-           SHLIB_SUFFIX=".so"
-           AS_IF([test "$GCC" = yes], [
-               SHLIB_LD='${CC} -shared'
-               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
-               AS_IF([test "$do64bit_ok" = yes], [
-                   AS_IF([test "$arch" = "sparcv9 sparc"], [
-                       # We need to specify -static-libgcc or we need to
-                       # add the path to the sparv9 libgcc.
-                       # JH: static-libgcc is necessary for core Tcl, but may
-                       # not be necessary for extensions.
-                       SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
-                       # for finding sparcv9 libgcc, get the regular libgcc
-                       # path, remove so name and append 'sparcv9'
-                       #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
-                       #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
-                   ], [AS_IF([test "$arch" = "amd64 i386"], [
-                       # JH: static-libgcc is necessary for core Tcl, but may
-                       # not be necessary for extensions.
-                       SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
-                   ])])
-               ])
-           ], [
-               case $system in
-                   SunOS-5.[[1-9]][[0-9]]*)
-                       # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-                       SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';;
-                   *)
-                       SHLIB_LD='/usr/ccs/bin/ld -G -z text';;
-               esac
-               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
-               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
-           ])
-           ;;
-       UNIX_SV* | UnixWare-5*)
-           SHLIB_CFLAGS="-KPIC"
-           SHLIB_LD='${CC} -G'
-           SHLIB_LD_LIBS=""
-           SHLIB_SUFFIX=".so"
-           # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
-           # that don't grok the -Bexport option.  Test that it does.
-           AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [
-               hold_ldflags=$LDFLAGS
-               LDFLAGS="$LDFLAGS -Wl,-Bexport"
-               AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no)
-               LDFLAGS=$hold_ldflags])
-           AS_IF([test $tcl_cv_ld_Bexport = yes], [
-               LDFLAGS="$LDFLAGS -Wl,-Bexport"
-           ])
-           CC_SEARCH_FLAGS=""
-           LD_SEARCH_FLAGS=""
-           ;;
-    esac
-
-    AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [
-       AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform])
-    ])
-
-dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so
-dnl # until the end of configure, as configure's compile and link tests use
-dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's
-dnl # preprocessing tests use only CPPFLAGS.
-    AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""])
-
-    # Add in the arch flags late to ensure it wasn't removed.
-    # Not necessary in TEA, but this is aligned with core
-    LDFLAGS="$LDFLAGS $LDFLAGS_ARCH"
-
-    # If we're running gcc, then change the C flags for compiling shared
-    # libraries to the right flags for gcc, instead of those for the
-    # standard manufacturer compiler.
-
-    AS_IF([test "$GCC" = yes], [
-       case $system in
-           AIX-*) ;;
-           BSD/OS*) ;;
-           CYGWIN_*|MINGW32_*) ;;
-           IRIX*) ;;
-           NetBSD-*|FreeBSD-*|OpenBSD-*) ;;
-           Darwin-*) ;;
-           SCO_SV-3.2*) ;;
-           windows) ;;
-           *) SHLIB_CFLAGS="-fPIC" ;;
-       esac])
-
-    AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
-       AC_DEFINE(MODULE_SCOPE, [extern],
-           [No Compiler support for module scope symbols])
-    ])
-
-    AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [
-    # TEA specific: use PACKAGE_VERSION instead of VERSION
-    SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}'])
-    AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [
-    # TEA specific: use PACKAGE_VERSION instead of VERSION
-    UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'])
-
-    if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then
-       AC_CACHE_CHECK(for SEH support in compiler,
-           tcl_cv_seh,
-       AC_TRY_RUN([
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-
-           int main(int argc, char** argv) {
-               int a, b = 0;
-               __try {
-                   a = 666 / b;
-               }
-               __except (EXCEPTION_EXECUTE_HANDLER) {
-                   return 0;
-               }
-               return 1;
-           }
-       ],
-           tcl_cv_seh=yes,
-           tcl_cv_seh=no,
-           tcl_cv_seh=no)
-       )
-       if test "$tcl_cv_seh" = "no" ; then
-           AC_DEFINE(HAVE_NO_SEH, 1,
-                   [Defined when mingw does not support SEH])
-       fi
-
-       #
-       # Check to see if the excpt.h include file provided contains the
-       # definition for EXCEPTION_DISPOSITION; if not, which is the case
-       # with Cygwin's version as of 2002-04-10, define it to be int,
-       # sufficient for getting the current code to work.
-       #
-       AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files,
-           tcl_cv_eh_disposition,
-           AC_TRY_COMPILE([
-#          define WIN32_LEAN_AND_MEAN
-#          include <windows.h>
-#          undef WIN32_LEAN_AND_MEAN
-           ],[
-               EXCEPTION_DISPOSITION x;
-           ],
-               tcl_cv_eh_disposition=yes,
-               tcl_cv_eh_disposition=no)
-       )
-       if test "$tcl_cv_eh_disposition" = "no" ; then
-       AC_DEFINE(EXCEPTION_DISPOSITION, int,
-               [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION])
-       fi
-
-       # Check to see if winnt.h defines CHAR, SHORT, and LONG
-       # even if VOID has already been #defined. The win32api
-       # used by mingw and cygwin is known to do this.
-
-       AC_CACHE_CHECK(for winnt.h that ignores VOID define,
-           tcl_cv_winnt_ignore_void,
-           AC_TRY_COMPILE([
-#define VOID void
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-           ], [
-               CHAR c;
-               SHORT s;
-               LONG l;
-           ],
-        tcl_cv_winnt_ignore_void=yes,
-        tcl_cv_winnt_ignore_void=no)
-       )
-       if test "$tcl_cv_winnt_ignore_void" = "yes" ; then
-           AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1,
-                   [Defined when cygwin/mingw ignores VOID define in winnt.h])
-       fi
-    fi
-
-       # See if the compiler supports casting to a union type.
-       # This is used to stop gcc from printing a compiler
-       # warning when initializing a union member.
-
-       AC_CACHE_CHECK(for cast to union support,
-           tcl_cv_cast_to_union,
-           AC_TRY_COMPILE([],
-           [
-                 union foo { int i; double d; };
-                 union foo f = (union foo) (int) 0;
-           ],
-           tcl_cv_cast_to_union=yes,
-           tcl_cv_cast_to_union=no)
-       )
-       if test "$tcl_cv_cast_to_union" = "yes"; then
-           AC_DEFINE(HAVE_CAST_TO_UNION, 1,
-                   [Defined when compiler supports casting to union type.])
-       fi
-
-    AC_SUBST(CFLAGS_DEBUG)
-    AC_SUBST(CFLAGS_OPTIMIZE)
-    AC_SUBST(CFLAGS_WARNING)
-
-    AC_SUBST(STLIB_LD)
-    AC_SUBST(SHLIB_LD)
-
-    AC_SUBST(SHLIB_LD_LIBS)
-    AC_SUBST(SHLIB_CFLAGS)
-
-    AC_SUBST(LD_LIBRARY_PATH_VAR)
-
-    # These must be called after we do the basic CFLAGS checks and
-    # verify any possible 64-bit or similar switches are necessary
-    TEA_TCL_EARLY_FLAGS
-    TEA_TCL_64BIT_FLAGS
-])
-
-#--------------------------------------------------------------------
-# TEA_SERIAL_PORT
-#
-#      Determine which interface to use to talk to the serial port.
-#      Note that #include lines must begin in leftmost column for
-#      some compilers to recognize them as preprocessor directives,
-#      and some build environments have stdin not pointing at a
-#      pseudo-terminal (usually /dev/null instead.)
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines only one of the following vars:
-#              HAVE_SYS_MODEM_H
-#              USE_TERMIOS
-#              USE_TERMIO
-#              USE_SGTTY
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_SERIAL_PORT], [
-    AC_CHECK_HEADERS(sys/modem.h)
-    AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [
-    AC_TRY_RUN([
-#include <termios.h>
-
-int main() {
-    struct termios t;
-    if (tcgetattr(0, &t) == 0) {
-       cfsetospeed(&t, 0);
-       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    if test $tcl_cv_api_serial = no ; then
-       AC_TRY_RUN([
-#include <termio.h>
-
-int main() {
-    struct termio t;
-    if (ioctl(0, TCGETA, &t) == 0) {
-       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no ; then
-       AC_TRY_RUN([
-#include <sgtty.h>
-
-int main() {
-    struct sgttyb t;
-    if (ioctl(0, TIOCGETP, &t) == 0) {
-       t.sg_ospeed = 0;
-       t.sg_flags |= ODDP | EVENP | RAW;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no ; then
-       AC_TRY_RUN([
-#include <termios.h>
-#include <errno.h>
-
-int main() {
-    struct termios t;
-    if (tcgetattr(0, &t) == 0
-       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
-       cfsetospeed(&t, 0);
-       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no; then
-       AC_TRY_RUN([
-#include <termio.h>
-#include <errno.h>
-
-int main() {
-    struct termio t;
-    if (ioctl(0, TCGETA, &t) == 0
-       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
-       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
-       return 0;
-    }
-    return 1;
-    }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
-    fi
-    if test $tcl_cv_api_serial = no; then
-       AC_TRY_RUN([
-#include <sgtty.h>
-#include <errno.h>
-
-int main() {
-    struct sgttyb t;
-    if (ioctl(0, TIOCGETP, &t) == 0
-       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
-       t.sg_ospeed = 0;
-       t.sg_flags |= ODDP | EVENP | RAW;
-       return 0;
-    }
-    return 1;
-}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none)
-    fi])
-    case $tcl_cv_api_serial in
-       termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);;
-       termio)  AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);;
-       sgtty)   AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);;
-    esac
-])
-
-#--------------------------------------------------------------------
-# TEA_MISSING_POSIX_HEADERS
-#
-#      Supply substitutes for missing POSIX header files.  Special
-#      notes:
-#          - stdlib.h doesn't define strtol, strtoul, or
-#            strtod in some versions of SunOS
-#          - some versions of string.h don't declare procedures such
-#            as strstr
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines some of the following vars:
-#              NO_DIRENT_H
-#              NO_ERRNO_H
-#              NO_VALUES_H
-#              HAVE_LIMITS_H or NO_LIMITS_H
-#              NO_STDLIB_H
-#              NO_STRING_H
-#              NO_SYS_WAIT_H
-#              NO_DLFCN_H
-#              HAVE_SYS_PARAM_H
-#
-#              HAVE_STRING_H ?
-#
-# tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and
-# CHECK on limits.h
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [
-    AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [
-    AC_TRY_LINK([#include <sys/types.h>
-#include <dirent.h>], [
-#ifndef _POSIX_SOURCE
-#   ifdef __Lynx__
-       /*
-        * Generate compilation error to make the test fail:  Lynx headers
-        * are only valid if really in the POSIX environment.
-        */
-
-       missing_procedure();
-#   endif
-#endif
-DIR *d;
-struct dirent *entryPtr;
-char *p;
-d = opendir("foobar");
-entryPtr = readdir(d);
-p = entryPtr->d_name;
-closedir(d);
-], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)])
-
-    if test $tcl_cv_dirent_h = no; then
-       AC_DEFINE(NO_DIRENT_H, 1, [Do we have <dirent.h>?])
-    fi
-
-    # TEA specific:
-    AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have <errno.h>?])])
-    AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have <float.h>?])])
-    AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have <values.h>?])])
-    AC_CHECK_HEADER(limits.h,
-       [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have <limits.h>?])],
-       [AC_DEFINE(NO_LIMITS_H, 1, [Do we have <limits.h>?])])
-    AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
-    AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
-    AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
-    AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
-    if test $tcl_ok = 0; then
-       AC_DEFINE(NO_STDLIB_H, 1, [Do we have <stdlib.h>?])
-    fi
-    AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
-    AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
-    AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
-
-    # See also memmove check below for a place where NO_STRING_H can be
-    # set and why.
-
-    if test $tcl_ok = 0; then
-       AC_DEFINE(NO_STRING_H, 1, [Do we have <string.h>?])
-    fi
-
-    AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have <sys/wait.h>?])])
-    AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have <dlfcn.h>?])])
-
-    # OS/390 lacks sys/param.h (and doesn't need it, by chance).
-    AC_HAVE_HEADERS(sys/param.h)
-])
-
-#--------------------------------------------------------------------
-# TEA_PATH_X
-#
-#      Locate the X11 header files and the X11 library archive.  Try
-#      the ac_path_x macro first, but if it doesn't find the X stuff
-#      (e.g. because there's no xmkmf program) then check through
-#      a list of possible directories.  Under some conditions the
-#      autoconf macro will return an include directory that contains
-#      no include files, so double-check its result just to be safe.
-#
-#      This should be called after TEA_CONFIG_CFLAGS as setting the
-#      LIBS line can confuse some configure macro magic.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Sets the following vars:
-#              XINCLUDES
-#              XLIBSW
-#              PKG_LIBS (appends to)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_X], [
-    if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then
-       TEA_PATH_UNIX_X
-    fi
-])
-
-AC_DEFUN([TEA_PATH_UNIX_X], [
-    AC_PATH_X
-    not_really_there=""
-    if test "$no_x" = ""; then
-       if test "$x_includes" = ""; then
-           AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes")
-       else
-           if test ! -r $x_includes/X11/Xlib.h; then
-               not_really_there="yes"
-           fi
-       fi
-    fi
-    if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
-       AC_MSG_CHECKING([for X11 header files])
-       found_xincludes="no"
-       AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no")
-       if test "$found_xincludes" = "no"; then
-           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"
-           for i in $dirs ; do
-               if test -r $i/X11/Xlib.h; then
-                   AC_MSG_RESULT([$i])
-                   XINCLUDES=" -I$i"
-                   found_xincludes="yes"
-                   break
-               fi
-           done
-       fi
-    else
-       if test "$x_includes" != ""; then
-           XINCLUDES="-I$x_includes"
-           found_xincludes="yes"
-       fi
-    fi
-    if test "$found_xincludes" = "no"; then
-       AC_MSG_RESULT([couldn't find any!])
-    fi
-
-    if test "$no_x" = yes; then
-       AC_MSG_CHECKING([for X11 libraries])
-       XLIBSW=nope
-       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"
-       for i in $dirs ; do
-           if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then
-               AC_MSG_RESULT([$i])
-               XLIBSW="-L$i -lX11"
-               x_libraries="$i"
-               break
-           fi
-       done
-    else
-       if test "$x_libraries" = ""; then
-           XLIBSW=-lX11
-       else
-           XLIBSW="-L$x_libraries -lX11"
-       fi
-    fi
-    if test "$XLIBSW" = nope ; then
-       AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
-    fi
-    if test "$XLIBSW" = nope ; then
-       AC_MSG_RESULT([could not find any!  Using -lX11.])
-       XLIBSW=-lX11
-    fi
-    # TEA specific:
-    if test x"${XLIBSW}" != x ; then
-       PKG_LIBS="${PKG_LIBS} ${XLIBSW}"
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_BLOCKING_STYLE
-#
-#      The statements below check for systems where POSIX-style
-#      non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
-#      On these systems (mostly older ones), use the old BSD-style
-#      FIONBIO approach instead.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines some of the following vars:
-#              HAVE_SYS_IOCTL_H
-#              HAVE_SYS_FILIO_H
-#              USE_FIONBIO
-#              O_NONBLOCK
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_BLOCKING_STYLE], [
-    AC_CHECK_HEADERS(sys/ioctl.h)
-    AC_CHECK_HEADERS(sys/filio.h)
-    TEA_CONFIG_SYSTEM
-    AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
-    case $system in
-       OSF*)
-           AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?])
-           AC_MSG_RESULT([FIONBIO])
-           ;;
-       *)
-           AC_MSG_RESULT([O_NONBLOCK])
-           ;;
-    esac
-])
-
-#--------------------------------------------------------------------
-# TEA_TIME_HANDLER
-#
-#      Checks how the system deals with time.h, what time structures
-#      are used on the system, and what fields the structures have.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines some of the following vars:
-#              USE_DELTA_FOR_TZ
-#              HAVE_TM_GMTOFF
-#              HAVE_TM_TZADJ
-#              HAVE_TIMEZONE_VAR
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TIME_HANDLER], [
-    AC_CHECK_HEADERS(sys/time.h)
-    AC_HEADER_TIME
-    AC_STRUCT_TIMEZONE
-
-    AC_CHECK_FUNCS(gmtime_r localtime_r)
-
-    AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [
-       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
-           tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)])
-    if test $tcl_cv_member_tm_tzadj = yes ; then
-       AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?])
-    fi
-
-    AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [
-       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
-           tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)])
-    if test $tcl_cv_member_tm_gmtoff = yes ; then
-       AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?])
-    fi
-
-    #
-    # Its important to include time.h in this check, as some systems
-    # (like convex) have timezone functions, etc.
-    #
-    AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [
-       AC_TRY_COMPILE([#include <time.h>],
-           [extern long timezone;
-           timezone += 1;
-           exit (0);],
-           tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)])
-    if test $tcl_cv_timezone_long = yes ; then
-       AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
-    else
-       #
-       # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
-       #
-       AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [
-           AC_TRY_COMPILE([#include <time.h>],
-               [extern time_t timezone;
-               timezone += 1;
-               exit (0);],
-               tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)])
-       if test $tcl_cv_timezone_time = yes ; then
-           AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
-       fi
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_BUGGY_STRTOD
-#
-#      Under Solaris 2.4, strtod returns the wrong value for the
-#      terminating character under some conditions.  Check for this
-#      and if the problem exists use a substitute procedure
-#      "fixstrtod" (provided by Tcl) that corrects the error.
-#      Also, on Compaq's Tru64 Unix 5.0,
-#      strtod(" ") returns 0.0 instead of a failure to convert.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Might defines some of the following vars:
-#              strtod (=fixstrtod)
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_BUGGY_STRTOD], [
-    AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0)
-    if test "$tcl_strtod" = 1; then
-       AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[
-           AC_TRY_RUN([
-               extern double strtod();
-               int main() {
-                   char *infString="Inf", *nanString="NaN", *spaceString=" ";
-                   char *term;
-                   double value;
-                   value = strtod(infString, &term);
-                   if ((term != infString) && (term[-1] == 0)) {
-                       exit(1);
-                   }
-                   value = strtod(nanString, &term);
-                   if ((term != nanString) && (term[-1] == 0)) {
-                       exit(1);
-                   }
-                   value = strtod(spaceString, &term);
-                   if (term == (spaceString+1)) {
-                       exit(1);
-                   }
-                   exit(0);
-               }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy,
-                   tcl_cv_strtod_buggy=buggy)])
-       if test "$tcl_cv_strtod_buggy" = buggy; then
-           AC_LIBOBJ([fixstrtod])
-           USE_COMPAT=1
-           AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?])
-       fi
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_LINK_LIBS
-#
-#      Search for the libraries needed to link the Tcl shell.
-#      Things like the math library (-lm) and socket stuff (-lsocket vs.
-#      -lnsl) are dealt with here.
-#
-# Arguments:
-#      Requires the following vars to be set in the Makefile:
-#              DL_LIBS (not in TEA, only needed in core)
-#              LIBS
-#              MATH_LIBS
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TCL_LIBS
-#              MATH_LIBS
-#
-#      Might append to the following vars:
-#              LIBS
-#
-#      Might define the following vars:
-#              HAVE_NET_ERRNO_H
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TCL_LINK_LIBS], [
-    #--------------------------------------------------------------------
-    # On a few very rare systems, all of the libm.a stuff is
-    # already in libc.a.  Set compiler flags accordingly.
-    # Also, Linux requires the "ieee" library for math to work
-    # right (and it must appear before "-lm").
-    #--------------------------------------------------------------------
-
-    AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
-    AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
-
-    #--------------------------------------------------------------------
-    # Interactive UNIX requires -linet instead of -lsocket, plus it
-    # needs net/errno.h to define the socket-related error codes.
-    #--------------------------------------------------------------------
-
-    AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
-    AC_CHECK_HEADER(net/errno.h, [
-       AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have <net/errno.h>?])])
-
-    #--------------------------------------------------------------------
-    #  Check for the existence of the -lsocket and -lnsl libraries.
-    #  The order here is important, so that they end up in the right
-    #  order in the command line generated by make.  Here are some
-    #  special considerations:
-    #  1. Use "connect" and "accept" to check for -lsocket, and
-    #     "gethostbyname" to check for -lnsl.
-    #  2. Use each function name only once:  can't redo a check because
-    #     autoconf caches the results of the last check and won't redo it.
-    #  3. Use -lnsl and -lsocket only if they supply procedures that
-    #     aren't already present in the normal libraries.  This is because
-    #     IRIX 5.2 has libraries, but they aren't needed and they're
-    #     bogus:  they goof up name resolution if used.
-    #  4. On some SVR4 systems, can't use -lsocket without -lnsl too.
-    #     To get around this problem, check for both libraries together
-    #     if -lsocket doesn't work by itself.
-    #--------------------------------------------------------------------
-
-    tcl_checkBoth=0
-    AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
-    if test "$tcl_checkSocket" = 1; then
-       AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt,
-           LIBS="$LIBS -lsocket", tcl_checkBoth=1)])
-    fi
-    if test "$tcl_checkBoth" = 1; then
-       tk_oldLibs=$LIBS
-       LIBS="$LIBS -lsocket -lnsl"
-       AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs])
-    fi
-    AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname,
-           [LIBS="$LIBS -lnsl"])])
-
-    # TEA specific: Don't perform the eval of the libraries here because
-    # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS
-
-    TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
-    AC_SUBST(TCL_LIBS)
-    AC_SUBST(MATH_LIBS)
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_EARLY_FLAGS
-#
-#      Check for what flags are needed to be passed so the correct OS
-#      features are available.
-#
-# Arguments:
-#      None
-#
-# Results:
-#
-#      Might define the following vars:
-#              _ISOC99_SOURCE
-#              _LARGEFILE64_SOURCE
-#              _LARGEFILE_SOURCE64
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TCL_EARLY_FLAG],[
-    AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]),
-       AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no,
-           AC_TRY_COMPILE([[#define ]$1[ 1
-]$2], $3,
-               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes,
-               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no)))
-    if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then
-       AC_DEFINE($1, 1, [Add the ]$1[ flag when building])
-       tcl_flags="$tcl_flags $1"
-    fi
-])
-
-AC_DEFUN([TEA_TCL_EARLY_FLAGS],[
-    AC_MSG_CHECKING([for required early compiler flags])
-    tcl_flags=""
-    TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include <stdlib.h>],
-       [char *p = (char *)strtoll; char *q = (char *)strtoull;])
-    TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include <sys/stat.h>],
-       [struct stat64 buf; int i = stat64("/", &buf);])
-    TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include <sys/stat.h>],
-       [char *p = (char *)open64;])
-    if test "x${tcl_flags}" = "x" ; then
-       AC_MSG_RESULT([none])
-    else
-       AC_MSG_RESULT([${tcl_flags}])
-    fi
-])
-
-#--------------------------------------------------------------------
-# TEA_TCL_64BIT_FLAGS
-#
-#      Check for what is defined in the way of 64-bit features.
-#
-# Arguments:
-#      None
-#
-# Results:
-#
-#      Might define the following vars:
-#              TCL_WIDE_INT_IS_LONG
-#              TCL_WIDE_INT_TYPE
-#              HAVE_STRUCT_DIRENT64
-#              HAVE_STRUCT_STAT64
-#              HAVE_TYPE_OFF64_T
-#--------------------------------------------------------------------
-
-AC_DEFUN([TEA_TCL_64BIT_FLAGS], [
-    AC_MSG_CHECKING([for 64-bit integer type])
-    AC_CACHE_VAL(tcl_cv_type_64bit,[
-       tcl_cv_type_64bit=none
-       # See if the compiler knows natively about __int64
-       AC_TRY_COMPILE(,[__int64 value = (__int64) 0;],
-           tcl_type_64bit=__int64, tcl_type_64bit="long long")
-       # See if we should use long anyway  Note that we substitute in the
-       # type that is our current guess for a 64-bit type inside this check
-       # program, so it should be modified only carefully...
-        AC_TRY_COMPILE(,[switch (0) {
-            case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ;
-        }],tcl_cv_type_64bit=${tcl_type_64bit})])
-    if test "${tcl_cv_type_64bit}" = none ; then
-       AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?])
-       AC_MSG_RESULT([using long])
-    elif test "${tcl_cv_type_64bit}" = "__int64" \
-               -a "${TEA_PLATFORM}" = "windows" ; then
-       # TEA specific: We actually want to use the default tcl.h checks in
-       # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER*
-       AC_MSG_RESULT([using Tcl header defaults])
-    else
-       AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit},
-           [What type should be used to define wide integers?])
-       AC_MSG_RESULT([${tcl_cv_type_64bit}])
-
-       # Now check for auxiliary declarations
-       AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[
-           AC_TRY_COMPILE([#include <sys/types.h>
-#include <dirent.h>],[struct dirent64 p;],
-               tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)])
-       if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
-           AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?])
-       fi
-
-       AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[
-           AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p;
-],
-               tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)])
-       if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
-           AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in <sys/stat.h>?])
-       fi
-
-       AC_CHECK_FUNCS(open64 lseek64)
-       AC_MSG_CHECKING([for off64_t])
-       AC_CACHE_VAL(tcl_cv_type_off64_t,[
-           AC_TRY_COMPILE([#include <sys/types.h>],[off64_t offset;
-],
-               tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)])
-       dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the
-       dnl functions lseek64 and open64 are defined.
-       if test "x${tcl_cv_type_off64_t}" = "xyes" && \
-               test "x${ac_cv_func_lseek64}" = "xyes" && \
-               test "x${ac_cv_func_open64}" = "xyes" ; then
-           AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in <sys/types.h>?])
-           AC_MSG_RESULT([yes])
-       else
-           AC_MSG_RESULT([no])
-       fi
-    fi
-])
-
-##
-## Here ends the standard Tcl configuration bits and starts the
-## TEA specific functions
-##
-
-#------------------------------------------------------------------------
-# TEA_INIT --
-#
-#      Init various Tcl Extension Architecture (TEA) variables.
-#      This should be the first called TEA_* macro.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              CYGPATH
-#              EXEEXT
-#      Defines only:
-#              TEA_VERSION
-#              TEA_INITED
-#              TEA_PLATFORM (windows or unix)
-#
-# "cygpath" is used on windows to generate native path names for include
-# files. These variables should only be used with the compiler and linker
-# since they generate native path names.
-#
-# EXEEXT
-#      Select the executable extension based on the host type.  This
-#      is a lightweight replacement for AC_EXEEXT that doesn't require
-#      a compiler.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_INIT], [
-    # TEA extensions pass this us the version of TEA they think they
-    # are compatible with.
-    TEA_VERSION="3.10"
-
-    AC_MSG_CHECKING([for correct TEA configuration])
-    if test x"${PACKAGE_NAME}" = x ; then
-       AC_MSG_ERROR([
-The PACKAGE_NAME variable must be defined by your TEA configure.ac])
-    fi
-    if test x"$1" = x ; then
-       AC_MSG_ERROR([
-TEA version not specified.])
-    elif test "$1" != "${TEA_VERSION}" ; then
-       AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"])
-    else
-       AC_MSG_RESULT([ok (TEA ${TEA_VERSION})])
-    fi
-
-    # If the user did not set CFLAGS, set it now to keep macros
-    # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2".
-    if test "${CFLAGS+set}" != "set" ; then
-       CFLAGS=""
-    fi
-
-    case "`uname -s`" in
-       *win32*|*WIN32*|*MINGW32_*)
-           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)
-           EXEEXT=".exe"
-           TEA_PLATFORM="windows"
-           ;;
-       *CYGWIN_*)
-           EXEEXT=".exe"
-           # CYGPATH and TEA_PLATFORM are determined later in LOAD_TCLCONFIG
-           ;;
-       *)
-           CYGPATH=echo
-           # Maybe we are cross-compiling....
-           case ${host_alias} in
-               *mingw32*)
-               EXEEXT=".exe"
-               TEA_PLATFORM="windows"
-               ;;
-           *)
-               EXEEXT=""
-               TEA_PLATFORM="unix"
-               ;;
-           esac
-           ;;
-    esac
-
-    # Check if exec_prefix is set. If not use fall back to prefix.
-    # Note when adjusted, so that TEA_PREFIX can correct for this.
-    # This is needed for recursive configures, since autoconf propagates
-    # $prefix, but not $exec_prefix (doh!).
-    if test x$exec_prefix = xNONE ; then
-       exec_prefix_default=yes
-       exec_prefix=$prefix
-    fi
-
-    AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}])
-
-    AC_SUBST(EXEEXT)
-    AC_SUBST(CYGPATH)
-
-    # This package name must be replaced statically for AC_SUBST to work
-    AC_SUBST(PKG_LIB_FILE)
-    # Substitute STUB_LIB_FILE in case package creates a stub library too.
-    AC_SUBST(PKG_STUB_LIB_FILE)
-
-    # We AC_SUBST these here to ensure they are subst'ed,
-    # in case the user doesn't call TEA_ADD_...
-    AC_SUBST(PKG_STUB_SOURCES)
-    AC_SUBST(PKG_STUB_OBJECTS)
-    AC_SUBST(PKG_TCL_SOURCES)
-    AC_SUBST(PKG_HEADERS)
-    AC_SUBST(PKG_INCLUDES)
-    AC_SUBST(PKG_LIBS)
-    AC_SUBST(PKG_CFLAGS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_SOURCES --
-#
-#      Specify one or more source files.  Users should check for
-#      the right platform before adding to their list.
-#      It is not important to specify the directory, as long as it is
-#      in the generic, win or unix subdirectory of $(srcdir).
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_SOURCES
-#              PKG_OBJECTS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_SOURCES], [
-    vars="$@"
-    for i in $vars; do
-       case $i in
-           [\$]*)
-               # allow $-var names
-               PKG_SOURCES="$PKG_SOURCES $i"
-               PKG_OBJECTS="$PKG_OBJECTS $i"
-               ;;
-           *)
-               # check for existence - allows for generic/win/unix VPATH
-               # To add more dirs here (like 'src'), you have to update VPATH
-               # in Makefile.in as well
-               if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
-                   -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
-                   -a ! -f "${srcdir}/macosx/$i" \
-                   ; then
-                   AC_MSG_ERROR([could not find source file '$i'])
-               fi
-               PKG_SOURCES="$PKG_SOURCES $i"
-               # this assumes it is in a VPATH dir
-               i=`basename $i`
-               # handle user calling this before or after TEA_SETUP_COMPILER
-               if test x"${OBJEXT}" != x ; then
-                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
-               else
-                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
-               fi
-               PKG_OBJECTS="$PKG_OBJECTS $j"
-               ;;
-       esac
-    done
-    AC_SUBST(PKG_SOURCES)
-    AC_SUBST(PKG_OBJECTS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_STUB_SOURCES --
-#
-#      Specify one or more source files.  Users should check for
-#      the right platform before adding to their list.
-#      It is not important to specify the directory, as long as it is
-#      in the generic, win or unix subdirectory of $(srcdir).
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_STUB_SOURCES
-#              PKG_STUB_OBJECTS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_STUB_SOURCES], [
-    vars="$@"
-    for i in $vars; do
-       # check for existence - allows for generic/win/unix VPATH
-       if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
-           -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
-           -a ! -f "${srcdir}/macosx/$i" \
-           ; then
-           AC_MSG_ERROR([could not find stub source file '$i'])
-       fi
-       PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i"
-       # this assumes it is in a VPATH dir
-       i=`basename $i`
-       # handle user calling this before or after TEA_SETUP_COMPILER
-       if test x"${OBJEXT}" != x ; then
-           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
-       else
-           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
-       fi
-       PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j"
-    done
-    AC_SUBST(PKG_STUB_SOURCES)
-    AC_SUBST(PKG_STUB_OBJECTS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_TCL_SOURCES --
-#
-#      Specify one or more Tcl source files.  These should be platform
-#      independent runtime files.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_TCL_SOURCES
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_TCL_SOURCES], [
-    vars="$@"
-    for i in $vars; do
-       # check for existence, be strict because it is installed
-       if test ! -f "${srcdir}/$i" ; then
-           AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i'])
-       fi
-       PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i"
-    done
-    AC_SUBST(PKG_TCL_SOURCES)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_HEADERS --
-#
-#      Specify one or more source headers.  Users should check for
-#      the right platform before adding to their list.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_HEADERS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_HEADERS], [
-    vars="$@"
-    for i in $vars; do
-       # check for existence, be strict because it is installed
-       if test ! -f "${srcdir}/$i" ; then
-           AC_MSG_ERROR([could not find header file '${srcdir}/$i'])
-       fi
-       PKG_HEADERS="$PKG_HEADERS $i"
-    done
-    AC_SUBST(PKG_HEADERS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_INCLUDES --
-#
-#      Specify one or more include dirs.  Users should check for
-#      the right platform before adding to their list.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_INCLUDES
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_INCLUDES], [
-    vars="$@"
-    for i in $vars; do
-       PKG_INCLUDES="$PKG_INCLUDES $i"
-    done
-    AC_SUBST(PKG_INCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_LIBS --
-#
-#      Specify one or more libraries.  Users should check for
-#      the right platform before adding to their list.  For Windows,
-#      libraries provided in "foo.lib" format will be converted to
-#      "-lfoo" when using GCC (mingw).
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_LIBS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_LIBS], [
-    vars="$@"
-    for i in $vars; do
-       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
-           # Convert foo.lib to -lfoo for GCC.  No-op if not *.lib
-           i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'`
-       fi
-       PKG_LIBS="$PKG_LIBS $i"
-    done
-    AC_SUBST(PKG_LIBS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_CFLAGS --
-#
-#      Specify one or more CFLAGS.  Users should check for
-#      the right platform before adding to their list.
-#
-# Arguments:
-#      one or more file names
-#
-# Results:
-#
-#      Defines and substs the following vars:
-#              PKG_CFLAGS
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_CFLAGS], [
-    PKG_CFLAGS="$PKG_CFLAGS $@"
-    AC_SUBST(PKG_CFLAGS)
-])
-
-#------------------------------------------------------------------------
-# TEA_ADD_CLEANFILES --
-#
-#      Specify one or more CLEANFILES.
-#
-# Arguments:
-#      one or more file names to clean target
-#
-# Results:
-#
-#      Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_ADD_CLEANFILES], [
-    CLEANFILES="$CLEANFILES $@"
-])
-
-#------------------------------------------------------------------------
-# TEA_PREFIX --
-#
-#      Handle the --prefix=... option by defaulting to what Tcl gave
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      If --prefix or --exec-prefix was not specified, $prefix and
-#      $exec_prefix will be set to the values given to Tcl when it was
-#      configured.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_PREFIX], [
-    if test "${prefix}" = "NONE"; then
-       prefix_default=yes
-       if test x"${TCL_PREFIX}" != x; then
-           AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}])
-           prefix=${TCL_PREFIX}
-       else
-           AC_MSG_NOTICE([--prefix defaulting to /usr/local])
-           prefix=/usr/local
-       fi
-    fi
-    if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \
-       -o x"${exec_prefix_default}" = x"yes" ; then
-       if test x"${TCL_EXEC_PREFIX}" != x; then
-           AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}])
-           exec_prefix=${TCL_EXEC_PREFIX}
-       else
-           AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}])
-           exec_prefix=$prefix
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_SETUP_COMPILER_CC --
-#
-#      Do compiler checks the way we want.  This is just a replacement
-#      for AC_PROG_CC in TEA configure.ac files to make them cleaner.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Sets up CC var and other standard bits we need to make executables.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_SETUP_COMPILER_CC], [
-    # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE)
-    # in this macro, they need to go into TEA_SETUP_COMPILER instead.
-
-    AC_PROG_CC
-    AC_PROG_CPP
-
-    INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c'
-    INSTALL_DATA_DIR='${INSTALL} -d -m 755'
-    INSTALL_DATA='${INSTALL} -m 644'
-    INSTALL_PROGRAM='${INSTALL}'
-    INSTALL_SCRIPT='${INSTALL}'
-    INSTALL_LIBRARY='${INSTALL_DATA}'
-
-    AC_SUBST(INSTALL)
-    AC_SUBST(INSTALL_DATA_DIR)
-    AC_SUBST(INSTALL_DATA)
-    AC_SUBST(INSTALL_PROGRAM)
-    AC_SUBST(INSTALL_SCRIPT)
-    AC_SUBST(INSTALL_LIBRARY)
-
-    #--------------------------------------------------------------------
-    # Checks to see if the make program sets the $MAKE variable.
-    #--------------------------------------------------------------------
-
-    AC_PROG_MAKE_SET
-
-    #--------------------------------------------------------------------
-    # Find ranlib
-    #--------------------------------------------------------------------
-
-    AC_CHECK_TOOL(RANLIB, ranlib)
-
-    #--------------------------------------------------------------------
-    # Determines the correct binary file extension (.o, .obj, .exe etc.)
-    #--------------------------------------------------------------------
-
-    AC_OBJEXT
-    AC_EXEEXT
-])
-
-#------------------------------------------------------------------------
-# TEA_SETUP_COMPILER --
-#
-#      Do compiler checks that use the compiler.  This must go after
-#      TEA_SETUP_COMPILER_CC, which does the actual compiler check.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Sets up CC var and other standard bits we need to make executables.
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_SETUP_COMPILER], [
-    # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here.
-    AC_REQUIRE([TEA_SETUP_COMPILER_CC])
-
-    #------------------------------------------------------------------------
-    # If we're using GCC, see if the compiler understands -pipe. If so, use it.
-    # It makes compiling go faster.  (This is only a performance feature.)
-    #------------------------------------------------------------------------
-
-    if test -z "$no_pipe" -a -n "$GCC"; then
-       AC_CACHE_CHECK([if the compiler understands -pipe],
-           tcl_cv_cc_pipe, [
-           hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
-           AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no)
-           CFLAGS=$hold_cflags])
-       if test $tcl_cv_cc_pipe = yes; then
-           CFLAGS="$CFLAGS -pipe"
-       fi
-    fi
-
-    #--------------------------------------------------------------------
-    # Common compiler flag setup
-    #--------------------------------------------------------------------
-
-    AC_C_BIGENDIAN
-    if test "${TEA_PLATFORM}" = "unix" ; then
-       TEA_TCL_LINK_LIBS
-       TEA_MISSING_POSIX_HEADERS
-       # Let the user call this, because if it triggers, they will
-       # need a compat/strtod.c that is correct.  Users can also
-       # use Tcl_GetDouble(FromObj) instead.
-       #TEA_BUGGY_STRTOD
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_MAKE_LIB --
-#
-#      Generate a line that can be used to build a shared/unshared library
-#      in a platform independent manner.
-#
-# Arguments:
-#      none
-#
-#      Requires:
-#
-# Results:
-#
-#      Defines the following vars:
-#      CFLAGS -        Done late here to note disturb other AC macros
-#       MAKE_LIB -      Command to execute to build the Tcl library;
-#                       differs depending on whether or not Tcl is being
-#                       compiled as a shared library.
-#      MAKE_SHARED_LIB Makefile rule for building a shared library
-#      MAKE_STATIC_LIB Makefile rule for building a static library
-#      MAKE_STUB_LIB   Makefile rule for building a stub library
-#      VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL
-#      VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_MAKE_LIB], [
-    if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then
-       MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)"
-       MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)"
-       AC_EGREP_CPP([manifest needed], [
-#if defined(_MSC_VER) && _MSC_VER >= 1400
-print("manifest needed")
-#endif
-       ], [
-       # Could do a CHECK_PROG for mt, but should always be with MSVC8+
-       VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi"
-       VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi"
-       MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}"
-       TEA_ADD_CLEANFILES([*.manifest])
-       ])
-       MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)"
-    else
-       MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)"
-       MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}"
-       MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)"
-    fi
-
-    if test "${SHARED_BUILD}" = "1" ; then
-       MAKE_LIB="${MAKE_SHARED_LIB} "
-    else
-       MAKE_LIB="${MAKE_STATIC_LIB} "
-    fi
-
-    #--------------------------------------------------------------------
-    # Shared libraries and static libraries have different names.
-    # Use the double eval to make sure any variables in the suffix is
-    # substituted. (@@@ Might not be necessary anymore)
-    #--------------------------------------------------------------------
-
-    if test "${TEA_PLATFORM}" = "windows" ; then
-       if test "${SHARED_BUILD}" = "1" ; then
-           # We force the unresolved linking of symbols that are really in
-           # the private libraries of Tcl and Tk.
-           if test x"${TK_BIN_DIR}" != x ; then
-               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\""
-           fi
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\""
-           if test "$GCC" = "yes"; then
-               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc"
-           fi
-           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
-       else
-           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
-           if test "$GCC" = "yes"; then
-               PKG_LIB_FILE=lib${PKG_LIB_FILE}
-           fi
-       fi
-       # Some packages build their own stubs libraries
-       eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
-       if test "$GCC" = "yes"; then
-           PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE}
-       fi
-       # These aren't needed on Windows (either MSVC or gcc)
-       RANLIB=:
-       RANLIB_STUB=:
-    else
-       RANLIB_STUB="${RANLIB}"
-       if test "${SHARED_BUILD}" = "1" ; then
-           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}"
-           if test x"${TK_BIN_DIR}" != x ; then
-               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}"
-           fi
-           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
-           RANLIB=:
-       else
-           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
-       fi
-       # Some packages build their own stubs libraries
-       eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
-    fi
-
-    # These are escaped so that only CFLAGS is picked up at configure time.
-    # The other values will be substituted at make time.
-    CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}"
-    if test "${SHARED_BUILD}" = "1" ; then
-       CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}"
-    fi
-
-    AC_SUBST(MAKE_LIB)
-    AC_SUBST(MAKE_SHARED_LIB)
-    AC_SUBST(MAKE_STATIC_LIB)
-    AC_SUBST(MAKE_STUB_LIB)
-    AC_SUBST(RANLIB_STUB)
-    AC_SUBST(VC_MANIFEST_EMBED_DLL)
-    AC_SUBST(VC_MANIFEST_EMBED_EXE)
-])
-
-#------------------------------------------------------------------------
-# TEA_LIB_SPEC --
-#
-#      Compute the name of an existing object library located in libdir
-#      from the given base name and produce the appropriate linker flags.
-#
-# Arguments:
-#      basename        The base name of the library without version
-#                      numbers, extensions, or "lib" prefixes.
-#      extra_dir       Extra directory in which to search for the
-#                      library.  This location is used first, then
-#                      $prefix/$exec-prefix, then some defaults.
-#
-# Requires:
-#      TEA_INIT and TEA_PREFIX must be called first.
-#
-# Results:
-#
-#      Defines the following vars:
-#              ${basename}_LIB_NAME    The computed library name.
-#              ${basename}_LIB_SPEC    The computed linker flags.
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LIB_SPEC], [
-    AC_MSG_CHECKING([for $1 library])
-
-    # Look in exec-prefix for the library (defined by TEA_PREFIX).
-
-    tea_lib_name_dir="${exec_prefix}/lib"
-
-    # Or in a user-specified location.
-
-    if test x"$2" != x ; then
-       tea_extra_lib_dir=$2
-    else
-       tea_extra_lib_dir=NONE
-    fi
-
-    for i in \
-           `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \
-           `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \
-           `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do
-       if test -f "$i" ; then
-           tea_lib_name_dir=`dirname $i`
-           $1_LIB_NAME=`basename $i`
-           $1_LIB_PATH_NAME=$i
-           break
-       fi
-    done
-
-    if test "${TEA_PLATFORM}" = "windows"; then
-       $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\"
-    else
-       # Strip off the leading "lib" and trailing ".a" or ".so"
-
-       tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'`
-       $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}"
-    fi
-
-    if test "x${$1_LIB_NAME}" = x ; then
-       AC_MSG_ERROR([not found])
-    else
-       AC_MSG_RESULT([${$1_LIB_SPEC}])
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PRIVATE_TCL_HEADERS --
-#
-#      Locate the private Tcl include files
-#
-# Arguments:
-#
-#      Requires:
-#              TCL_SRC_DIR     Assumes that TEA_LOAD_TCLCONFIG has
-#                              already been called.
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TCL_TOP_DIR_NATIVE
-#              TCL_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [
-    # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh}
-    AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS])
-    AC_MSG_CHECKING([for Tcl private include files])
-
-    TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}`
-    TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\"
-
-    # Check to see if tcl<Plat>Port.h isn't already with the public headers
-    # Don't look for tclInt.h because that resides with tcl.h in the core
-    # sources, but the <plat>Port headers are in a different directory
-    if test "${TEA_PLATFORM}" = "windows" -a \
-       -f "${ac_cv_c_tclh}/tclWinPort.h"; then
-       result="private headers found with public headers"
-    elif test "${TEA_PLATFORM}" = "unix" -a \
-       -f "${ac_cv_c_tclh}/tclUnixPort.h"; then
-       result="private headers found with public headers"
-    else
-       TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\"
-       if test "${TEA_PLATFORM}" = "windows"; then
-           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\"
-       else
-           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\"
-       fi
-       # Overwrite the previous TCL_INCLUDES as this should capture both
-       # public and private headers in the same set.
-       # We want to ensure these are substituted so as not to require
-       # any *_NATIVE vars be defined in the Makefile
-       TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}"
-       if test "`uname -s`" = "Darwin"; then
-            # If Tcl was built as a framework, attempt to use
-            # the framework's Headers and PrivateHeaders directories
-            case ${TCL_DEFS} in
-               *TCL_FRAMEWORK*)
-                   if test -d "${TCL_BIN_DIR}/Headers" -a \
-                           -d "${TCL_BIN_DIR}/PrivateHeaders"; then
-                       TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"
-                   else
-                       TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
-                   fi
-                   ;;
-           esac
-           result="Using ${TCL_INCLUDES}"
-       else
-           if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then
-               AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}])
-           fi
-           result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}"
-       fi
-    fi
-
-    AC_SUBST(TCL_TOP_DIR_NATIVE)
-
-    AC_SUBST(TCL_INCLUDES)
-    AC_MSG_RESULT([${result}])
-])
-
-#------------------------------------------------------------------------
-# TEA_PUBLIC_TCL_HEADERS --
-#
-#      Locate the installed public Tcl header files
-#
-# Arguments:
-#      None.
-#
-# Requires:
-#      CYGPATH must be set
-#
-# Results:
-#
-#      Adds a --with-tclinclude switch to configure.
-#      Result is cached.
-#
-#      Substitutes the following vars:
-#              TCL_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [
-    AC_MSG_CHECKING([for Tcl public headers])
-
-    AC_ARG_WITH(tclinclude, [  --with-tclinclude       directory containing the public Tcl header files], with_tclinclude=${withval})
-
-    AC_CACHE_VAL(ac_cv_c_tclh, [
-       # Use the value from --with-tclinclude, if it was given
-
-       if test x"${with_tclinclude}" != x ; then
-           if test -f "${with_tclinclude}/tcl.h" ; then
-               ac_cv_c_tclh=${with_tclinclude}
-           else
-               AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h])
-           fi
-       else
-           list=""
-           if test "`uname -s`" = "Darwin"; then
-               # If Tcl was built as a framework, attempt to use
-               # the framework's Headers directory
-               case ${TCL_DEFS} in
-                   *TCL_FRAMEWORK*)
-                       list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`"
-                       ;;
-               esac
-           fi
-
-           # Look in the source dir only if Tcl is not installed,
-           # and in that situation, look there before installed locations.
-           if test -f "${TCL_BIN_DIR}/Makefile" ; then
-               list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`"
-           fi
-
-           # Check order: pkg --prefix location, Tcl's --prefix location,
-           # relative to directory of tclConfig.sh.
-
-           eval "temp_includedir=${includedir}"
-           list="$list \
-               `ls -d ${temp_includedir}        2>/dev/null` \
-               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
-               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
-           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
-               list="$list /usr/local/include /usr/include"
-               if test x"${TCL_INCLUDE_SPEC}" != x ; then
-                   d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'`
-                   list="$list `ls -d ${d} 2>/dev/null`"
-               fi
-           fi
-           for i in $list ; do
-               if test -f "$i/tcl.h" ; then
-                   ac_cv_c_tclh=$i
-                   break
-               fi
-           done
-       fi
-    ])
-
-    # Print a message based on how we determined the include path
-
-    if test x"${ac_cv_c_tclh}" = x ; then
-       AC_MSG_ERROR([tcl.h not found.  Please specify its location with --with-tclinclude])
-    else
-       AC_MSG_RESULT([${ac_cv_c_tclh}])
-    fi
-
-    # Convert to a native path and substitute into the output files.
-
-    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
-
-    TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-
-    AC_SUBST(TCL_INCLUDES)
-])
-
-#------------------------------------------------------------------------
-# TEA_PRIVATE_TK_HEADERS --
-#
-#      Locate the private Tk include files
-#
-# Arguments:
-#
-#      Requires:
-#              TK_SRC_DIR      Assumes that TEA_LOAD_TKCONFIG has
-#                               already been called.
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              TK_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [
-    # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh}
-    AC_REQUIRE([TEA_PUBLIC_TK_HEADERS])
-    AC_MSG_CHECKING([for Tk private include files])
-
-    TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}`
-    TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\"
-
-    # Check to see if tk<Plat>Port.h isn't already with the public headers
-    # Don't look for tkInt.h because that resides with tk.h in the core
-    # sources, but the <plat>Port headers are in a different directory
-    if test "${TEA_PLATFORM}" = "windows" -a \
-       -f "${ac_cv_c_tkh}/tkWinPort.h"; then
-       result="private headers found with public headers"
-    elif test "${TEA_PLATFORM}" = "unix" -a \
-       -f "${ac_cv_c_tkh}/tkUnixPort.h"; then
-       result="private headers found with public headers"
-    else
-       TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\"
-       TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\"
-       if test "${TEA_PLATFORM}" = "windows"; then
-           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\"
-       else
-           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\"
-       fi
-       # Overwrite the previous TK_INCLUDES as this should capture both
-       # public and private headers in the same set.
-       # We want to ensure these are substituted so as not to require
-       # any *_NATIVE vars be defined in the Makefile
-       TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}"
-       # Detect and add ttk subdir
-       if test -d "${TK_SRC_DIR}/generic/ttk"; then
-          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\""
-       fi
-       if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
-          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\""
-       fi
-       if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then
-          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\""
-       fi
-       if test "`uname -s`" = "Darwin"; then
-           # If Tk was built as a framework, attempt to use
-           # the framework's Headers and PrivateHeaders directories
-           case ${TK_DEFS} in
-               *TK_FRAMEWORK*)
-                       if test -d "${TK_BIN_DIR}/Headers" -a \
-                               -d "${TK_BIN_DIR}/PrivateHeaders"; then
-                           TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"
-                       else
-                           TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
-                       fi
-                       ;;
-           esac
-           result="Using ${TK_INCLUDES}"
-       else
-           if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then
-              AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}])
-           fi
-           result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}"
-       fi
-    fi
-
-    AC_SUBST(TK_TOP_DIR_NATIVE)
-    AC_SUBST(TK_XLIB_DIR_NATIVE)
-
-    AC_SUBST(TK_INCLUDES)
-    AC_MSG_RESULT([${result}])
-])
-
-#------------------------------------------------------------------------
-# TEA_PUBLIC_TK_HEADERS --
-#
-#      Locate the installed public Tk header files
-#
-# Arguments:
-#      None.
-#
-# Requires:
-#      CYGPATH must be set
-#
-# Results:
-#
-#      Adds a --with-tkinclude switch to configure.
-#      Result is cached.
-#
-#      Substitutes the following vars:
-#              TK_INCLUDES
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [
-    AC_MSG_CHECKING([for Tk public headers])
-
-    AC_ARG_WITH(tkinclude, [  --with-tkinclude        directory containing the public Tk header files], with_tkinclude=${withval})
-
-    AC_CACHE_VAL(ac_cv_c_tkh, [
-       # Use the value from --with-tkinclude, if it was given
-
-       if test x"${with_tkinclude}" != x ; then
-           if test -f "${with_tkinclude}/tk.h" ; then
-               ac_cv_c_tkh=${with_tkinclude}
-           else
-               AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h])
-           fi
-       else
-           list=""
-           if test "`uname -s`" = "Darwin"; then
-               # If Tk was built as a framework, attempt to use
-               # the framework's Headers directory.
-               case ${TK_DEFS} in
-                   *TK_FRAMEWORK*)
-                       list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`"
-                       ;;
-               esac
-           fi
-
-           # Look in the source dir only if Tk is not installed,
-           # and in that situation, look there before installed locations.
-           if test -f "${TK_BIN_DIR}/Makefile" ; then
-               list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`"
-           fi
-
-           # Check order: pkg --prefix location, Tk's --prefix location,
-           # relative to directory of tkConfig.sh, Tcl's --prefix location,
-           # relative to directory of tclConfig.sh.
-
-           eval "temp_includedir=${includedir}"
-           list="$list \
-               `ls -d ${temp_includedir}        2>/dev/null` \
-               `ls -d ${TK_PREFIX}/include      2>/dev/null` \
-               `ls -d ${TK_BIN_DIR}/../include  2>/dev/null` \
-               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
-               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
-           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
-               list="$list /usr/local/include /usr/include"
-               if test x"${TK_INCLUDE_SPEC}" != x ; then
-                   d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'`
-                   list="$list `ls -d ${d} 2>/dev/null`"
-               fi
-           fi
-           for i in $list ; do
-               if test -f "$i/tk.h" ; then
-                   ac_cv_c_tkh=$i
-                   break
-               fi
-           done
-       fi
-    ])
-
-    # Print a message based on how we determined the include path
-
-    if test x"${ac_cv_c_tkh}" = x ; then
-       AC_MSG_ERROR([tk.h not found.  Please specify its location with --with-tkinclude])
-    else
-       AC_MSG_RESULT([${ac_cv_c_tkh}])
-    fi
-
-    # Convert to a native path and substitute into the output files.
-
-    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}`
-
-    TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-
-    AC_SUBST(TK_INCLUDES)
-
-    if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
-       # On Windows and Aqua, we need the X compat headers
-       AC_MSG_CHECKING([for X11 header files])
-       if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then
-           INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`"
-           TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
-           AC_SUBST(TK_XINCLUDES)
-       fi
-       AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}])
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_PATH_CONFIG --
-#
-#      Locate the ${1}Config.sh file and perform a sanity check on
-#      the ${1} compile flags.  These are used by packages like
-#      [incr Tk] that load *Config.sh files from more than Tcl and Tk.
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-$1=...
-#
-#      Defines the following vars:
-#              $1_BIN_DIR      Full path to the directory containing
-#                              the $1Config.sh file
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_CONFIG], [
-    #
-    # Ok, lets find the $1 configuration
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-$1
-    #
-
-    if test x"${no_$1}" = x ; then
-       # we reset no_$1 in case something fails here
-       no_$1=true
-       AC_ARG_WITH($1, [  --with-$1              directory containing $1 configuration ($1Config.sh)], with_$1config=${withval})
-       AC_MSG_CHECKING([for $1 configuration])
-       AC_CACHE_VAL(ac_cv_c_$1config,[
-
-           # First check to see if --with-$1 was specified.
-           if test x"${with_$1config}" != x ; then
-               case ${with_$1config} in
-                   */$1Config.sh )
-                       if test -f ${with_$1config}; then
-                           AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself])
-                           with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'`
-                       fi;;
-               esac
-               if test -f "${with_$1config}/$1Config.sh" ; then
-                   ac_cv_c_$1config=`(cd ${with_$1config}; pwd)`
-               else
-                   AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh])
-               fi
-           fi
-
-           # then check for a private $1 installation
-           if test x"${ac_cv_c_$1config}" = x ; then
-               for i in \
-                       ../$1 \
-                       `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ../../$1 \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ../../../$1 \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ${srcdir}/../$1 \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \
-                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
-                       ; do
-                   if test -f "$i/$1Config.sh" ; then
-                       ac_cv_c_$1config=`(cd $i; pwd)`
-                       break
-                   fi
-                   if test -f "$i/unix/$1Config.sh" ; then
-                       ac_cv_c_$1config=`(cd $i/unix; pwd)`
-                       break
-                   fi
-               done
-           fi
-
-           # check in a few common install locations
-           if test x"${ac_cv_c_$1config}" = x ; then
-               for i in `ls -d ${libdir} 2>/dev/null` \
-                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
-                       `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
-                       `ls -d /usr/contrib/lib 2>/dev/null` \
-                       `ls -d /usr/lib 2>/dev/null` \
-                       `ls -d /usr/lib64 2>/dev/null` \
-                       ; do
-                   if test -f "$i/$1Config.sh" ; then
-                       ac_cv_c_$1config=`(cd $i; pwd)`
-                       break
-                   fi
-               done
-           fi
-       ])
-
-       if test x"${ac_cv_c_$1config}" = x ; then
-           $1_BIN_DIR="# no $1 configs found"
-           AC_MSG_WARN([Cannot find $1 configuration definitions])
-           exit 0
-       else
-           no_$1=
-           $1_BIN_DIR=${ac_cv_c_$1config}
-           AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh])
-       fi
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_CONFIG --
-#
-#      Load the $1Config.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              $1_BIN_DIR
-#
-# Results:
-#
-#      Substitutes the following vars:
-#              $1_SRC_DIR
-#              $1_LIB_FILE
-#              $1_LIB_SPEC
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_LOAD_CONFIG], [
-    AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh])
-
-    if test -f "${$1_BIN_DIR}/$1Config.sh" ; then
-        AC_MSG_RESULT([loading])
-       . "${$1_BIN_DIR}/$1Config.sh"
-    else
-        AC_MSG_RESULT([file not found])
-    fi
-
-    #
-    # If the $1_BIN_DIR is the build directory (not the install directory),
-    # then set the common variable name to the value of the build variables.
-    # For example, the variable $1_LIB_SPEC will be set to the value
-    # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC
-    # instead of $1_BUILD_LIB_SPEC since it will work with both an
-    # installed and uninstalled version of Tcl.
-    #
-
-    if test -f "${$1_BIN_DIR}/Makefile" ; then
-       AC_MSG_WARN([Found Makefile - using build library specs for $1])
-        $1_LIB_SPEC=${$1_BUILD_LIB_SPEC}
-        $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC}
-        $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH}
-        $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC}
-        $1_LIBRARY_PATH=${$1_LIBRARY_PATH}
-    fi
-
-    AC_SUBST($1_VERSION)
-    AC_SUBST($1_BIN_DIR)
-    AC_SUBST($1_SRC_DIR)
-
-    AC_SUBST($1_LIB_FILE)
-    AC_SUBST($1_LIB_SPEC)
-
-    AC_SUBST($1_STUB_LIB_FILE)
-    AC_SUBST($1_STUB_LIB_SPEC)
-    AC_SUBST($1_STUB_LIB_PATH)
-
-    # Allow the caller to prevent this auto-check by specifying any 2nd arg
-    AS_IF([test "x$2" = x], [
-       # Check both upper and lower-case variants
-       # If a dev wanted non-stubs libs, this function could take an option
-       # to not use _STUB in the paths below
-       AS_IF([test "x${$1_STUB_LIB_SPEC}" = x],
-           [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)],
-           [TEA_LOAD_CONFIG_LIB($1_STUB)])
-    ])
-])
-
-#------------------------------------------------------------------------
-# TEA_LOAD_CONFIG_LIB --
-#
-#      Helper function to load correct library from another extension's
-#      ${PACKAGE}Config.sh.
-#
-# Results:
-#      Adds to LIBS the appropriate extension library
-#------------------------------------------------------------------------
-AC_DEFUN([TEA_LOAD_CONFIG_LIB], [
-    AC_MSG_CHECKING([For $1 library for LIBS])
-    # This simplifies the use of stub libraries by automatically adding
-    # the stub lib to your path.  Normally this would add to SHLIB_LD_LIBS,
-    # but this is called before CONFIG_CFLAGS.  More importantly, this adds
-    # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD.
-    if test "x${$1_LIB_SPEC}" != "x" ; then
-       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then
-           TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"])
-           AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}])
-       else
-           TEA_ADD_LIBS([${$1_LIB_SPEC}])
-           AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}])
-       fi
-    else
-       AC_MSG_RESULT([file not found])
-    fi
-])
-
-#------------------------------------------------------------------------
-# TEA_EXPORT_CONFIG --
-#
-#      Define the data to insert into the ${PACKAGE}Config.sh file
-#
-# Arguments:
-#
-#      Requires the following vars to be set:
-#              $1
-#
-# Results:
-#      Substitutes the following vars:
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_EXPORT_CONFIG], [
-    #--------------------------------------------------------------------
-    # These are for $1Config.sh
-    #--------------------------------------------------------------------
-
-    # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib)
-    eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}"
-    if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
-       eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}"
-       eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}"
-    else
-       eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
-       eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
-    fi
-    $1_BUILD_LIB_SPEC="-L`$CYGPATH $(pwd)` ${$1_LIB_FLAG}"
-    $1_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${$1_LIB_FLAG}"
-    $1_BUILD_STUB_LIB_SPEC="-L`$CYGPATH $(pwd)` [$]{$1_STUB_LIB_FLAG}"
-    $1_STUB_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` [$]{$1_STUB_LIB_FLAG}"
-    $1_BUILD_STUB_LIB_PATH="`$CYGPATH $(pwd)`/[$]{PKG_STUB_LIB_FILE}"
-    $1_STUB_LIB_PATH="`$CYGPATH ${pkglibdir}`/[$]{PKG_STUB_LIB_FILE}"
-
-    AC_SUBST($1_BUILD_LIB_SPEC)
-    AC_SUBST($1_LIB_SPEC)
-    AC_SUBST($1_BUILD_STUB_LIB_SPEC)
-    AC_SUBST($1_STUB_LIB_SPEC)
-    AC_SUBST($1_BUILD_STUB_LIB_PATH)
-    AC_SUBST($1_STUB_LIB_PATH)
-
-    AC_SUBST(MAJOR_VERSION)
-    AC_SUBST(MINOR_VERSION)
-    AC_SUBST(PATCHLEVEL)
-])
-
-
-#------------------------------------------------------------------------
-# TEA_PATH_CELIB --
-#
-#      Locate Keuchel's celib emulation layer for targeting Win/CE
-#
-# Arguments:
-#      none
-#
-# Results:
-#
-#      Adds the following arguments to configure:
-#              --with-celib=...
-#
-#      Defines the following vars:
-#              CELIB_DIR       Full path to the directory containing
-#                              the include and platform lib files
-#------------------------------------------------------------------------
-
-AC_DEFUN([TEA_PATH_CELIB], [
-    # First, look for one uninstalled.
-    # the alternative search directory is invoked by --with-celib
-
-    if test x"${no_celib}" = x ; then
-       # we reset no_celib in case something fails here
-       no_celib=true
-       AC_ARG_WITH(celib,[  --with-celib=DIR        use Windows/CE support library from DIR], with_celibconfig=${withval})
-       AC_MSG_CHECKING([for Windows/CE celib directory])
-       AC_CACHE_VAL(ac_cv_c_celibconfig,[
-           # First check to see if --with-celibconfig was specified.
-           if test x"${with_celibconfig}" != x ; then
-               if test -d "${with_celibconfig}/inc" ; then
-                   ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)`
-               else
-                   AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory])
-               fi
-           fi
-
-           # then check for a celib library
-           if test x"${ac_cv_c_celibconfig}" = x ; then
-               for i in \
-                       ../celib-palm-3.0 \
-                       ../celib \
-                       ../../celib-palm-3.0 \
-                       ../../celib \
-                       `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \
-                       ${srcdir}/../celib-palm-3.0 \
-                       ${srcdir}/../celib \
-                       `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \
-                       ; do
-                   if test -d "$i/inc" ; then
-                       ac_cv_c_celibconfig=`(cd $i; pwd)`
-                       break
-                   fi
-               done
-           fi
-       ])
-       if test x"${ac_cv_c_celibconfig}" = x ; then
-           AC_MSG_ERROR([Cannot find celib support library directory])
-       else
-           no_celib=
-           CELIB_DIR=${ac_cv_c_celibconfig}
-           CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
-           AC_MSG_RESULT([found $CELIB_DIR])
-       fi
-    fi
-])
-# Local Variables:
-# mode: autoconf
-# End:
diff --git a/pkgs/tdbcsqlite3-1.0.5/win/makefile.vc b/pkgs/tdbcsqlite3-1.0.5/win/makefile.vc
deleted file mode 100644 (file)
index 3f7de84..0000000
+++ /dev/null
@@ -1,443 +0,0 @@
-#------------------------------------------------------------- -*- makefile -*-\r
-# makefile.vc --\r
-#\r
-#      Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)\r
-#\r
-# This makefile is based upon the Tcl 8.6 Makefile.vc and modified to\r
-# make it suitable as a general package makefile. Look for the word EDIT\r
-# which marks sections that may need modification. As a minumum you will\r
-# need to change the PROJECT, DOTVERSION and DLLOBJS variables to values\r
-# relevant to your package.\r
-#\r
-# See the file "license.terms" for information on usage and redistribution\r
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
-#\r
-# Copyright (c) 1995-1996 Sun Microsystems, Inc.\r
-# Copyright (c) 1998-2000 Ajuba Solutions.\r
-# Copyright (c) 2001-2005 ActiveState Corporation.\r
-# Copyright (c) 2001-2004 David Gravereaux.\r
-# Copyright (c) 2003-2008 Pat Thoyts.\r
-#------------------------------------------------------------------------------\r
-\r
-# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or\r
-# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)\r
-!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)\r
-MSG = ^\r
-You need to run vcvars32.bat from Developer Studio or setenv.bat from the^\r
-Platform SDK first to setup the environment.  Jump to this line to read^\r
-the build instructions.\r
-!error $(MSG)\r
-!endif\r
-\r
-#------------------------------------------------------------------------------\r
-# HOW TO USE this makefile:\r
-#\r
-# 1)  It is now necessary to have MSVCDir, MSDevDir or MSSDK set in the\r
-#     environment.  This is used as a check to see if vcvars32.bat had been\r
-#     run prior to running nmake or during the installation of Microsoft\r
-#     Visual C++, MSVCDir had been set globally and the PATH adjusted.\r
-#     Either way is valid.\r
-#\r
-#     You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin\r
-#     directory to setup the proper environment, if needed, for your\r
-#     current setup.  This is a needed bootstrap requirement and allows the\r
-#     swapping of different environments to be easier.\r
-#\r
-# 2)  To use the Platform SDK (not expressly needed), run setenv.bat after\r
-#     vcvars32.bat according to the instructions for it.  This can also\r
-#     turn on the 64-bit compiler, if your SDK has it.\r
-#\r
-# 3)  Targets are:\r
-#      all       -- Builds everything.\r
-#      <project> -- Builds the project (eg: nmake sample)\r
-#      test      -- Builds and runs the test suite.\r
-#      install   -- Installs the built binaries and libraries to $(INSTALLDIR)\r
-#                   in an appropriate subdirectory.\r
-#      clean/realclean/distclean -- varying levels of cleaning.\r
-#\r
-# 4)  Macros usable on the commandline:\r
-#      INSTALLDIR=<path>\r
-#              Sets where to install Tcl from the built binaries.\r
-#              C:\Progra~1\Tcl is assumed when not specified.\r
-#\r
-#      OPTS=loimpact,msvcrt,nothreads,pdbs,profile,static,symbols,unchecked,none\r
-#              Sets special options for the core.  The default is for none.\r
-#              Any combination of the above may be used (comma separated).\r
-#              'none' will over-ride everything to nothing.\r
-#\r
-#              loimpact = Adds a flag for how NT treats the heap to keep memory\r
-#                         in use, low.  This is said to impact alloc performance.\r
-#              msvcrt  =  Affects the static option only to switch it from\r
-#                         using libcmt(d) as the C runtime [by default] to\r
-#                         msvcrt(d). This is useful for static embedding\r
-#                         support.\r
-#              nothreads = Turns off multithreading support (not recommended)\r
-#              static  =  Builds a static library of the core instead of a\r
-#                         dll.  The shell will be static (and large), as well.\r
-#              pdbs     = Build detached symbols for release builds.\r
-#              profile  = Adds profiling hooks.  Map file is assumed.\r
-#              symbols  = Debug build. Links to the debug C runtime, disables\r
-#                         optimizations and creates pdb symbols files.\r
-#              unchecked = Allows a symbols build to not use the debug\r
-#                         enabled runtime (msvcrt.dll not msvcrtd.dll\r
-#                         or libcmt.lib not libcmtd.lib).\r
-#\r
-#      STATS=memdbg,compdbg,none\r
-#              Sets optional memory and bytecode compiler debugging code added\r
-#              to the core.  The default is for none.  Any combination of the\r
-#              above may be used (comma separated).  'none' will over-ride\r
-#              everything to nothing.\r
-#\r
-#              memdbg   = Enables the debugging memory allocator.\r
-#              compdbg  = Enables byte compilation logging.\r
-#\r
-#      CHECKS=64bit,fullwarn,nodep,none\r
-#              Sets special macros for checking compatability.\r
-#\r
-#              64bit    = Enable 64bit portability warnings (if available)\r
-#              fullwarn = Builds with full compiler and link warnings enabled.\r
-#                          Very verbose.\r
-#              nodep    = Turns off compatability macros to ensure Tk isn't\r
-#                          being built with deprecated functions.\r
-#\r
-#      MACHINE=(ALPHA|AMD64|IA64|IX86)\r
-#              Set the machine type used for the compiler, linker, and\r
-#              resource compiler.  This hook is needed to tell the tools\r
-#              when alternate platforms are requested.  IX86 is the default\r
-#              when not specified. If the CPU environment variable has been\r
-#              set (ie: recent Platform SDK) then MACHINE is set from CPU.\r
-#\r
-#      TMP_DIR=<path>\r
-#      OUT_DIR=<path>\r
-#              Hooks to allow the intermediate and output directories to be\r
-#              changed.  $(OUT_DIR) is assumed to be\r
-#              $(BINROOT)\(Release|Debug) based on if symbols are requested.\r
-#              $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default.\r
-#\r
-#      TESTPAT=<file>\r
-#              Reads the tests requested to be run from this file.\r
-#\r
-# 5)  Examples:\r
-#\r
-#      Basic syntax of calling nmake looks like this:\r
-#      nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]]\r
-#\r
-#                        Standard (no frills)\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
-#       c:\tcl_src\win\>nmake -f makefile.vc all\r
-#       c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl\r
-#\r
-#                         Building for Win64\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
-#       c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL\r
-#       Targeting Windows pre64 RETAIL\r
-#       c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64\r
-#\r
-#------------------------------------------------------------------------------\r
-#==============================================================================\r
-#------------------------------------------------------------------------------\r
-\r
-!if !exist("makefile.vc")\r
-MSG = ^\r
-You must run this makefile only from the directory it is in.^\r
-Please `cd` to its location first.\r
-!error $(MSG)\r
-!endif\r
-\r
-#-------------------------------------------------------------------------\r
-# Project specific information (EDIT)\r
-#\r
-# You should edit this with the name and version of your project. This\r
-# information is used to generate the name of the package library and\r
-# it's install location.\r
-#\r
-# For example, the sample extension is  going to build sample05.dll and\r
-# would install it into $(INSTALLDIR)\lib\sample05\r
-#\r
-# You need to specify the object files that need to be linked into your\r
-# binary here.\r
-#\r
-#-------------------------------------------------------------------------\r
-\r
-PROJECT = tdbcsqlite\r
-\r
-# Uncomment the following line if this is a Tk extension.\r
-#PROJECT_REQUIRES_TK=1\r
-!include "rules.vc"\r
-\r
-# nmakehelp -V <file> <tag> will search the file for tag, skips until a\r
-#      number and returns all character until a character not in [0-9.ab]\r
-#      is read.\r
-\r
-!if [echo REM = This file is generated from Makefile.vc > versions.vc]\r
-!endif\r
-# get project version from row "AC_INIT([tdbcsqlite3], [1.0b17])"\r
-!if [echo DOTVERSION = \>> versions.vc] \\r
-   && [nmakehlp -V ..\configure.ac tdbcsqlite3 >> versions.vc]\r
-!endif\r
-!include "versions.vc"\r
-\r
-VERSION         = $(DOTVERSION:.=)\r
-STUBPREFIX      = $(PROJECT)stub\r
-\r
-DLLOBJS =\r
-\r
-PRJSTUBOBJS =\r
-\r
-PRJHEADERS =\r
-\r
-#-------------------------------------------------------------------------\r
-# Target names and paths ( shouldn't need changing )\r
-#-------------------------------------------------------------------------\r
-\r
-BINROOT                = $(MAKEDIR)\r
-ROOT            = $(MAKEDIR)\..\r
-\r
-PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib\r
-PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)\r
-PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)\r
-\r
-PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
-PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)\r
-\r
-### Make sure we use backslash only.\r
-PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)\r
-LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)\r
-INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include\r
-tmdir          = $(_INSTALLDIR)\tcl$(TCL_MAJOR_VERSION)\$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)\r
-\r
-### The following paths CANNOT have spaces in them.\r
-GENERICDIR     = $(ROOT)\generic\r
-WINDIR         = $(ROOT)\win\r
-LIBDIR          = $(ROOT)\library\r
-DOCDIR         = $(ROOT)\doc\r
-TOOLSDIR       = $(ROOT)\tools\r
-COMPATDIR      = $(ROOT)\compat\r
-\r
-#---------------------------------------------------------------------\r
-# Compile flags\r
-#---------------------------------------------------------------------\r
-\r
-!if !$(DEBUG)\r
-!if $(OPTIMIZING)\r
-### This cranks the optimization level to maximize speed\r
-cdebug = $(OPTIMIZATIONS)\r
-!else\r
-cdebug =\r
-!endif\r
-!else if "$(MACHINE)" == "IA64"\r
-### Warnings are too many, can't support warnings into errors.\r
-cdebug = -Zi -Od $(DEBUGFLAGS)\r
-!else\r
-cdebug = -Zi -WX $(DEBUGFLAGS)\r
-!endif\r
-\r
-### Declarations common to all compiler options\r
-cwarn = $(WARNINGS) -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE\r
-cflags = -nologo -c $(COMPILERFLAGS) $(cwarn) -Fp$(TMP_DIR)^\\r
-\r
-!if $(MSVCRT)\r
-!if $(DEBUG) && !$(UNCHECKED)\r
-crt = -MDd\r
-!else\r
-crt = -MD\r
-!endif\r
-!else\r
-!if $(DEBUG) && !$(UNCHECKED)\r
-crt = -MTd\r
-!else\r
-crt = -MT\r
-!endif\r
-!endif\r
-\r
-cflags = $(cflags) -DMODULE_SCOPE=extern\r
-\r
-!if !$(STATIC_BUILD)\r
-cflags = $(cflags) -DUSE_TCL_STUBS\r
-!if defined(TKSTUBLIB)\r
-cflags = $(cflags) -DUSE_TK_STUBS\r
-!endif\r
-!endif\r
-\r
-INCLUDES       = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)"\r
-BASE_CFLAGS    = $(cflags) $(cdebug) $(crt) $(INCLUDES)\r
-CON_CFLAGS     = $(cflags) $(cdebug) $(crt) -DCONSOLE\r
-TCL_CFLAGS     = -DPACKAGE_NAME="\"$(PROJECT)\"" \\r
-                 -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \\r
-                 -DBUILD_$(PROJECT) \\r
-                 $(BASE_CFLAGS) $(OPTDEFINES)\r
-\r
-### Stubs files should not be compiled with -GL\r
-STUB_CFLAGS     = $(cflags) $(cdebug:-GL=) #$(TK_DEFINES)\r
-\r
-#---------------------------------------------------------------------\r
-# Link flags\r
-#---------------------------------------------------------------------\r
-\r
-!if $(DEBUG)\r
-ldebug = -debug\r
-!if $(MSVCRT)\r
-ldebug = $(ldebug) -nodefaultlib:msvcrt\r
-!endif\r
-!else\r
-ldebug = -release -opt:ref -opt:icf,3\r
-!endif\r
-\r
-### Declarations common to all linker options\r
-lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)\r
-\r
-!if $(PROFILE)\r
-lflags = $(lflags) -profile\r
-!endif\r
-\r
-!if $(ALIGN98_HACK) && !$(STATIC_BUILD)\r
-### Align sections for PE size savings.\r
-lflags = $(lflags) -opt:nowin98\r
-!else if !$(ALIGN98_HACK) && $(STATIC_BUILD)\r
-### Align sections for speed in loading by choosing the virtual page size.\r
-lflags = $(lflags) -align:4096\r
-!endif\r
-\r
-!if $(LOIMPACT)\r
-lflags = $(lflags) -ws:aggressive\r
-!endif\r
-\r
-dlllflags = $(lflags) -dll\r
-conlflags = $(lflags) -subsystem:console\r
-guilflags = $(lflags) -subsystem:windows\r
-!if !$(STATIC_BUILD)\r
-baselibs  = $(TCLSTUBLIB)\r
-!if defined(TKSTUBLIB)\r
-baselibs  = $(baselibs) $(TKSTUBLIB)\r
-!endif\r
-!endif\r
-\r
-# Avoid 'unresolved external symbol __security_cookie' errors.\r
-# c.f. http://support.microsoft.com/?id=894573\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500\r
-baselibs   = $(baselibs) bufferoverflowU.lib\r
-!endif\r
-!endif\r
-\r
-#---------------------------------------------------------------------\r
-# TclTest flags\r
-#---------------------------------------------------------------------\r
-\r
-!if "$(TESTPAT)" != ""\r
-TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)\r
-!endif\r
-\r
-#---------------------------------------------------------------------\r
-# Project specific targets (EDIT)\r
-#---------------------------------------------------------------------\r
-\r
-all:       setup $(PROJECT)\r
-$(PROJECT): setup\r
-install:    install-binaries install-docs\r
-install-binaries: install-lib-binaries\r
-\r
-test: setup $(PROJECT)\r
-        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)\r
-        @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)\r
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)\r
-       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)\r
-!if $(TCLINSTALL)\r
-        @set PATH=$(_TCLDIR)\bin;$(PATH)\r
-!else\r
-        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)\r
-!endif\r
-       $(DEBUGGER) $(TCLSH) "$(ROOT)/tests/all.tcl" $(TESTFLAGS)\r
-\r
-shell: setup $(PROJECT)\r
-        @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)\r
-       @set TDBC_LIBRARY=$(LIBDIR:\=/)\r
-!if $(TCLINSTALL)\r
-        @set PATH=$(_TCLDIR)\bin;$(PATH)\r
-!else\r
-        @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)\r
-!endif\r
-        $(DEBUGGER) $(TCLSH) $(SCRIPT)\r
-\r
-setup:\r
-       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)\r
-       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)\r
-\r
-\r
-#---------------------------------------------------------------------\r
-# Implicit rules\r
-#---------------------------------------------------------------------\r
-\r
-{$(WINDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(WINDIR)}.rc{$(TMP_DIR)}.res:\r
-       $(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \\r
-               -DCOMMAVERSION=$(DOTVERSION:.=,),0 \\r
-               -DDOTVERSION=\"$(DOTVERSION)\" \\r
-               -DVERSION=\"$(VERSION)$(SUFX)\" \\r
-!if $(DEBUG)\r
-       -d DEBUG \\r
-!endif\r
-!if $(TCL_THREADS)\r
-       -d TCL_THREADS \\r
-!endif\r
-!if $(STATIC_BUILD)\r
-       -d STATIC_BUILD \\r
-!endif\r
-       $<\r
-\r
-.SUFFIXES:\r
-.SUFFIXES:.c .rc\r
-\r
-#---------------------------------------------------------------------\r
-# Installation. (EDIT)\r
-#\r
-# You may need to modify this section to reflect the final distribution\r
-# of your files and possibly to generate documentation.\r
-#\r
-#---------------------------------------------------------------------\r
-\r
-install-lib-binaries:\r
-       @echo Installing 'tdbcsqlite3.tcl' file to '$(tmdir)\tdbc\sqlite3-$(DOTVERSION).tm'\r
-       @if not exist "$(tmdir)\tdbc" mkdir "$(tmdir)\tdbc"\r
-       @if exist $(LIBDIR) $(COPY) $(LIBDIR)\tdbcsqlite3.tcl "$(tmdir)\tdbc\sqlite3-$(DOTVERSION).tm"\r
-\r
-install-docs:\r
-       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'\r
-       @if exist $(DOCDIR) $(CPY) $(DOCDIR)\*.n "$(DOC_INSTALL_DIR)"\r
-\r
-#---------------------------------------------------------------------\r
-# Clean up\r
-#---------------------------------------------------------------------\r
-\r
-clean:\r
-       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)\r
-       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc\r
-       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i\r
-       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x\r
-       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch\r
-\r
-realclean: clean\r
-       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)\r
-\r
-distclean: realclean\r
-       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe\r
-       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj\r
diff --git a/pkgs/tdbcsqlite3-1.0.5/win/nmakehlp.c b/pkgs/tdbcsqlite3-1.0.5/win/nmakehlp.c
deleted file mode 100644 (file)
index b1a1517..0000000
+++ /dev/null
@@ -1,697 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * nmakehlp.c --
- *
- *     This is used to fix limitations within nmake and the environment.
- *
- * Copyright (c) 2002 by David Gravereaux.
- * Copyright (c) 2006 by Pat Thoyts
- *
- * See the file "license.terms" for information on usage and redistribution of
- * this file, and for a DISCLAIMER OF ALL WARRANTIES.
- * ----------------------------------------------------------------------------
- */
-
-#define _CRT_SECURE_NO_DEPRECATE
-#include <windows.h>
-#define NO_SHLWAPI_GDI
-#define NO_SHLWAPI_STREAM
-#define NO_SHLWAPI_REG
-#include <shlwapi.h>
-#pragma comment (lib, "user32.lib")
-#pragma comment (lib, "kernel32.lib")
-#pragma comment (lib, "shlwapi.lib")
-#include <stdio.h>
-#include <math.h>
-
-/*
- * This library is required for x64 builds with _some_ versions of MSVC
- */
-#if defined(_M_IA64) || defined(_M_AMD64)
-#if _MSC_VER >= 1400 && _MSC_VER < 1500
-#pragma comment(lib, "bufferoverflowU")
-#endif
-#endif
-
-/* ISO hack for dumb VC++ */
-#ifdef _MSC_VER
-#define   snprintf     _snprintf
-#endif
-
-
-
-/* protos */
-
-static int CheckForCompilerFeature(const char *option);
-static int CheckForLinkerFeature(const char *option);
-static int IsIn(const char *string, const char *substring);
-static int SubstituteFile(const char *substs, const char *filename);
-static int QualifyPath(const char *path);
-static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
-static DWORD WINAPI ReadFromPipe(LPVOID args);
-
-/* globals */
-
-#define CHUNK  25
-#define STATICBUFFERSIZE    1000
-typedef struct {
-    HANDLE pipe;
-    char buffer[STATICBUFFERSIZE];
-} pipeinfo;
-
-pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'};
-pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'};
-\f
-/*
- * exitcodes: 0 == no, 1 == yes, 2 == error
- */
-
-int
-main(
-    int argc,
-    char *argv[])
-{
-    char msg[300];
-    DWORD dwWritten;
-    int chars;
-
-    /*
-     * Make sure children (cl.exe and link.exe) are kept quiet.
-     */
-
-    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
-
-    /*
-     * Make sure the compiler and linker aren't effected by the outside world.
-     */
-
-    SetEnvironmentVariable("CL", "");
-    SetEnvironmentVariable("LINK", "");
-
-    if (argc > 1 && *argv[1] == '-') {
-       switch (*(argv[1]+1)) {
-       case 'c':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -c <compiler option>\n"
-                       "Tests for whether cl.exe supports an option\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return CheckForCompilerFeature(argv[2]);
-       case 'l':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -l <linker option>\n"
-                       "Tests for whether link.exe supports an option\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return CheckForLinkerFeature(argv[2]);
-       case 'f':
-           if (argc == 2) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -f <string> <substring>\n"
-                       "Find a substring within another\n"
-                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           } else if (argc == 3) {
-               /*
-                * If the string is blank, there is no match.
-                */
-
-               return 0;
-           } else {
-               return IsIn(argv[2], argv[3]);
-           }
-       case 's':
-           if (argc == 2) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                       "usage: %s -s <substitutions file> <file>\n"
-                       "Perform a set of string map type substutitions on a file\n"
-                       "exitcodes: 0\n",
-                       argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                       &dwWritten, NULL);
-               return 2;
-           }
-           return SubstituteFile(argv[2], argv[3]);
-       case 'V':
-           if (argc != 4) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                   "usage: %s -V filename matchstring\n"
-                   "Extract a version from a file:\n"
-                   "eg: pkgIndex.tcl \"package ifneeded http\"",
-                   argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                   &dwWritten, NULL);
-               return 0;
-           }
-           printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'));
-           return 0;
-       case 'Q':
-           if (argc != 3) {
-               chars = snprintf(msg, sizeof(msg) - 1,
-                   "usage: %s -Q path\n"
-                   "Emit the fully qualified path\n"
-                   "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
-               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
-                   &dwWritten, NULL);
-               return 2;
-           }
-           return QualifyPath(argv[2]);
-       }
-    }
-    chars = snprintf(msg, sizeof(msg) - 1,
-           "usage: %s -c|-f|-l|-Q|-s|-V ...\n"
-           "This is a little helper app to equalize shell differences between WinNT and\n"
-           "Win9x and get nmake.exe to accomplish its job.\n",
-           argv[0]);
-    WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
-    return 2;
-}
-\f
-static int
-CheckForCompilerFeature(
-    const char *option)
-{
-    STARTUPINFO si;
-    PROCESS_INFORMATION pi;
-    SECURITY_ATTRIBUTES sa;
-    DWORD threadID;
-    char msg[300];
-    BOOL ok;
-    HANDLE hProcess, h, pipeThreads[2];
-    char cmdline[100];
-
-    hProcess = GetCurrentProcess();
-
-    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
-    ZeroMemory(&si, sizeof(STARTUPINFO));
-    si.cb = sizeof(STARTUPINFO);
-    si.dwFlags   = STARTF_USESTDHANDLES;
-    si.hStdInput = INVALID_HANDLE_VALUE;
-
-    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
-    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
-    sa.lpSecurityDescriptor = NULL;
-    sa.bInheritHandle = FALSE;
-
-    /*
-     * Create a non-inheritible pipe.
-     */
-
-    CreatePipe(&Out.pipe, &h, &sa, 0);
-
-    /*
-     * Dupe the write side, make it inheritible, and close the original.
-     */
-
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Same as above, but for the error side.
-     */
-
-    CreatePipe(&Err.pipe, &h, &sa, 0);
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Base command line.
-     */
-
-    lstrcpy(cmdline, "cl.exe -nologo -c -TC -Zs -X -Fp.\\_junk.pch ");
-
-    /*
-     * Append our option for testing
-     */
-
-    lstrcat(cmdline, option);
-
-    /*
-     * Filename to compile, which exists, but is nothing and empty.
-     */
-
-    lstrcat(cmdline, " .\\nul");
-
-    ok = CreateProcess(
-           NULL,           /* Module name. */
-           cmdline,        /* Command line. */
-           NULL,           /* Process handle not inheritable. */
-           NULL,           /* Thread handle not inheritable. */
-           TRUE,           /* yes, inherit handles. */
-           DETACHED_PROCESS, /* No console for you. */
-           NULL,           /* Use parent's environment block. */
-           NULL,           /* Use parent's starting directory. */
-           &si,            /* Pointer to STARTUPINFO structure. */
-           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
-
-    if (!ok) {
-       DWORD err = GetLastError();
-       int chars = snprintf(msg, sizeof(msg) - 1,
-               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
-
-       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
-               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
-               (300-chars), 0);
-       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
-       return 2;
-    }
-
-    /*
-     * Close our references to the write handles that have now been inherited.
-     */
-
-    CloseHandle(si.hStdOutput);
-    CloseHandle(si.hStdError);
-
-    WaitForInputIdle(pi.hProcess, 5000);
-    CloseHandle(pi.hThread);
-
-    /*
-     * Start the pipe reader threads.
-     */
-
-    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
-    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
-
-    /*
-     * Block waiting for the process to end.
-     */
-
-    WaitForSingleObject(pi.hProcess, INFINITE);
-    CloseHandle(pi.hProcess);
-
-    /*
-     * Wait for our pipe to get done reading, should it be a little slow.
-     */
-
-    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
-    CloseHandle(pipeThreads[0]);
-    CloseHandle(pipeThreads[1]);
-
-    /*
-     * Look for the commandline warning code in both streams.
-     *  - in MSVC 6 & 7 we get D4002, in MSVC 8 we get D9002.
-     */
-
-    return !(strstr(Out.buffer, "D4002") != NULL
-             || strstr(Err.buffer, "D4002") != NULL
-             || strstr(Out.buffer, "D9002") != NULL
-             || strstr(Err.buffer, "D9002") != NULL
-             || strstr(Out.buffer, "D2021") != NULL
-             || strstr(Err.buffer, "D2021") != NULL);
-}
-\f
-static int
-CheckForLinkerFeature(
-    const char *option)
-{
-    STARTUPINFO si;
-    PROCESS_INFORMATION pi;
-    SECURITY_ATTRIBUTES sa;
-    DWORD threadID;
-    char msg[300];
-    BOOL ok;
-    HANDLE hProcess, h, pipeThreads[2];
-    char cmdline[100];
-
-    hProcess = GetCurrentProcess();
-
-    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
-    ZeroMemory(&si, sizeof(STARTUPINFO));
-    si.cb = sizeof(STARTUPINFO);
-    si.dwFlags   = STARTF_USESTDHANDLES;
-    si.hStdInput = INVALID_HANDLE_VALUE;
-
-    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
-    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
-    sa.lpSecurityDescriptor = NULL;
-    sa.bInheritHandle = TRUE;
-
-    /*
-     * Create a non-inheritible pipe.
-     */
-
-    CreatePipe(&Out.pipe, &h, &sa, 0);
-
-    /*
-     * Dupe the write side, make it inheritible, and close the original.
-     */
-
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Same as above, but for the error side.
-     */
-
-    CreatePipe(&Err.pipe, &h, &sa, 0);
-    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
-           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
-
-    /*
-     * Base command line.
-     */
-
-    lstrcpy(cmdline, "link.exe -nologo ");
-
-    /*
-     * Append our option for testing.
-     */
-
-    lstrcat(cmdline, option);
-
-    ok = CreateProcess(
-           NULL,           /* Module name. */
-           cmdline,        /* Command line. */
-           NULL,           /* Process handle not inheritable. */
-           NULL,           /* Thread handle not inheritable. */
-           TRUE,           /* yes, inherit handles. */
-           DETACHED_PROCESS, /* No console for you. */
-           NULL,           /* Use parent's environment block. */
-           NULL,           /* Use parent's starting directory. */
-           &si,            /* Pointer to STARTUPINFO structure. */
-           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
-
-    if (!ok) {
-       DWORD err = GetLastError();
-       int chars = snprintf(msg, sizeof(msg) - 1,
-               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
-
-       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
-               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
-               (300-chars), 0);
-       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
-       return 2;
-    }
-
-    /*
-     * Close our references to the write handles that have now been inherited.
-     */
-
-    CloseHandle(si.hStdOutput);
-    CloseHandle(si.hStdError);
-
-    WaitForInputIdle(pi.hProcess, 5000);
-    CloseHandle(pi.hThread);
-
-    /*
-     * Start the pipe reader threads.
-     */
-
-    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
-    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
-
-    /*
-     * Block waiting for the process to end.
-     */
-
-    WaitForSingleObject(pi.hProcess, INFINITE);
-    CloseHandle(pi.hProcess);
-
-    /*
-     * Wait for our pipe to get done reading, should it be a little slow.
-     */
-
-    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
-    CloseHandle(pipeThreads[0]);
-    CloseHandle(pipeThreads[1]);
-
-    /*
-     * Look for the commandline warning code in the stderr stream.
-     */
-
-    return !(strstr(Out.buffer, "LNK1117") != NULL ||
-           strstr(Err.buffer, "LNK1117") != NULL ||
-           strstr(Out.buffer, "LNK4044") != NULL ||
-           strstr(Err.buffer, "LNK4044") != NULL);
-}
-\f
-static DWORD WINAPI
-ReadFromPipe(
-    LPVOID args)
-{
-    pipeinfo *pi = (pipeinfo *) args;
-    char *lastBuf = pi->buffer;
-    DWORD dwRead;
-    BOOL ok;
-
-  again:
-    if (lastBuf - pi->buffer + CHUNK > STATICBUFFERSIZE) {
-       CloseHandle(pi->pipe);
-       return (DWORD)-1;
-    }
-    ok = ReadFile(pi->pipe, lastBuf, CHUNK, &dwRead, 0L);
-    if (!ok || dwRead == 0) {
-       CloseHandle(pi->pipe);
-       return 0;
-    }
-    lastBuf += dwRead;
-    goto again;
-
-    return 0;  /* makes the compiler happy */
-}
-\f
-static int
-IsIn(
-    const char *string,
-    const char *substring)
-{
-    return (strstr(string, substring) != NULL);
-}
-\f
-/*
- * GetVersionFromFile --
- *     Looks for a match string in a file and then returns the version
- *     following the match where a version is anything acceptable to
- *     package provide or package ifneeded.
- */
-
-static const char *
-GetVersionFromFile(
-    const char *filename,
-    const char *match,
-    int numdots)
-{
-    size_t cbBuffer = 100;
-    static char szBuffer[100];
-    char *szResult = NULL;
-    FILE *fp = fopen(filename, "rt");
-
-    if (fp != NULL) {
-       /*
-        * Read data until we see our match string.
-        */
-
-       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
-           LPSTR p, q;
-
-           p = strstr(szBuffer, match);
-           if (p != NULL) {
-               /*
-                * Skip to first digit after the match.
-                */
-
-               p += strlen(match);
-               while (*p && !isdigit(*p)) {
-                   ++p;
-               }
-
-               /*
-                * Find ending whitespace.
-                */
-
-               q = p;
-               while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q)
-                           && (!strchr("ab", q[-1])) || --numdots))) {
-                   ++q;
-               }
-
-               memcpy(szBuffer, p, q - p);
-               szBuffer[q-p] = 0;
-               szResult = szBuffer;
-               break;
-           }
-       }
-       fclose(fp);
-    }
-    return szResult;
-}
-\f
-/*
- * List helpers for the SubstituteFile function
- */
-
-typedef struct list_item_t {
-    struct list_item_t *nextPtr;
-    char * key;
-    char * value;
-} list_item_t;
-
-/* insert a list item into the list (list may be null) */
-static list_item_t *
-list_insert(list_item_t **listPtrPtr, const char *key, const char *value)
-{
-    list_item_t *itemPtr = malloc(sizeof(list_item_t));
-    if (itemPtr) {
-       itemPtr->key = strdup(key);
-       itemPtr->value = strdup(value);
-       itemPtr->nextPtr = NULL;
-
-       while(*listPtrPtr) {
-           listPtrPtr = &(*listPtrPtr)->nextPtr;
-       }
-       *listPtrPtr = itemPtr;
-    }
-    return itemPtr;
-}
-
-static void
-list_free(list_item_t **listPtrPtr)
-{
-    list_item_t *tmpPtr, *listPtr = *listPtrPtr;
-    while (listPtr) {
-       tmpPtr = listPtr;
-       listPtr = listPtr->nextPtr;
-       free(tmpPtr->key);
-       free(tmpPtr->value);
-       free(tmpPtr);
-    }
-}
-\f
-/*
- * SubstituteFile --
- *     As windows doesn't provide anything useful like sed and it's unreliable
- *     to use the tclsh you are building against (consider x-platform builds -
- *     eg compiling AMD64 target from IX86) we provide a simple substitution
- *     option here to handle autoconf style substitutions.
- *     The substitution file is whitespace and line delimited. The file should
- *     consist of lines matching the regular expression:
- *       \s*\S+\s+\S*$
- *
- *     Usage is something like:
- *       nmakehlp -S << $** > $@
- *        @PACKAGE_NAME@ $(PACKAGE_NAME)
- *        @PACKAGE_VERSION@ $(PACKAGE_VERSION)
- *        <<
- */
-
-static int
-SubstituteFile(
-    const char *substitutions,
-    const char *filename)
-{
-    size_t cbBuffer = 1024;
-    static char szBuffer[1024], szCopy[1024];
-    char *szResult = NULL;
-    list_item_t *substPtr = NULL;
-    FILE *fp, *sp;
-
-    fp = fopen(filename, "rt");
-    if (fp != NULL) {
-
-       /*
-        * Build a list of substutitions from the first filename
-        */
-
-       sp = fopen(substitutions, "rt");
-       if (sp != NULL) {
-           while (fgets(szBuffer, cbBuffer, sp) != NULL) {
-               char *ks, *ke, *vs, *ve;
-               ks = szBuffer;
-               while (ks && *ks && isspace(*ks)) ++ks;
-               ke = ks;
-               while (ke && *ke && !isspace(*ke)) ++ke;
-               vs = ke;
-               while (vs && *vs && isspace(*vs)) ++vs;
-               ve = vs;
-               while (ve && *ve && !(*ve == '\r' || *ve == '\n')) ++ve;
-               *ke = 0, *ve = 0;
-               list_insert(&substPtr, ks, vs);
-           }
-           fclose(sp);
-       }
-
-       /* debug: dump the list */
-#ifdef _DEBUG
-       {
-           int n = 0;
-           list_item_t *p = NULL;
-           for (p = substPtr; p != NULL; p = p->nextPtr, ++n) {
-               fprintf(stderr, "% 3d '%s' => '%s'\n", n, p->key, p->value);
-           }
-       }
-#endif
-
-       /*
-        * Run the substitutions over each line of the input
-        */
-
-       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
-           list_item_t *p = NULL;
-           for (p = substPtr; p != NULL; p = p->nextPtr) {
-               char *m = strstr(szBuffer, p->key);
-               if (m) {
-                   char *cp, *op, *sp;
-                   cp = szCopy;
-                   op = szBuffer;
-                   while (op != m) *cp++ = *op++;
-                   sp = p->value;
-                   while (sp && *sp) *cp++ = *sp++;
-                   op += strlen(p->key);
-                   while (*op) *cp++ = *op++;
-                   *cp = 0;
-                   memcpy(szBuffer, szCopy, sizeof(szCopy));
-               }
-           }
-           printf(szBuffer);
-       }
-
-       list_free(&substPtr);
-    }
-    fclose(fp);
-    return 0;
-}
-\f
-/*
- * QualifyPath --
- *
- *     This composes the current working directory with a provided path
- *     and returns the fully qualified and normalized path.
- *     Mostly needed to setup paths for testing.
- */
-
-static int
-QualifyPath(
-    const char *szPath)
-{
-    char szCwd[MAX_PATH + 1];
-    char szTmp[MAX_PATH + 1];
-    char *p;
-    GetCurrentDirectory(MAX_PATH, szCwd);
-    while ((p = strchr(szPath, '/')) && *p)
-       *p = '\\';
-    PathCombine(szTmp, szCwd, szPath);
-    PathCanonicalize(szCwd, szTmp);
-    printf("%s\n", szCwd);
-    return 0;
-}
-
-/*
- * Local variables:
- *   mode: c
- *   c-basic-offset: 4
- *   fill-column: 78
- *   indent-tabs-mode: t
- *   tab-width: 8
- * End:
- */
diff --git a/pkgs/tdbcsqlite3-1.0.5/win/rules.vc b/pkgs/tdbcsqlite3-1.0.5/win/rules.vc
deleted file mode 100644 (file)
index 60ed158..0000000
+++ /dev/null
@@ -1,691 +0,0 @@
-#------------------------------------------------------------------------------\r
-# rules.vc --\r
-#\r
-#      Microsoft Visual C++ makefile include for decoding the commandline\r
-#      macros.  This file does not need editing to build Tcl.\r
-#\r
-#      This version is modified from the Tcl source version to support\r
-#      building extensions using nmake.\r
-#\r
-# See the file "license.terms" for information on usage and redistribution\r
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
-#\r
-# Copyright (c) 2001-2003 David Gravereaux.\r
-# Copyright (c) 2003-2008 Patrick Thoyts\r
-#------------------------------------------------------------------------------\r
-\r
-!ifndef _RULES_VC\r
-_RULES_VC = 1\r
-\r
-cc32           = $(CC)   # built-in default.\r
-link32         = link\r
-lib32          = lib\r
-rc32           = $(RC)   # built-in default.\r
-\r
-!ifndef INSTALLDIR\r
-### Assume the normal default.\r
-_INSTALLDIR    = C:\Program Files\Tcl\r
-!else\r
-### Fix the path separators.\r
-_INSTALLDIR    = $(INSTALLDIR:/=\)\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Set the proper copy method to avoid overwrite questions\r
-# to the user when copying files and selecting the right\r
-# "delete all" method.\r
-#----------------------------------------------------------\r
-\r
-!if "$(OS)" == "Windows_NT"\r
-RMDIR  = rmdir /S /Q\r
-ERRNULL  = 2>NUL\r
-!if ![ver | find "4.0" > nul]\r
-CPY    = echo y | xcopy /i >NUL\r
-COPY   = copy >NUL\r
-!else\r
-CPY    = xcopy /i /y >NUL\r
-COPY   = copy /y >NUL\r
-!endif\r
-!else # "$(OS)" != "Windows_NT"\r
-CPY    = xcopy /i >_JUNK.OUT # On Win98 NUL does not work here.\r
-COPY   = copy >_JUNK.OUT # On Win98 NUL does not work here.\r
-RMDIR  = deltree /Y\r
-NULL    = \NUL # Used in testing directory existence\r
-ERRNULL = >NUL # Win9x shell cannot redirect stderr\r
-!endif\r
-MKDIR   = mkdir\r
-\r
-#------------------------------------------------------------------------------\r
-# Determine the host and target architectures and compiler version.\r
-#------------------------------------------------------------------------------\r
-\r
-_HASH=^#\r
-_VC_MANIFEST_EMBED_EXE=\r
-_VC_MANIFEST_EMBED_DLL=\r
-VCVER=0\r
-!if ![echo VCVERSION=_MSC_VER > vercl.x] \\r
-    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \\r
-    && ![echo ARCH=IX86 >> vercl.x] \\r
-    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \\r
-    && ![echo ARCH=AMD64 >> vercl.x] \\r
-    && ![echo $(_HASH)endif >> vercl.x] \\r
-    && ![cl -nologo -TC -P vercl.x $(ERRNULL)]\r
-!include vercl.i\r
-!if ![echo VCVER= ^\> vercl.vc] \\r
-    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]\r
-!include vercl.vc\r
-!endif\r
-!endif\r
-!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]\r
-!endif\r
-\r
-!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]\r
-NATIVE_ARCH=IX86\r
-!else\r
-NATIVE_ARCH=AMD64\r
-!endif\r
-\r
-# Since MSVC8 we must deal with manifest resources.\r
-!if $(VCVERSION) >= 1400\r
-_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1\r
-_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2\r
-!endif\r
-\r
-!ifndef MACHINE\r
-MACHINE=$(ARCH)\r
-!endif\r
-\r
-!ifndef CFG_ENCODING\r
-CFG_ENCODING   = \"cp1252\"\r
-!endif\r
-\r
-!message ===============================================================================\r
-\r
-#----------------------------------------------------------\r
-# build the helper app we need to overcome nmake's limiting\r
-# environment.\r
-#----------------------------------------------------------\r
-\r
-!if !exist(nmakehlp.exe)\r
-!if [$(cc32) -nologo nmakehlp.c -link -subsystem:console > nul]\r
-!endif\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Test for compiler features\r
-#----------------------------------------------------------\r
-\r
-### test for optimizations\r
-!if [nmakehlp -c -Ot]\r
-!message *** Compiler has 'Optimizations'\r
-OPTIMIZING     = 1\r
-!else\r
-!message *** Compiler does not have 'Optimizations'\r
-OPTIMIZING     = 0\r
-!endif\r
-\r
-OPTIMIZATIONS   =\r
-\r
-!if [nmakehlp -c -Ot]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Ot\r
-!endif\r
-\r
-!if [nmakehlp -c -Oi]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Oi\r
-!endif\r
-\r
-!if [nmakehlp -c -Op]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Op\r
-!endif\r
-\r
-!if [nmakehlp -c -fp:strict]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -fp:strict\r
-!endif\r
-\r
-!if [nmakehlp -c -Gs]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Gs\r
-!endif\r
-\r
-!if [nmakehlp -c -GS]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS\r
-!endif\r
-\r
-!if [nmakehlp -c -GL]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL\r
-!endif\r
-\r
-DEBUGFLAGS     =\r
-\r
-!if [nmakehlp -c -RTC1]\r
-DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1\r
-!elseif [nmakehlp -c -GZ]\r
-DEBUGFLAGS     = $(DEBUGFLAGS) -GZ\r
-!endif\r
-\r
-COMPILERFLAGS  =-W3\r
-\r
-# In v13 -GL and -YX are incompatible.\r
-!if [nmakehlp -c -YX]\r
-!if ![nmakehlp -c -GL]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for pentium errata\r
-!if [nmakehlp -c -QI0f]\r
-!message *** Compiler has 'Pentium 0x0f fix'\r
-COMPILERFLAGS  = $(COMPILERFLAGS) -QI0f\r
-!else\r
-!message *** Compiler does not have 'Pentium 0x0f fix'\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IA64"\r
-### test for Itanium errata\r
-!if [nmakehlp -c -QIA64_Bx]\r
-!message *** Compiler has 'B-stepping errata workarounds'\r
-COMPILERFLAGS   = $(COMPILERFLAGS) -QIA64_Bx\r
-!else\r
-!message *** Compiler does not have 'B-stepping errata workarounds'\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for -align:4096, when align:512 will do.\r
-!if [nmakehlp -l -opt:nowin98]\r
-!message *** Linker has 'Win98 alignment problem'\r
-ALIGN98_HACK   = 1\r
-!else\r
-!message *** Linker does not have 'Win98 alignment problem'\r
-ALIGN98_HACK   = 0\r
-!endif\r
-!else\r
-ALIGN98_HACK   = 0\r
-!endif\r
-\r
-LINKERFLAGS     =\r
-\r
-!if [nmakehlp -l -ltcg]\r
-LINKERFLAGS     =-ltcg\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Decode the options requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]\r
-STATIC_BUILD   = 0\r
-TCL_THREADS    = 1\r
-DEBUG          = 0\r
-SYMBOLS                = 0\r
-PROFILE                = 0\r
-PGO            = 0\r
-MSVCRT         = 0\r
-LOIMPACT       = 0\r
-UNCHECKED       = 0\r
-!else\r
-!if [nmakehlp -f $(OPTS) "static"]\r
-!message *** Doing static\r
-STATIC_BUILD   = 1\r
-!else\r
-STATIC_BUILD   = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "msvcrt"]\r
-!message *** Doing msvcrt\r
-MSVCRT         = 1\r
-!else\r
-MSVCRT         = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "nothreads"]\r
-!message *** Compile explicitly for non-threaded tcl\r
-TCL_THREADS    = 0\r
-!else\r
-TCL_THREADS     = 1\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "symbols"]\r
-!message *** Doing symbols\r
-DEBUG          = 1\r
-!else\r
-DEBUG          = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "pdbs"]\r
-!message *** Doing pdbs\r
-SYMBOLS                = 1\r
-!else\r
-SYMBOLS                = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "profile"]\r
-!message *** Doing profile\r
-PROFILE                = 1\r
-!else\r
-PROFILE                = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "pgi"]\r
-!message *** Doing profile guided optimization instrumentation\r
-PGO            = 1\r
-!elseif [nmakehlp -f $(OPTS) "pgo"]\r
-!message *** Doing profile guided optimization\r
-PGO            = 2\r
-!else\r
-PGO            = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "loimpact"]\r
-!message *** Doing loimpact\r
-LOIMPACT       = 1\r
-!else\r
-LOIMPACT       = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "unchecked"]\r
-!message *** Doing unchecked\r
-UNCHECKED = 1\r
-!else\r
-UNCHECKED = 0\r
-!endif\r
-!endif\r
-\r
-\r
-!if !$(STATIC_BUILD)\r
-# Make sure we don't build overly fat DLLs.\r
-MSVCRT         = 1\r
-# We shouldn't statically put the extensions inside the shell when dynamic.\r
-TCL_USE_STATIC_PACKAGES = 0\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Figure-out how to name our intermediate and output directories.\r
-# We wouldn't want different builds to use the same .obj files\r
-# by accident.\r
-#----------------------------------------------------------\r
-\r
-#----------------------------------------\r
-# Naming convention:\r
-#   t = full thread support.\r
-#   s = static library (as opposed to an\r
-#      import library)\r
-#   g = linked to the debug enabled C\r
-#      run-time.\r
-#   x = special static build when it\r
-#      links to the dynamic C run-time.\r
-#----------------------------------------\r
-SUFX       = sgx\r
-\r
-!if $(DEBUG)\r
-BUILDDIRTOP = Debug\r
-!else\r
-BUILDDIRTOP = Release\r
-!endif\r
-\r
-!if "$(MACHINE)" != "IX86"\r
-BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)\r
-!endif\r
-!if $(VCVER) > 6\r
-BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)\r
-!endif\r
-\r
-!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)\r
-SUFX       = $(SUFX:g=)\r
-!endif\r
-\r
-TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX\r
-\r
-!if !$(STATIC_BUILD)\r
-TMP_DIRFULL = $(TMP_DIRFULL:Static=)\r
-SUFX       = $(SUFX:s=)\r
-EXT        = dll\r
-!if $(MSVCRT)\r
-TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
-SUFX       = $(SUFX:x=)\r
-!endif\r
-!else\r
-TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)\r
-EXT        = lib\r
-!if !$(MSVCRT)\r
-TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
-SUFX       = $(SUFX:x=)\r
-!endif\r
-!endif\r
-\r
-!if !$(TCL_THREADS)\r
-TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)\r
-SUFX       = $(SUFX:t=)\r
-!endif\r
-\r
-!ifndef TMP_DIR\r
-TMP_DIR            = $(TMP_DIRFULL)\r
-!ifndef OUT_DIR\r
-OUT_DIR            = .\$(BUILDDIRTOP)\r
-!endif\r
-!else\r
-!ifndef OUT_DIR\r
-OUT_DIR            = $(TMP_DIR)\r
-!endif\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Decode the statistics requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"]\r
-TCL_MEM_DEBUG      = 0\r
-TCL_COMPILE_DEBUG   = 0\r
-!else\r
-!if [nmakehlp -f $(STATS) "memdbg"]\r
-!message *** Doing memdbg\r
-TCL_MEM_DEBUG      = 1\r
-!else\r
-TCL_MEM_DEBUG      = 0\r
-!endif\r
-!if [nmakehlp -f $(STATS) "compdbg"]\r
-!message *** Doing compdbg\r
-TCL_COMPILE_DEBUG   = 1\r
-!else\r
-TCL_COMPILE_DEBUG   = 0\r
-!endif\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Decode the checks requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(CHECKS)" == "" || [nmakehlp -f "$(CHECKS)" "none"]\r
-TCL_NO_DEPRECATED          = 0\r
-WARNINGS                   = -W3\r
-!else\r
-!if [nmakehlp -f $(CHECKS) "nodep"]\r
-!message *** Doing nodep check\r
-TCL_NO_DEPRECATED          = 1\r
-!else\r
-TCL_NO_DEPRECATED          = 0\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "fullwarn"]\r
-!message *** Doing full warnings check\r
-WARNINGS                   = -W4\r
-!if [nmakehlp -l -warn:3]\r
-LINKERFLAGS                = $(LINKERFLAGS) -warn:3\r
-!endif\r
-!else\r
-WARNINGS                   = -W3\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]\r
-!message *** Doing 64bit portability warnings\r
-WARNINGS                   = $(WARNINGS) -Wp64\r
-!endif\r
-!endif\r
-\r
-!if $(PGO) > 1\r
-!if [nmakehlp -l -ltcg:pgoptimize]\r
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize\r
-!else\r
-MSG=^\r
-This compiler does not support profile guided optimization.\r
-!error $(MSG)\r
-!endif\r
-!elseif $(PGO) > 0\r
-!if [nmakehlp -l -ltcg:pginstrument]\r
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument\r
-!else\r
-MSG=^\r
-This compiler does not support profile guided optimization.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Set our defines now armed with our options.\r
-#----------------------------------------------------------\r
-\r
-OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS\r
-\r
-!if $(TCL_MEM_DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG\r
-!endif\r
-!if $(TCL_COMPILE_DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS\r
-!endif\r
-!if $(TCL_THREADS)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1\r
-!endif\r
-!if $(STATIC_BUILD)\r
-OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD\r
-!endif\r
-!if $(TCL_NO_DEPRECATED)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED\r
-!endif\r
-\r
-!if !$(DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DNDEBUG\r
-!if $(OPTIMIZING)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED\r
-!endif\r
-!endif\r
-!if $(PROFILE)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED\r
-!endif\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Get common info used when building extensions.\r
-#----------------------------------------------------------\r
-\r
-!if "$(PROJECT)" != "tcl"\r
-\r
-# If INSTALLDIR set to tcl root dir then reset to the lib dir.\r
-!if exist("$(_INSTALLDIR)\include\tcl.h")\r
-_INSTALLDIR=$(_INSTALLDIR)\lib\r
-!endif\r
-\r
-!if !defined(TCLDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCLDIR                = $(_INSTALLDIR)\..\r
-_TCL_H          = $(_INSTALLDIR)\..\include\tcl.h\r
-TCLDIR          = $(_INSTALLDIR)\..\r
-!else\r
-MSG=^\r
-Failed to find tcl.h.  Set the TCLDIR macro.\r
-!error $(MSG)\r
-!endif\r
-!else\r
-_TCLDIR        = $(TCLDIR:/=\)\r
-!if exist("$(_TCLDIR)\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCL_H          = $(_TCLDIR)\include\tcl.h\r
-!elseif exist("$(_TCLDIR)\generic\tcl.h")\r
-TCLINSTALL     = 0\r
-_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
-!else\r
-MSG =^\r
-Failed to find tcl.h.  The TCLDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-!endif\r
-\r
-#--------------------------------------------------------------\r
-# Extract various version numbers from tcl headers\r
-# The generated file is then included in the makefile.\r
-#--------------------------------------------------------------\r
-\r
-!if [echo REM = This file is generated from rules.vc > versions.vc]\r
-!endif\r
-!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TCL_MINOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]\r
-!endif\r
-\r
-# If building the tcl core then we need additional package versions\r
-!if "$(PROJECT)" == "tcl"\r
-!if [echo PKG_HTTP_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\http\pkgIndex.tcl http >> versions.vc]\r
-!endif\r
-!if [echo PKG_TCLTEST_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\tcltest\pkgIndex.tcl tcltest >> versions.vc]\r
-!endif\r
-!if [echo PKG_MSGCAT_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\msgcat\pkgIndex.tcl msgcat >> versions.vc]\r
-!endif\r
-!if [echo PKG_PLATFORM_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform " >> versions.vc]\r
-!endif\r
-!if [echo PKG_SHELL_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform::shell" >> versions.vc]\r
-!endif\r
-!endif\r
-\r
-!include versions.vc\r
-\r
-#--------------------------------------------------------------\r
-# Setup tcl version dependent stuff headers\r
-#--------------------------------------------------------------\r
-\r
-!if "$(PROJECT)" != "tcl"\r
-\r
-TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)\r
-\r
-!if $(TCL_VERSION) < 81\r
-TCL_DOES_STUBS = 0\r
-!else\r
-TCL_DOES_STUBS = 1\r
-!endif\r
-\r
-!if $(TCLINSTALL)\r
-_TCLBINDIR      = "$(_TCLDIR)\bin"\r
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH           = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\lib\r
-COFFBASE       = \must\have\tcl\sources\to\build\this\target\r
-TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target\r
-TCL_INCLUDES    = -I"$(_TCLDIR)\include"\r
-!else\r
-_TCLBINDIR      = $(_TCLDIR)\win\$(BUILDDIRTOP)\r
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH          = "$(_TCLBINDIR)\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\library\r
-COFFBASE       = "$(_TCLDIR)\win\coffbase.txt"\r
-TCLTOOLSDIR    = $(_TCLDIR)\tools\r
-TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"\r
-!endif\r
-\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Optionally check for Tk info for building extensions.\r
-#----------------------------------------------------------\r
-\r
-!ifdef PROJECT_REQUIRES_TK\r
-!if !defined(TKDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_INSTALLDIR)\..\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
-!elseif exist("$(_TCLDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_TCLDIR)\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
-!endif\r
-!else\r
-_TKDIR = $(TKDIR:/=\)\r
-!if exist("$(_TKDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-!elseif exist("$(_TKDIR)\generic\tk.h")\r
-TKINSTALL      = 0\r
-_TK_H          = $(_TKDIR)\generic\tk.h\r
-!else\r
-MSG =^\r
-Failed to find tk.h. The TKDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-!endif\r
-\r
-#-------------------------------------------------------------------------\r
-# Extract Tk version numbers\r
-#-------------------------------------------------------------------------\r
-\r
-!if defined(PROJECT_REQUIRES_TK) || "$(PROJECT)" == "tk"\r
-!if [echo TK_MAJOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TK_MINOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TK_PATCH_LEVEL = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]\r
-!endif\r
-\r
-!include versions.vc\r
-\r
-TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)\r
-TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)\r
-\r
-!if "$(PROJECT)" != "tk"\r
-!if $(TKINSTALL)\r
-_TKBINDIR       = $(_TKDIR)\bin\r
-WISH           = "$(_TKBINDIR)\wish$(TK_VERSION)$(SUFX).exe"\r
-!if !exist($(WISH)) && $(TCL_THREADS)\r
-WISH           = "$(_TKBINDIR)\wish$(TK_VERSION)t$(SUFX).exe"\r
-!endif\r
-TKSTUBLIB      = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"\r
-TK_LIBRARY     = $(_TKDIR)\lib\r
-TKIMPLIB       = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"\r
-TK_INCLUDES     = -I"$(_TKDIR)\include"\r
-!else\r
-_TKBINDIR       = $(_TKDIR)\win\$(BUILDDIRTOP)\r
-WISH           = "$(_TKBINDIR)\wish$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(WISH)) && $(TCL_THREADS)\r
-WISH           = "$(_TKBINDIR)\wish$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TKSTUBLIB      = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"\r
-TKIMPLIB       = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"\r
-TK_LIBRARY     = $(_TKDIR)\library\r
-TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"\r
-!endif\r
-!endif\r
-\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Setup the fully qualified OUT_DIR path as OUT_DIR_PATH\r
-#----------------------------------------------------------\r
-!if [echo OUT_DIR_PATH = \>> versions.vc] \\r
-    && [nmakehlp -Q "$(OUT_DIR)" >> versions.vc]\r
-!endif\r
-!include versions.vc\r
-\r
-#----------------------------------------------------------\r
-# Display stats being used.\r
-#----------------------------------------------------------\r
-\r
-!message *** Intermediate directory will be '$(TMP_DIR)'\r
-!message *** Output directory will be '$(OUT_DIR)'\r
-!message *** Suffix for binaries will be '$(SUFX)'\r
-!message *** Optional defines are '$(OPTDEFINES)'\r
-!message *** Compiler version $(VCVER). Target machine is $(MACHINE)\r
-!message *** Host architecture is $(NATIVE_ARCH)\r
-!message *** Compiler options '$(COMPILERFLAGS) $(OPTIMIZATIONS) $(DEBUGFLAGS) $(WARNINGS)'\r
-!message *** Link options '$(LINKERFLAGS)'\r
-\r
-!endif\r
similarity index 97%
rename from pkgs/tdbcsqlite3-1.0.5/Makefile.in
rename to pkgs/tdbcsqlite3-1.0.6/Makefile.in
index 2780a18..ba69eec 100644 (file)
@@ -108,7 +108,8 @@ TDBC_LIB_FILE       = @TDBC_LIB_FILE@
 EXTRA_PATH     = $(top_builddir):$(TCL_BIN_DIR)
 #EXTRA_PATH    = $(top_builddir):$(TCL_BIN_DIR):$(TK_BIN_DIR)
 TCLLIBPATH     = $(top_builddir)
-TCLSH_ENV      = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library`
+TCLSH_ENV      = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library` \
+                 TDBC_LIBRARY=`@CYGPATH@ @tdbc_LIBRARY_PATH@`
 PKG_ENV                = PATH="$(EXTRA_PATH):$(PATH)" \
                  TCLLIBPATH="$(TCLLIBPATH)"
 
@@ -150,10 +151,6 @@ libraries:
 #========================================================================
 
 doc:
-       @echo "If you have documentation to create, place the commands to"
-       @echo "build the docs in the 'doc:' target.  For example:"
-       @echo "        xml2nroff sample.xml > sample.n"
-       @echo "        xml2html sample.xml > sample.html"
 
 install: all install-binaries install-libraries install-doc
 
@@ -244,6 +241,7 @@ dist: dist-clean
 
        mkdir $(DIST_DIR)/win
        cp -p $(srcdir)/win/makefile.vc $(srcdir)/win/nmakehlp.c \
+               $(srcdir)/win/targets.vc $(srcdir)/win/rules-ext.vc \
                $(srcdir)/win/rules.vc $(DIST_DIR)/win/
 
        (cd $(DIST_ROOT); $(COMPRESS);)
similarity index 96%
rename from pkgs/tdbcsqlite3-1.0.5/README
rename to pkgs/tdbcsqlite3-1.0.6/README
index de788e0..052d7c1 100644 (file)
@@ -1,6 +1,6 @@
 README: tdbcsqlite3
 
-    This is the 1.0.5 source distribution of the bridge between Tcl
+    This is the 1.0.6 source distribution of the bridge between Tcl
     Database Connectivity (TDBC) and SQLite3, an open-source SQL
     database with an in-process server.
 
similarity index 99%
rename from pkgs/tdbcsqlite3-1.0.5/configure
rename to pkgs/tdbcsqlite3-1.0.6/configure
index 3b86e8c..0b48245 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for tdbcsqlite3 1.0.5.
+# Generated by GNU Autoconf 2.69 for tdbcsqlite3 1.0.6.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -576,8 +576,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='tdbcsqlite3'
 PACKAGE_TARNAME='tdbcsqlite3'
-PACKAGE_VERSION='1.0.5'
-PACKAGE_STRING='tdbcsqlite3 1.0.5'
+PACKAGE_VERSION='1.0.6'
+PACKAGE_STRING='tdbcsqlite3 1.0.6'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -592,6 +592,7 @@ TCL_THREADS
 TCL_INCLUDES
 TDBC_LIB_FILE
 TDBC_VERSION
+tdbc_LIBRARY_PATH
 tdbc_STUB_LIB_PATH
 tdbc_STUB_LIB_SPEC
 tdbc_STUB_LIB_FILE
@@ -1229,7 +1230,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures tdbcsqlite3 1.0.5 to adapt to many kinds of systems.
+\`configure' configures tdbcsqlite3 1.0.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1290,7 +1291,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of tdbcsqlite3 1.0.5:";;
+     short | recursive ) echo "Configuration of tdbcsqlite3 1.0.6:";;
    esac
   cat <<\_ACEOF
 
@@ -1298,7 +1299,7 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-threads        build with threads
+  --enable-threads        build with threads (default: on)
   --enable-shared         build and link with shared libraries (default: on)
   --enable-stubs          build and link with stub libraries. Always true for
                           shared builds (default: on)
@@ -1386,7 +1387,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-tdbcsqlite3 configure 1.0.5
+tdbcsqlite3 configure 1.0.6
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1487,7 +1488,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by tdbcsqlite3 $as_me 1.0.5, which was
+It was created by tdbcsqlite3 $as_me 1.0.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2097,8 +2098,9 @@ $as_echo "$as_me: WARNING: --with-tcl argument should refer to directory contain
                for i in `ls -d ${libdir} 2>/dev/null` \
                        `ls -d ${exec_prefix}/lib 2>/dev/null` \
                        `ls -d ${prefix}/lib 2>/dev/null` \
-                       `ls -d /usr/local/lib 2>/dev/null` \
                        `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/pkg/lib 2>/dev/null` \
                        `ls -d /usr/lib 2>/dev/null` \
                        `ls -d /usr/lib64 2>/dev/null` \
                        `ls -d /usr/lib/tcl8.6 2>/dev/null` \
@@ -3347,6 +3349,16 @@ fi
 
 fi
 
+# The next bit probably ought to be in TEA_LOAD_CONFIG
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Looking for \"${tdbc_BIN_DIR}/Makefile\"" >&5
+$as_echo "$as_me: WARNING: Looking for \"${tdbc_BIN_DIR}/Makefile\"" >&2;}
+if test -f "${tdbc_BIN_DIR}/Makefile" ; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Found Makefile - using build include spec and lib specs for tdbc" >&5
+$as_echo "$as_me: WARNING: Found Makefile - using build include spec and lib specs for tdbc" >&2;}
+    tdbc_INCLUDE_SPEC=${tdbc_BUILD_INCLUDE_SPEC}
+    tdbc_LIBRARY_PATH=${tdbc_BUILD_LIBRARY_PATH}
+fi
+
 
 
 
@@ -4519,7 +4531,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by tdbcsqlite3 $as_me 1.0.5, which was
+This file was extended by tdbcsqlite3 $as_me 1.0.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -4572,7 +4584,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-tdbcsqlite3 config.status 1.0.5
+tdbcsqlite3 config.status 1.0.6
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
similarity index 92%
rename from pkgs/tdbcsqlite3-1.0.5/configure.ac
rename to pkgs/tdbcsqlite3-1.0.6/configure.ac
index 22b26d9..20514f5 100755 (executable)
@@ -5,7 +5,7 @@ dnl     to configure the system for the local environment.
 #
 # RCS: @(#) $Id: configure.in,v 1.48 2008/11/05 00:13:00 hobbs Exp $
 
-AC_INIT([tdbcsqlite3], [1.0.5])
+AC_INIT([tdbcsqlite3], [1.0.6])
 
 #--------------------------------------------------------------------
 # Call TEA_INIT as the first TEA_ macro to set up initial vars.
@@ -29,6 +29,14 @@ TEA_LOAD_TCLCONFIG
 
 TEA_PATH_CONFIG(tdbc)
 TEA_LOAD_CONFIG(tdbc)
+# The next bit probably ought to be in TEA_LOAD_CONFIG
+AC_MSG_WARN([Looking for "${tdbc_BIN_DIR}/Makefile"])
+if test -f "${tdbc_BIN_DIR}/Makefile" ; then
+    AC_MSG_WARN([Found Makefile - using build include spec and lib specs for tdbc])
+    tdbc_INCLUDE_SPEC=${tdbc_BUILD_INCLUDE_SPEC}
+    tdbc_LIBRARY_PATH=${tdbc_BUILD_LIBRARY_PATH}
+fi
+AC_SUBST(tdbc_LIBRARY_PATH)
 AC_SUBST(TDBC_VERSION)
 AC_SUBST(tdbc_BIN_DIR)
 AC_SUBST(TDBC_LIB_FILE)
@@ -13,7 +13,7 @@
 package require tdbc
 package require sqlite3
 
-package provide tdbc::sqlite3 1.0.5
+package provide tdbc::sqlite3 1.0.6
 
 namespace eval tdbc::sqlite3 {
     namespace export connection
diff --git a/pkgs/tdbcsqlite3-1.0.6/tclconfig/tcl.m4 b/pkgs/tdbcsqlite3-1.0.6/tclconfig/tcl.m4
new file mode 100644 (file)
index 0000000..e8234a2
--- /dev/null
@@ -0,0 +1,4335 @@
+# tcl.m4 --
+#
+#      This file provides a set of autoconf macros to help TEA-enable
+#      a Tcl extension.
+#
+# Copyright (c) 1999-2000 Ajuba Solutions.
+# Copyright (c) 2002-2005 ActiveState Corporation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+AC_PREREQ(2.57)
+
+dnl TEA extensions pass us the version of TEA they think they
+dnl are compatible with (must be set in TEA_INIT below)
+dnl TEA_VERSION="3.10"
+
+# Possible values for key variables defined:
+#
+# TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem')
+# TEA_PLATFORM        - windows unix
+# TEA_TK_EXTENSION    - True if this is a Tk extension
+#
+
+#------------------------------------------------------------------------
+# TEA_PATH_TCLCONFIG --
+#
+#      Locate the tclConfig.sh file and perform a sanity check on
+#      the Tcl compile flags
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-tcl=...
+#
+#      Defines the following vars:
+#              TCL_BIN_DIR     Full path to the directory containing
+#                              the tclConfig.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_TCLCONFIG], [
+    dnl TEA specific: Make sure we are initialized
+    AC_REQUIRE([TEA_INIT])
+    #
+    # Ok, lets find the tcl configuration
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-tcl
+    #
+
+    if test x"${no_tcl}" = x ; then
+       # we reset no_tcl in case something fails here
+       no_tcl=true
+       AC_ARG_WITH(tcl,
+           AC_HELP_STRING([--with-tcl],
+               [directory containing tcl configuration (tclConfig.sh)]),
+           with_tclconfig="${withval}")
+       AC_MSG_CHECKING([for Tcl configuration])
+       AC_CACHE_VAL(ac_cv_c_tclconfig,[
+
+           # First check to see if --with-tcl was specified.
+           if test x"${with_tclconfig}" != x ; then
+               case "${with_tclconfig}" in
+                   */tclConfig.sh )
+                       if test -f "${with_tclconfig}"; then
+                           AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself])
+                           with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`"
+                       fi ;;
+               esac
+               if test -f "${with_tclconfig}/tclConfig.sh" ; then
+                   ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`"
+               else
+                   AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
+               fi
+           fi
+
+           # then check for a private Tcl installation
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in \
+                       ../tcl \
+                       `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../tcl \
+                       `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../../tcl \
+                       `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # on Darwin, check in Framework installation locations
+           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
+               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
+                       `ls -d /Library/Frameworks 2>/dev/null` \
+                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
+                       `ls -d /System/Library/Frameworks 2>/dev/null` \
+                       ; do
+                   if test -f "$i/Tcl.framework/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # TEA specific: on Windows, check in common installation locations
+           if test "${TEA_PLATFORM}" = "windows" \
+               -a x"${ac_cv_c_tclconfig}" = x ; then
+               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
+                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few common install locations
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in `ls -d ${libdir} 2>/dev/null` \
+                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
+                       `ls -d ${prefix}/lib 2>/dev/null` \
+                       `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/pkg/lib 2>/dev/null` \
+                       `ls -d /usr/lib 2>/dev/null` \
+                       `ls -d /usr/lib64 2>/dev/null` \
+                       `ls -d /usr/lib/tcl8.6 2>/dev/null` \
+                       `ls -d /usr/lib/tcl8.5 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few other private locations
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in \
+                       ${srcdir}/../tcl \
+                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+       ])
+
+       if test x"${ac_cv_c_tclconfig}" = x ; then
+           TCL_BIN_DIR="# no Tcl configs found"
+           AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh])
+       else
+           no_tcl=
+           TCL_BIN_DIR="${ac_cv_c_tclconfig}"
+           AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_PATH_TKCONFIG --
+#
+#      Locate the tkConfig.sh file
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-tk=...
+#
+#      Defines the following vars:
+#              TK_BIN_DIR      Full path to the directory containing
+#                              the tkConfig.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_TKCONFIG], [
+    #
+    # Ok, lets find the tk configuration
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-tk
+    #
+
+    if test x"${no_tk}" = x ; then
+       # we reset no_tk in case something fails here
+       no_tk=true
+       AC_ARG_WITH(tk,
+           AC_HELP_STRING([--with-tk],
+               [directory containing tk configuration (tkConfig.sh)]),
+           with_tkconfig="${withval}")
+       AC_MSG_CHECKING([for Tk configuration])
+       AC_CACHE_VAL(ac_cv_c_tkconfig,[
+
+           # First check to see if --with-tkconfig was specified.
+           if test x"${with_tkconfig}" != x ; then
+               case "${with_tkconfig}" in
+                   */tkConfig.sh )
+                       if test -f "${with_tkconfig}"; then
+                           AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself])
+                           with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`"
+                       fi ;;
+               esac
+               if test -f "${with_tkconfig}/tkConfig.sh" ; then
+                   ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`"
+               else
+                   AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
+               fi
+           fi
+
+           # then check for a private Tk library
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in \
+                       ../tk \
+                       `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../tk \
+                       `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../../tk \
+                       `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # on Darwin, check in Framework installation locations
+           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then
+               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
+                       `ls -d /Library/Frameworks 2>/dev/null` \
+                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
+                       `ls -d /System/Library/Frameworks 2>/dev/null` \
+                       ; do
+                   if test -f "$i/Tk.framework/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few common install locations
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in `ls -d ${libdir} 2>/dev/null` \
+                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
+                       `ls -d ${prefix}/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/lib 2>/dev/null` \
+                       `ls -d /usr/lib64 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # TEA specific: on Windows, check in common installation locations
+           if test "${TEA_PLATFORM}" = "windows" \
+               -a x"${ac_cv_c_tkconfig}" = x ; then
+               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
+                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few other private locations
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in \
+                       ${srcdir}/../tk \
+                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+       ])
+
+       if test x"${ac_cv_c_tkconfig}" = x ; then
+           TK_BIN_DIR="# no Tk configs found"
+           AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh])
+       else
+           no_tk=
+           TK_BIN_DIR="${ac_cv_c_tkconfig}"
+           AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_TCLCONFIG --
+#
+#      Load the tclConfig.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              TCL_BIN_DIR
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TCL_BIN_DIR
+#              TCL_SRC_DIR
+#              TCL_LIB_FILE
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LOAD_TCLCONFIG], [
+    AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh])
+
+    if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
+        AC_MSG_RESULT([loading])
+       . "${TCL_BIN_DIR}/tclConfig.sh"
+    else
+        AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh])
+    fi
+
+    # eval is required to do the TCL_DBGX substitution
+    eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
+    eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
+
+    # If the TCL_BIN_DIR is the build directory (not the install directory),
+    # then set the common variable name to the value of the build variables.
+    # For example, the variable TCL_LIB_SPEC will be set to the value
+    # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
+    # instead of TCL_BUILD_LIB_SPEC since it will work with both an
+    # installed and uninstalled version of Tcl.
+    if test -f "${TCL_BIN_DIR}/Makefile" ; then
+        TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}"
+        TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}"
+        TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}"
+    elif test "`uname -s`" = "Darwin"; then
+       # If Tcl was built as a framework, attempt to use the libraries
+       # from the framework at the given location so that linking works
+       # against Tcl.framework installed in an arbitrary location.
+       case ${TCL_DEFS} in
+           *TCL_FRAMEWORK*)
+               if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
+                   for i in "`cd "${TCL_BIN_DIR}"; pwd`" \
+                            "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do
+                       if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then
+                           TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}"
+                           break
+                       fi
+                   done
+               fi
+               if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then
+                   TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}"
+                   TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"
+               fi
+               ;;
+       esac
+    fi
+
+    # eval is required to do the TCL_DBGX substitution
+    eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
+    eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
+    eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
+    eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
+
+    AC_SUBST(TCL_VERSION)
+    AC_SUBST(TCL_PATCH_LEVEL)
+    AC_SUBST(TCL_BIN_DIR)
+    AC_SUBST(TCL_SRC_DIR)
+
+    AC_SUBST(TCL_LIB_FILE)
+    AC_SUBST(TCL_LIB_FLAG)
+    AC_SUBST(TCL_LIB_SPEC)
+
+    AC_SUBST(TCL_STUB_LIB_FILE)
+    AC_SUBST(TCL_STUB_LIB_FLAG)
+    AC_SUBST(TCL_STUB_LIB_SPEC)
+
+    AC_MSG_CHECKING([platform])
+    hold_cc=$CC; CC="$TCL_CC"
+    AC_TRY_COMPILE(,[
+           #ifdef _WIN32
+               #error win32
+           #endif
+       ], [
+           TEA_PLATFORM="unix"
+           CYGPATH=echo
+       ], [
+           TEA_PLATFORM="windows"
+           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)   ]
+    )
+    CC=$hold_cc
+    AC_MSG_RESULT($TEA_PLATFORM)
+
+    # The BUILD_$pkg is to define the correct extern storage class
+    # handling when making this package
+    AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [],
+           [Building extension source?])
+    # Do this here as we have fully defined TEA_PLATFORM now
+    if test "${TEA_PLATFORM}" = "windows" ; then
+       EXEEXT=".exe"
+       CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp"
+    fi
+
+    # TEA specific:
+    AC_SUBST(CLEANFILES)
+    AC_SUBST(TCL_LIBS)
+    AC_SUBST(TCL_DEFS)
+    AC_SUBST(TCL_EXTRA_CFLAGS)
+    AC_SUBST(TCL_LD_FLAGS)
+    AC_SUBST(TCL_SHLIB_LD_LIBS)
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_TKCONFIG --
+#
+#      Load the tkConfig.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              TK_BIN_DIR
+#
+# Results:
+#
+#      Sets the following vars that should be in tkConfig.sh:
+#              TK_BIN_DIR
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LOAD_TKCONFIG], [
+    AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh])
+
+    if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then
+        AC_MSG_RESULT([loading])
+       . "${TK_BIN_DIR}/tkConfig.sh"
+    else
+        AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh])
+    fi
+
+    # eval is required to do the TK_DBGX substitution
+    eval "TK_LIB_FILE=\"${TK_LIB_FILE}\""
+    eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\""
+
+    # If the TK_BIN_DIR is the build directory (not the install directory),
+    # then set the common variable name to the value of the build variables.
+    # For example, the variable TK_LIB_SPEC will be set to the value
+    # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC
+    # instead of TK_BUILD_LIB_SPEC since it will work with both an
+    # installed and uninstalled version of Tcl.
+    if test -f "${TK_BIN_DIR}/Makefile" ; then
+        TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}"
+        TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}"
+        TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}"
+    elif test "`uname -s`" = "Darwin"; then
+       # If Tk was built as a framework, attempt to use the libraries
+       # from the framework at the given location so that linking works
+       # against Tk.framework installed in an arbitrary location.
+       case ${TK_DEFS} in
+           *TK_FRAMEWORK*)
+               if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then
+                   for i in "`cd "${TK_BIN_DIR}"; pwd`" \
+                            "`cd "${TK_BIN_DIR}"/../..; pwd`"; do
+                       if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then
+                           TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}"
+                           break
+                       fi
+                   done
+               fi
+               if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then
+                   TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}"
+                   TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"
+               fi
+               ;;
+       esac
+    fi
+
+    # eval is required to do the TK_DBGX substitution
+    eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\""
+    eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\""
+    eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\""
+    eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\""
+
+    # TEA specific: Ensure windowingsystem is defined
+    if test "${TEA_PLATFORM}" = "unix" ; then
+       case ${TK_DEFS} in
+           *MAC_OSX_TK*)
+               AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?])
+               TEA_WINDOWINGSYSTEM="aqua"
+               ;;
+           *)
+               TEA_WINDOWINGSYSTEM="x11"
+               ;;
+       esac
+    elif test "${TEA_PLATFORM}" = "windows" ; then
+       TEA_WINDOWINGSYSTEM="win32"
+    fi
+
+    AC_SUBST(TK_VERSION)
+    AC_SUBST(TK_BIN_DIR)
+    AC_SUBST(TK_SRC_DIR)
+
+    AC_SUBST(TK_LIB_FILE)
+    AC_SUBST(TK_LIB_FLAG)
+    AC_SUBST(TK_LIB_SPEC)
+
+    AC_SUBST(TK_STUB_LIB_FILE)
+    AC_SUBST(TK_STUB_LIB_FLAG)
+    AC_SUBST(TK_STUB_LIB_SPEC)
+
+    # TEA specific:
+    AC_SUBST(TK_LIBS)
+    AC_SUBST(TK_XINCLUDES)
+])
+
+#------------------------------------------------------------------------
+# TEA_PROG_TCLSH
+#      Determine the fully qualified path name of the tclsh executable
+#      in the Tcl build directory or the tclsh installed in a bin
+#      directory. This macro will correctly determine the name
+#      of the tclsh executable even if tclsh has not yet been
+#      built in the build directory. The tclsh found is always
+#      associated with a tclConfig.sh file. This tclsh should be used
+#      only for running extension test cases. It should never be
+#      or generation of files (like pkgIndex.tcl) at build time.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              TCLSH_PROG
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PROG_TCLSH], [
+    AC_MSG_CHECKING([for tclsh])
+    if test -f "${TCL_BIN_DIR}/Makefile" ; then
+        # tclConfig.sh is in Tcl build directory
+        if test "${TEA_PLATFORM}" = "windows"; then
+          if test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
+          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}"
+          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}"
+          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}"
+          fi
+        else
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh"
+        fi
+    else
+        # tclConfig.sh is in install location
+        if test "${TEA_PLATFORM}" = "windows"; then
+            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
+        else
+            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}"
+        fi
+        list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \
+              `ls -d ${TCL_BIN_DIR}/..     2>/dev/null` \
+              `ls -d ${TCL_PREFIX}/bin     2>/dev/null`"
+        for i in $list ; do
+            if test -f "$i/${TCLSH_PROG}" ; then
+                REAL_TCL_BIN_DIR="`cd "$i"; pwd`/"
+                break
+            fi
+        done
+        TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}"
+    fi
+    AC_MSG_RESULT([${TCLSH_PROG}])
+    AC_SUBST(TCLSH_PROG)
+])
+
+#------------------------------------------------------------------------
+# TEA_PROG_WISH
+#      Determine the fully qualified path name of the wish executable
+#      in the Tk build directory or the wish installed in a bin
+#      directory. This macro will correctly determine the name
+#      of the wish executable even if wish has not yet been
+#      built in the build directory. The wish found is always
+#      associated with a tkConfig.sh file. This wish should be used
+#      only for running extension test cases. It should never be
+#      or generation of files (like pkgIndex.tcl) at build time.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              WISH_PROG
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PROG_WISH], [
+    AC_MSG_CHECKING([for wish])
+    if test -f "${TK_BIN_DIR}/Makefile" ; then
+        # tkConfig.sh is in Tk build directory
+        if test "${TEA_PLATFORM}" = "windows"; then
+          if test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
+          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}s${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}$s{EXEEXT}"
+          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}"
+          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}"
+          fi
+        else
+            WISH_PROG="${TK_BIN_DIR}/wish"
+        fi
+    else
+        # tkConfig.sh is in install location
+        if test "${TEA_PLATFORM}" = "windows"; then
+            WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
+        else
+            WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}"
+        fi
+        list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \
+              `ls -d ${TK_BIN_DIR}/..     2>/dev/null` \
+              `ls -d ${TK_PREFIX}/bin     2>/dev/null`"
+        for i in $list ; do
+            if test -f "$i/${WISH_PROG}" ; then
+                REAL_TK_BIN_DIR="`cd "$i"; pwd`/"
+                break
+            fi
+        done
+        WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}"
+    fi
+    AC_MSG_RESULT([${WISH_PROG}])
+    AC_SUBST(WISH_PROG)
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_SHARED --
+#
+#      Allows the building of shared libraries
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-shared=yes|no
+#              --enable-stubs=yes|no
+#
+#      Defines the following vars:
+#              STATIC_BUILD    Used for building import/export libraries
+#                              on Windows.
+#
+#      Sets the following vars:
+#              SHARED_BUILD    Value of 1 or 0
+#               STUBS_BUILD     Value if 1 or 0
+#               USE_TCL_STUBS   Value true: if SHARED_BUILD or --enable-stubs
+#               USE_TCLOO_STUBS Value true: if SHARED_BUILD or --enable-stubs
+#               USE_TK_STUBS    Value true: if SHARED_BUILD or --enable-stubs
+#                                AND TEA_WINDOWING_SYSTEM != ""
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ENABLE_SHARED], [
+    AC_MSG_CHECKING([how to build libraries])
+    AC_ARG_ENABLE(shared,
+       AC_HELP_STRING([--enable-shared],
+           [build and link with shared libraries (default: on)]),
+       [shared_ok=$enableval], [shared_ok=yes])
+
+    if test "${enable_shared+set}" = set; then
+       enableval="$enable_shared"
+       shared_ok=$enableval
+    else
+       shared_ok=yes
+    fi
+
+    AC_ARG_ENABLE(stubs,
+       AC_HELP_STRING([--enable-stubs],
+           [build and link with stub libraries. Always true for shared builds (default: on)]),
+       [stubs_ok=$enableval], [stubs_ok=yes])
+
+    if test "${enable_stubs+set}" = set; then
+       enableval="$enable_stubs"
+       stubs_ok=$enableval
+    else
+       stubs_ok=yes
+    fi
+
+    # Stubs are always enabled for shared builds
+    if test "$shared_ok" = "yes" ; then
+       AC_MSG_RESULT([shared])
+       SHARED_BUILD=1
+        STUBS_BUILD=1
+    else
+       AC_MSG_RESULT([static])
+       SHARED_BUILD=0
+       AC_DEFINE(STATIC_BUILD, 1, [This a static build])
+        if test "$stubs_ok" = "yes" ; then
+          STUBS_BUILD=1
+        else
+          STUBS_BUILD=0
+        fi
+    fi
+    if test "${STUBS_BUILD}" = "1" ; then
+      AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs])
+      AC_DEFINE(USE_TCLOO_STUBS, 1, [Use TclOO stubs])
+      if test "${TEA_WINDOWINGSYSTEM}" != ""; then
+        AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs])
+      fi
+    fi
+
+    AC_SUBST(SHARED_BUILD)
+    AC_SUBST(STUBS_BUILD)
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_THREADS --
+#
+#      Specify if thread support should be enabled.  If "yes" is specified
+#      as an arg (optional), threads are enabled by default, "no" means
+#      threads are disabled.  "yes" is the default.
+#
+#      TCL_THREADS is checked so that if you are compiling an extension
+#      against a threaded core, your extension must be compiled threaded
+#      as well.
+#
+#      Note that it is legal to have a thread enabled extension run in a
+#      threaded or non-threaded Tcl core, but a non-threaded extension may
+#      only run in a non-threaded Tcl core.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-threads
+#
+#      Sets the following vars:
+#              THREADS_LIBS    Thread library(s)
+#
+#      Defines the following vars:
+#              TCL_THREADS
+#              _REENTRANT
+#              _THREAD_SAFE
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_ENABLE_THREADS], [
+    AC_ARG_ENABLE(threads,
+       AC_HELP_STRING([--enable-threads],
+           [build with threads (default: on)]),
+       [tcl_ok=$enableval], [tcl_ok=yes])
+
+    if test "${enable_threads+set}" = set; then
+       enableval="$enable_threads"
+       tcl_ok=$enableval
+    else
+       tcl_ok=yes
+    fi
+
+    if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
+       TCL_THREADS=1
+
+       if test "${TEA_PLATFORM}" != "windows" ; then
+           # We are always OK on Windows, so check what this platform wants:
+
+           # USE_THREAD_ALLOC tells us to try the special thread-based
+           # allocator that significantly reduces lock contention
+           AC_DEFINE(USE_THREAD_ALLOC, 1,
+               [Do we want to use the threaded memory allocator?])
+           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
+           if test "`uname -s`" = "SunOS" ; then
+               AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
+                       [Do we really want to follow the standard? Yes we do!])
+           fi
+           AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?])
+           AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
+           if test "$tcl_ok" = "no"; then
+               # Check a little harder for __pthread_mutex_init in the same
+               # library, as some systems hide it there until pthread.h is
+               # defined.  We could alternatively do an AC_TRY_COMPILE with
+               # pthread.h, but that will work with libpthread really doesn't
+               # exist, like AIX 4.2.  [Bug: 4359]
+               AC_CHECK_LIB(pthread, __pthread_mutex_init,
+                   tcl_ok=yes, tcl_ok=no)
+           fi
+
+           if test "$tcl_ok" = "yes"; then
+               # The space is needed
+               THREADS_LIBS=" -lpthread"
+           else
+               AC_CHECK_LIB(pthreads, pthread_mutex_init,
+                   tcl_ok=yes, tcl_ok=no)
+               if test "$tcl_ok" = "yes"; then
+                   # The space is needed
+                   THREADS_LIBS=" -lpthreads"
+               else
+                   AC_CHECK_LIB(c, pthread_mutex_init,
+                       tcl_ok=yes, tcl_ok=no)
+                   if test "$tcl_ok" = "no"; then
+                       AC_CHECK_LIB(c_r, pthread_mutex_init,
+                           tcl_ok=yes, tcl_ok=no)
+                       if test "$tcl_ok" = "yes"; then
+                           # The space is needed
+                           THREADS_LIBS=" -pthread"
+                       else
+                           TCL_THREADS=0
+                           AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled])
+                       fi
+                   fi
+               fi
+           fi
+       fi
+    else
+       TCL_THREADS=0
+    fi
+    # Do checking message here to not mess up interleaved configure output
+    AC_MSG_CHECKING([for building with threads])
+    if test "${TCL_THREADS}" = 1; then
+       AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?])
+       AC_MSG_RESULT([yes (default)])
+    else
+       AC_MSG_RESULT([no])
+    fi
+    # TCL_THREADS sanity checking.  See if our request for building with
+    # threads is the same as the way Tcl was built.  If not, warn the user.
+    case ${TCL_DEFS} in
+       *THREADS=1*)
+           if test "${TCL_THREADS}" = "0"; then
+               AC_MSG_WARN([
+    Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
+    that IS thread-enabled.  It is recommended to use --enable-threads.])
+           fi
+           ;;
+       *)
+           if test "${TCL_THREADS}" = "1"; then
+               AC_MSG_WARN([
+    --enable-threads requested, but building against a Tcl that is NOT
+    thread-enabled.  This is an OK configuration that will also run in
+    a thread-enabled core.])
+           fi
+           ;;
+    esac
+    AC_SUBST(TCL_THREADS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_SYMBOLS --
+#
+#      Specify if debugging symbols should be used.
+#      Memory (TCL_MEM_DEBUG) debugging can also be enabled.
+#
+# Arguments:
+#      none
+#
+#      TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives
+#      the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted.
+#      Requires the following vars to be set in the Makefile:
+#              CFLAGS_DEFAULT
+#              LDFLAGS_DEFAULT
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-symbols
+#
+#      Defines the following vars:
+#              CFLAGS_DEFAULT  Sets to $(CFLAGS_DEBUG) if true
+#                              Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false
+#              LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
+#                              Sets to $(LDFLAGS_OPTIMIZE) if false
+#              DBGX            Formerly used as debug library extension;
+#                              always blank now.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_ENABLE_SYMBOLS], [
+    dnl TEA specific: Make sure we are initialized
+    AC_REQUIRE([TEA_CONFIG_CFLAGS])
+    AC_MSG_CHECKING([for build with symbols])
+    AC_ARG_ENABLE(symbols,
+       AC_HELP_STRING([--enable-symbols],
+           [build with debugging symbols (default: off)]),
+       [tcl_ok=$enableval], [tcl_ok=no])
+    DBGX=""
+    if test "$tcl_ok" = "no"; then
+       CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG"
+       LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
+       AC_MSG_RESULT([no])
+    else
+       CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
+       LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
+       if test "$tcl_ok" = "yes"; then
+           AC_MSG_RESULT([yes (standard debugging)])
+       fi
+    fi
+    # TEA specific:
+    if test "${TEA_PLATFORM}" != "windows" ; then
+       LDFLAGS_DEFAULT="${LDFLAGS}"
+    fi
+    AC_SUBST(CFLAGS_DEFAULT)
+    AC_SUBST(LDFLAGS_DEFAULT)
+    AC_SUBST(TCL_DBGX)
+
+    if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
+       AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?])
+    fi
+
+    if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
+       if test "$tcl_ok" = "all"; then
+           AC_MSG_RESULT([enabled symbols mem debugging])
+       else
+           AC_MSG_RESULT([enabled $tcl_ok debugging])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_LANGINFO --
+#
+#      Allows use of modern nl_langinfo check for better l10n.
+#      This is only relevant for Unix.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-langinfo=yes|no (default is yes)
+#
+#      Defines the following vars:
+#              HAVE_LANGINFO   Triggers use of nl_langinfo if defined.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_ENABLE_LANGINFO], [
+    AC_ARG_ENABLE(langinfo,
+       AC_HELP_STRING([--enable-langinfo],
+           [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]),
+       [langinfo_ok=$enableval], [langinfo_ok=yes])
+
+    HAVE_LANGINFO=0
+    if test "$langinfo_ok" = "yes"; then
+       AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no])
+    fi
+    AC_MSG_CHECKING([whether to use nl_langinfo])
+    if test "$langinfo_ok" = "yes"; then
+       AC_CACHE_VAL(tcl_cv_langinfo_h, [
+           AC_TRY_COMPILE([#include <langinfo.h>], [nl_langinfo(CODESET);],
+                   [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])])
+       AC_MSG_RESULT([$tcl_cv_langinfo_h])
+       if test $tcl_cv_langinfo_h = yes; then
+           AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?])
+       fi
+    else
+       AC_MSG_RESULT([$langinfo_ok])
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_CONFIG_SYSTEM
+#
+#      Determine what the system is (some things cannot be easily checked
+#      on a feature-driven basis, alas). This can usually be done via the
+#      "uname" command.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Defines the following var:
+#
+#      system -        System/platform/version identification code.
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_CONFIG_SYSTEM], [
+    AC_CACHE_CHECK([system version], tcl_cv_sys_version, [
+       # TEA specific:
+       if test "${TEA_PLATFORM}" = "windows" ; then
+           tcl_cv_sys_version=windows
+       else
+           tcl_cv_sys_version=`uname -s`-`uname -r`
+           if test "$?" -ne 0 ; then
+               AC_MSG_WARN([can't find uname command])
+               tcl_cv_sys_version=unknown
+           else
+               if test "`uname -s`" = "AIX" ; then
+                   tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
+               fi
+           fi
+       fi
+    ])
+    system=$tcl_cv_sys_version
+])
+
+#--------------------------------------------------------------------
+# TEA_CONFIG_CFLAGS
+#
+#      Try to determine the proper flags to pass to the compiler
+#      for building shared libraries and other such nonsense.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines and substitutes the following vars:
+#
+#      DL_OBJS, DL_LIBS - removed for TEA, only needed by core.
+#       LDFLAGS -      Flags to pass to the compiler when linking object
+#                       files into an executable application binary such
+#                       as tclsh.
+#       LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
+#                       that tell the run-time dynamic linker where to look
+#                       for shared libraries such as libtcl.so.  Depends on
+#                       the variable LIB_RUNTIME_DIR in the Makefile. Could
+#                       be the same as CC_SEARCH_FLAGS if ${CC} is used to link.
+#       CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib",
+#                       that tell the run-time dynamic linker where to look
+#                       for shared libraries such as libtcl.so.  Depends on
+#                       the variable LIB_RUNTIME_DIR in the Makefile.
+#       SHLIB_CFLAGS -  Flags to pass to cc when compiling the components
+#                       of a shared library (may request position-independent
+#                       code, among other things).
+#       SHLIB_LD -      Base command to use for combining object files
+#                       into a shared library.
+#       SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
+#                       creating shared libraries.  This symbol typically
+#                       goes at the end of the "ld" commands that build
+#                       shared libraries. The value of the symbol defaults to
+#                       "${LIBS}" if all of the dependent libraries should
+#                       be specified when creating a shared library.  If
+#                       dependent libraries should not be specified (as on
+#                       SunOS 4.x, where they cause the link to fail, or in
+#                       general if Tcl and Tk aren't themselves shared
+#                       libraries), then this symbol has an empty string
+#                       as its value.
+#       SHLIB_SUFFIX -  Suffix to use for the names of dynamically loadable
+#                       extensions.  An empty string means we don't know how
+#                       to use shared libraries on this platform.
+#       LIB_SUFFIX -    Specifies everything that comes after the "libfoo"
+#                       in a static or shared library name, using the $PACKAGE_VERSION variable
+#                       to put the version in the right place.  This is used
+#                       by platforms that need non-standard library names.
+#                       Examples:  ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs
+#                       to have a version after the .so, and ${PACKAGE_VERSION}.a
+#                       on AIX, since a shared library needs to have
+#                       a .a extension whereas shared objects for loadable
+#                       extensions have a .so extension.  Defaults to
+#                       ${PACKAGE_VERSION}${SHLIB_SUFFIX}.
+#      CFLAGS_DEBUG -
+#                      Flags used when running the compiler in debug mode
+#      CFLAGS_OPTIMIZE -
+#                      Flags used when running the compiler in optimize mode
+#      CFLAGS -        Additional CFLAGS added as necessary (usually 64-bit)
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_CONFIG_CFLAGS], [
+    dnl TEA specific: Make sure we are initialized
+    AC_REQUIRE([TEA_INIT])
+
+    # Step 0.a: Enable 64 bit support?
+
+    AC_MSG_CHECKING([if 64bit support is requested])
+    AC_ARG_ENABLE(64bit,
+       AC_HELP_STRING([--enable-64bit],
+           [enable 64bit support (default: off)]),
+       [do64bit=$enableval], [do64bit=no])
+    AC_MSG_RESULT([$do64bit])
+
+    # Step 0.b: Enable Solaris 64 bit VIS support?
+
+    AC_MSG_CHECKING([if 64bit Sparc VIS support is requested])
+    AC_ARG_ENABLE(64bit-vis,
+       AC_HELP_STRING([--enable-64bit-vis],
+           [enable 64bit Sparc VIS support (default: off)]),
+       [do64bitVIS=$enableval], [do64bitVIS=no])
+    AC_MSG_RESULT([$do64bitVIS])
+    # Force 64bit on with VIS
+    AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes])
+
+    # Step 0.c: Check if visibility support is available. Do this here so
+    # that platform specific alternatives can be used below if this fails.
+
+    AC_CACHE_CHECK([if compiler supports visibility "hidden"],
+       tcl_cv_cc_visibility_hidden, [
+       hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror"
+       AC_TRY_LINK([
+           extern __attribute__((__visibility__("hidden"))) void f(void);
+           void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes,
+           tcl_cv_cc_visibility_hidden=no)
+       CFLAGS=$hold_cflags])
+    AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [
+       AC_DEFINE(MODULE_SCOPE,
+           [extern __attribute__((__visibility__("hidden")))],
+           [Compiler support for module scope symbols])
+       AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols])
+    ])
+
+    # Step 0.d: Disable -rpath support?
+
+    AC_MSG_CHECKING([if rpath support is requested])
+    AC_ARG_ENABLE(rpath,
+       AC_HELP_STRING([--disable-rpath],
+           [disable rpath support (default: on)]),
+       [doRpath=$enableval], [doRpath=yes])
+    AC_MSG_RESULT([$doRpath])
+
+    # TEA specific: Cross-compiling options for Windows/CE builds?
+
+    AS_IF([test "${TEA_PLATFORM}" = windows], [
+       AC_MSG_CHECKING([if Windows/CE build is requested])
+       AC_ARG_ENABLE(wince,
+           AC_HELP_STRING([--enable-wince],
+               [enable Win/CE support (where applicable)]),
+           [doWince=$enableval], [doWince=no])
+       AC_MSG_RESULT([$doWince])
+    ])
+
+    # Set the variable "system" to hold the name and version number
+    # for the system.
+
+    TEA_CONFIG_SYSTEM
+
+    # Require ranlib early so we can override it in special cases below.
+
+    AC_REQUIRE([AC_PROG_RANLIB])
+
+    # Set configuration options based on system name and version.
+    # This is similar to Tcl's unix/tcl.m4 except that we've added a
+    # "windows" case and removed some core-only vars.
+
+    do64bit_ok=no
+    # default to '{$LIBS}' and set to "" on per-platform necessary basis
+    SHLIB_LD_LIBS='${LIBS}'
+    # When ld needs options to work in 64-bit mode, put them in
+    # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load]
+    # is disabled by the user. [Bug 1016796]
+    LDFLAGS_ARCH=""
+    UNSHARED_LIB_SUFFIX=""
+    # TEA specific: use PACKAGE_VERSION instead of VERSION
+    TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
+    ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
+    TCL_LIB_VERSIONS_OK=ok
+    CFLAGS_DEBUG=-g
+    AS_IF([test "$GCC" = yes], [
+       CFLAGS_OPTIMIZE=-O2
+       CFLAGS_WARNING="-Wall"
+    ], [
+       CFLAGS_OPTIMIZE=-O
+       CFLAGS_WARNING=""
+    ])
+    AC_CHECK_TOOL(AR, ar)
+    STLIB_LD='${AR} cr'
+    LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
+    AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION=""],[SHLIB_VERSION=".$SHLIB_VERSION"])
+    case $system in
+       # TEA specific:
+       windows)
+           # This is a 2-stage check to make sure we have the 64-bit SDK
+           # We have to know where the SDK is installed.
+           # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs
+           # MACHINE is IX86 for LINK, but this is used by the manifest,
+           # which requires x86|amd64|ia64.
+           MACHINE="X86"
+           if test "$do64bit" != "no" ; then
+               if test "x${MSSDK}x" = "xx" ; then
+                   MSSDK="C:/Progra~1/Microsoft Platform SDK"
+               fi
+               MSSDK=`echo "$MSSDK" | sed -e  's!\\\!/!g'`
+               PATH64=""
+               case "$do64bit" in
+                   amd64|x64|yes)
+                       MACHINE="AMD64" ; # default to AMD64 64-bit build
+                       PATH64="${MSSDK}/Bin/Win64/x86/AMD64"
+                       ;;
+                   ia64)
+                       MACHINE="IA64"
+                       PATH64="${MSSDK}/Bin/Win64"
+                       ;;
+               esac
+               if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then
+                   AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode])
+                   AC_MSG_WARN([Ensure latest Platform SDK is installed])
+                   do64bit="no"
+               else
+                   AC_MSG_RESULT([   Using 64-bit $MACHINE mode])
+                   do64bit_ok="yes"
+               fi
+           fi
+
+           if test "$doWince" != "no" ; then
+               if test "$do64bit" != "no" ; then
+                   AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible])
+               fi
+               if test "$GCC" = "yes" ; then
+                   AC_MSG_ERROR([Windows/CE and GCC builds incompatible])
+               fi
+               TEA_PATH_CELIB
+               # Set defaults for common evc4/PPC2003 setup
+               # Currently Tcl requires 300+, possibly 420+ for sockets
+               CEVERSION=420;          # could be 211 300 301 400 420 ...
+               TARGETCPU=ARMV4;        # could be ARMV4 ARM MIPS SH3 X86 ...
+               ARCH=ARM;               # could be ARM MIPS X86EM ...
+               PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
+               if test "$doWince" != "yes"; then
+                   # If !yes then the user specified something
+                   # Reset ARCH to allow user to skip specifying it
+                   ARCH=
+                   eval `echo $doWince | awk -F, '{ \
+           if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \
+           if ([$]1 < 400)   { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
+           if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \
+           if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \
+           if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \
+                   }'`
+                   if test "x${ARCH}" = "x" ; then
+                       ARCH=$TARGETCPU;
+                   fi
+               fi
+               OSVERSION=WCE$CEVERSION;
+               if test "x${WCEROOT}" = "x" ; then
+                       WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
+                   if test ! -d "${WCEROOT}" ; then
+                       WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
+                   fi
+               fi
+               if test "x${SDKROOT}" = "x" ; then
+                   SDKROOT="C:/Program Files/Windows CE Tools"
+                   if test ! -d "${SDKROOT}" ; then
+                       SDKROOT="C:/Windows CE Tools"
+                   fi
+               fi
+               WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
+               SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
+               if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \
+                   -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
+                   AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]])
+                   doWince="no"
+               else
+                   # We could PATH_NOSPACE these, but that's not important,
+                   # as long as we quote them when used.
+                   CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
+                   if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
+                       CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
+                   fi
+                   CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
+               fi
+           fi
+
+           if test "$GCC" != "yes" ; then
+               if test "${SHARED_BUILD}" = "0" ; then
+                   runtime=-MT
+               else
+                   runtime=-MD
+               fi
+               case "x`echo \${VisualStudioVersion}`" in
+                   x1[[4-9]]*)
+                       lflags="${lflags} -nodefaultlib:libucrt.lib"
+                       TEA_ADD_LIBS([ucrt.lib])
+                   ;;
+                   *)
+                   ;;
+               esac
+
+                if test "$do64bit" != "no" ; then
+                   # All this magic is necessary for the Win64 SDK RC1 - hobbs
+                   CC="\"${PATH64}/cl.exe\""
+                   CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\""
+                   RC="\"${MSSDK}/bin/rc.exe\""
+                   lflags="${lflags} -nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\""
+                   LINKBIN="\"${PATH64}/link.exe\""
+                   CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d"
+                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
+                   # Avoid 'unresolved external symbol __security_cookie'
+                   # errors, c.f. http://support.microsoft.com/?id=894573
+                   TEA_ADD_LIBS([bufferoverflowU.lib])
+               elif test "$doWince" != "no" ; then
+                   CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
+                   if test "${TARGETCPU}" = "X86"; then
+                       CC="\"${CEBINROOT}/cl.exe\""
+                   else
+                       CC="\"${CEBINROOT}/cl${ARCH}.exe\""
+                   fi
+                   CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
+                   RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
+                   arch=`echo ${ARCH} | awk '{print tolower([$]0)}'`
+                   defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS"
+                   if test "${SHARED_BUILD}" = "1" ; then
+                       # Static CE builds require static celib as well
+                       defs="${defs} _DLL"
+                   fi
+                   for i in $defs ; do
+                       AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i)
+                   done
+                   AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version])
+                   AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version])
+                   CFLAGS_DEBUG="-nologo -Zi -Od"
+                   CFLAGS_OPTIMIZE="-nologo -Ox"
+                   lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
+                   lflags="${lflags} -MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
+                   LINKBIN="\"${CEBINROOT}/link.exe\""
+                   AC_SUBST(CELIB_DIR)
+               else
+                   RC="rc"
+                   lflags="${lflags} -nologo"
+                   LINKBIN="link"
+                   CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d"
+                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
+               fi
+           fi
+
+           if test "$GCC" = "yes"; then
+               # mingw gcc mode
+               AC_CHECK_TOOL(RC, windres)
+               CFLAGS_DEBUG="-g"
+               CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
+               SHLIB_LD='${CC} -shared'
+               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
+               LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}"
+               LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}"
+
+               AC_CACHE_CHECK(for cross-compile version of gcc,
+                       ac_cv_cross,
+                       AC_TRY_COMPILE([
+                           #ifdef _WIN32
+                               #error cross-compiler
+                           #endif
+                       ], [],
+                       ac_cv_cross=yes,
+                       ac_cv_cross=no)
+                     )
+                     if test "$ac_cv_cross" = "yes"; then
+                       case "$do64bit" in
+                           amd64|x64|yes)
+                               CC="x86_64-w64-mingw32-gcc"
+                               LD="x86_64-w64-mingw32-ld"
+                               AR="x86_64-w64-mingw32-ar"
+                               RANLIB="x86_64-w64-mingw32-ranlib"
+                               RC="x86_64-w64-mingw32-windres"
+                           ;;
+                           *)
+                               CC="i686-w64-mingw32-gcc"
+                               LD="i686-w64-mingw32-ld"
+                               AR="i686-w64-mingw32-ar"
+                               RANLIB="i686-w64-mingw32-ranlib"
+                               RC="i686-w64-mingw32-windres"
+                           ;;
+                       esac
+               fi
+
+           else
+               SHLIB_LD="${LINKBIN} -dll ${lflags}"
+               # link -lib only works when -lib is the first arg
+               STLIB_LD="${LINKBIN} -lib ${lflags}"
+               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib'
+               PATHTYPE=-w
+               # For information on what debugtype is most useful, see:
+               # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
+               # and also
+               # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx
+               # This essentially turns it all on.
+               LDFLAGS_DEBUG="-debug -debugtype:cv"
+               LDFLAGS_OPTIMIZE="-release"
+               if test "$doWince" != "no" ; then
+                   LDFLAGS_CONSOLE="-link ${lflags}"
+                   LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
+               else
+                   LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
+                   LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
+               fi
+           fi
+
+           SHLIB_SUFFIX=".dll"
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll'
+
+           TCL_LIB_VERSIONS_OK=nodots
+           ;;
+       AIX-*)
+           AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [
+               # AIX requires the _r compiler when gcc isn't being used
+               case "${CC}" in
+                   *_r|*_r\ *)
+                       # ok ...
+                       ;;
+                   *)
+                       # Make sure only first arg gets _r
+                       CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'`
+                       ;;
+               esac
+               AC_MSG_RESULT([Using $CC for compiling with threads])
+           ])
+           LIBS="$LIBS -lc"
+           SHLIB_CFLAGS=""
+           SHLIB_SUFFIX=".so"
+
+           LD_LIBRARY_PATH_VAR="LIBPATH"
+
+           # Check to enable 64-bit flags for compiler/linker
+           AS_IF([test "$do64bit" = yes], [
+               AS_IF([test "$GCC" = yes], [
+                   AC_MSG_WARN([64bit mode not supported with GCC on $system])
+               ], [
+                   do64bit_ok=yes
+                   CFLAGS="$CFLAGS -q64"
+                   LDFLAGS_ARCH="-q64"
+                   RANLIB="${RANLIB} -X64"
+                   AR="${AR} -X64"
+                   SHLIB_LD_FLAGS="-b64"
+               ])
+           ])
+
+           AS_IF([test "`uname -m`" = ia64], [
+               # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
+               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
+               AS_IF([test "$GCC" = yes], [
+                   CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               ], [
+                   CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
+               ])
+               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
+           ], [
+               AS_IF([test "$GCC" = yes], [
+                   SHLIB_LD='${CC} -shared -Wl,-bexpall'
+               ], [
+                   SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry"
+                   LDFLAGS="$LDFLAGS -brtl"
+               ])
+               SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}"
+               CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ])
+           ;;
+       BeOS*)
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD='${CC} -nostart'
+           SHLIB_SUFFIX=".so"
+
+           #-----------------------------------------------------------
+           # Check for inet_ntoa in -lbind, for BeOS (which also needs
+           # -lsocket, even if the network functions are in -lnet which
+           # is always linked to, for compatibility.
+           #-----------------------------------------------------------
+           AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"])
+           ;;
+       BSD/OS-4.*)
+           SHLIB_CFLAGS="-export-dynamic -fPIC"
+           SHLIB_LD='${CC} -shared'
+           SHLIB_SUFFIX=".so"
+           LDFLAGS="$LDFLAGS -export-dynamic"
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       CYGWIN_*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD='${CC} -shared'
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$[@].a"
+           SHLIB_SUFFIX=".dll"
+           EXEEXT=".exe"
+           do64bit_ok=yes
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       Haiku*)
+           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_SUFFIX=".so"
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
+           AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
+           ;;
+       HP-UX-*.11.*)
+           # Use updated header definitions where possible
+           AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?])
+           # TEA specific: Needed by Tcl, but not most extensions
+           #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
+           #LIBS="$LIBS -lxnet"               # Use the XOPEN network library
+
+           AS_IF([test "`uname -m`" = ia64], [
+               SHLIB_SUFFIX=".so"
+               # Use newer C++ library for C++ extensions
+               #if test "$GCC" != "yes" ; then
+               #   CPPFLAGS="-AA"
+               #fi
+           ], [
+               SHLIB_SUFFIX=".sl"
+           ])
+           AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
+           AS_IF([test "$tcl_ok" = yes], [
+               LDFLAGS="$LDFLAGS -Wl,-E"
+               CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
+               LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
+               LD_LIBRARY_PATH_VAR="SHLIB_PATH"
+           ])
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_LD='${CC} -shared'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ], [
+               CFLAGS="$CFLAGS -z"
+               # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
+               #CFLAGS="$CFLAGS +DAportable"
+               SHLIB_CFLAGS="+z"
+               SHLIB_LD="ld -b"
+           ])
+
+           # Check to enable 64-bit flags for compiler/linker
+           AS_IF([test "$do64bit" = "yes"], [
+               AS_IF([test "$GCC" = yes], [
+                   case `${CC} -dumpmachine` in
+                       hppa64*)
+                           # 64-bit gcc in use.  Fix flags for GNU ld.
+                           do64bit_ok=yes
+                           SHLIB_LD='${CC} -shared'
+                           AS_IF([test $doRpath = yes], [
+                               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+                           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+                           ;;
+                       *)
+                           AC_MSG_WARN([64bit mode not supported with GCC on $system])
+                           ;;
+                   esac
+               ], [
+                   do64bit_ok=yes
+                   CFLAGS="$CFLAGS +DD64"
+                   LDFLAGS_ARCH="+DD64"
+               ])
+           ]) ;;
+       IRIX-6.*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD="ld -n32 -shared -rdata_shared"
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
+           AS_IF([test "$GCC" = yes], [
+               CFLAGS="$CFLAGS -mabi=n32"
+               LDFLAGS="$LDFLAGS -mabi=n32"
+           ], [
+               case $system in
+                   IRIX-6.3)
+                       # Use to build 6.2 compatible binaries on 6.3.
+                       CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
+                       ;;
+                   *)
+                       CFLAGS="$CFLAGS -n32"
+                       ;;
+               esac
+               LDFLAGS="$LDFLAGS -n32"
+           ])
+           ;;
+       IRIX64-6.*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD="ld -n32 -shared -rdata_shared"
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
+
+           # Check to enable 64-bit flags for compiler/linker
+
+           AS_IF([test "$do64bit" = yes], [
+               AS_IF([test "$GCC" = yes], [
+                   AC_MSG_WARN([64bit mode not supported by gcc])
+               ], [
+                   do64bit_ok=yes
+                   SHLIB_LD="ld -64 -shared -rdata_shared"
+                   CFLAGS="$CFLAGS -64"
+                   LDFLAGS_ARCH="-64"
+               ])
+           ])
+           ;;
+       Linux*|GNU*|NetBSD-Debian)
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_SUFFIX=".so"
+
+           # TEA specific:
+           CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
+
+           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
+           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"])
+           AS_IF([test $do64bit = yes], [
+               AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [
+                   hold_cflags=$CFLAGS
+                   CFLAGS="$CFLAGS -m64"
+                   AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no)
+                   CFLAGS=$hold_cflags])
+               AS_IF([test $tcl_cv_cc_m64 = yes], [
+                   CFLAGS="$CFLAGS -m64"
+                   do64bit_ok=yes
+               ])
+          ])
+
+           # The combo of gcc + glibc has a bug related to inlining of
+           # functions like strtod(). The -fno-builtin flag should address
+           # this problem but it does not work. The -fno-inline flag is kind
+           # of overkill but it works. Disable inlining only when one of the
+           # files in compat/*.c is being linked in.
+
+           AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"])
+           ;;
+       Lynx*)
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_SUFFIX=".so"
+           CFLAGS_OPTIMIZE=-02
+           SHLIB_LD='${CC} -shared'
+           LD_FLAGS="-Wl,--export-dynamic"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           ;;
+       OpenBSD-*)
+           arch=`arch -s`
+           case "$arch" in
+           alpha|sparc64)
+               SHLIB_CFLAGS="-fPIC"
+               ;;
+           *)
+               SHLIB_CFLAGS="-fpic"
+               ;;
+           esac
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
+           LDFLAGS="-Wl,-export-dynamic"
+           CFLAGS_OPTIMIZE="-O2"
+           AS_IF([test "${TCL_THREADS}" = "1"], [
+               # On OpenBSD:   Compile with -pthread
+               #               Don't link with -lpthread
+               LIBS=`echo $LIBS | sed s/-lpthread//`
+               CFLAGS="$CFLAGS -pthread"
+           ])
+           # OpenBSD doesn't do version numbers with dots.
+           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
+           TCL_LIB_VERSIONS_OK=nodots
+           ;;
+       NetBSD-*)
+           # NetBSD has ELF and can use 'cc -shared' to build shared libs
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           LDFLAGS="$LDFLAGS -export-dynamic"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           AS_IF([test "${TCL_THREADS}" = "1"], [
+               # The -pthread needs to go in the CFLAGS, not LIBS
+               LIBS=`echo $LIBS | sed s/-pthread//`
+               CFLAGS="$CFLAGS -pthread"
+               LDFLAGS="$LDFLAGS -pthread"
+           ])
+           ;;
+       FreeBSD-*)
+           # This configuration from FreeBSD Ports.
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD="${CC} -shared"
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$[@]"
+           SHLIB_SUFFIX=".so"
+           LDFLAGS=""
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           AS_IF([test "${TCL_THREADS}" = "1"], [
+               # The -pthread needs to go in the LDFLAGS, not LIBS
+               LIBS=`echo $LIBS | sed s/-pthread//`
+               CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+               LDFLAGS="$LDFLAGS $PTHREAD_LIBS"])
+           case $system in
+           FreeBSD-3.*)
+               # Version numbers are dot-stripped by system policy.
+               TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .`
+               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
+               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1'
+               TCL_LIB_VERSIONS_OK=nodots
+               ;;
+           esac
+           ;;
+       Darwin-*)
+           CFLAGS_OPTIMIZE="-Os"
+           SHLIB_CFLAGS="-fno-common"
+           # To avoid discrepancies between what headers configure sees during
+           # preprocessing tests and compiling tests, move any -isysroot and
+           # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
+           CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
+               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
+               if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`"
+           CFLAGS="`echo " ${CFLAGS}" | \
+               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
+               if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`"
+           AS_IF([test $do64bit = yes], [
+               case `arch` in
+                   ppc)
+                       AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag],
+                               tcl_cv_cc_arch_ppc64, [
+                           hold_cflags=$CFLAGS
+                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
+                           AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes,
+                                   tcl_cv_cc_arch_ppc64=no)
+                           CFLAGS=$hold_cflags])
+                       AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [
+                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
+                           do64bit_ok=yes
+                       ]);;
+                   i386)
+                       AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag],
+                               tcl_cv_cc_arch_x86_64, [
+                           hold_cflags=$CFLAGS
+                           CFLAGS="$CFLAGS -arch x86_64"
+                           AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes,
+                                   tcl_cv_cc_arch_x86_64=no)
+                           CFLAGS=$hold_cflags])
+                       AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [
+                           CFLAGS="$CFLAGS -arch x86_64"
+                           do64bit_ok=yes
+                       ]);;
+                   *)
+                       AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);;
+               esac
+           ], [
+               # Check for combined 32-bit and 64-bit fat build
+               AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \
+                   && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [
+                   fat_32_64=yes])
+           ])
+           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
+           SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [
+               hold_ldflags=$LDFLAGS
+               LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
+               AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no)
+               LDFLAGS=$hold_ldflags])
+           AS_IF([test $tcl_cv_ld_single_module = yes], [
+               SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
+           ])
+           # TEA specific: link shlib with current and compatibility version flags
+           vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d`
+           SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}"
+           SHLIB_SUFFIX=".dylib"
+           # Don't use -prebind when building for Mac OS X 10.4 or later only:
+           AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \
+               "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [
+               LDFLAGS="$LDFLAGS -prebind"])
+           LDFLAGS="$LDFLAGS -headerpad_max_install_names"
+           AC_CACHE_CHECK([if ld accepts -search_paths_first flag],
+                   tcl_cv_ld_search_paths_first, [
+               hold_ldflags=$LDFLAGS
+               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
+               AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes,
+                       tcl_cv_ld_search_paths_first=no)
+               LDFLAGS=$hold_ldflags])
+           AS_IF([test $tcl_cv_ld_search_paths_first = yes], [
+               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
+           ])
+           AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
+               AC_DEFINE(MODULE_SCOPE, [__private_extern__],
+                   [Compiler support for module scope symbols])
+               tcl_cv_cc_visibility_hidden=yes
+           ])
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
+           # TEA specific: for combined 32 & 64 bit fat builds of Tk
+           # extensions, verify that 64-bit build is possible.
+           AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [
+               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [
+                   AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
+                       done
+                       CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
+                       LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
+                       AC_TRY_LINK([#include <X11/Xlib.h>], [XrmInitialize();],
+                           tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no)
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval $v'="$hold_'$v'"'
+                       done])
+               ])
+               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [
+                   AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
+                       done
+                       CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}"
+                       LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}"
+                       AC_TRY_LINK([#include <tk.h>], [Tk_InitStubs(NULL, "", 0);],
+                           tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no)
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval $v'="$hold_'$v'"'
+                       done])
+               ])
+               # remove 64-bit arch flags from CFLAGS et al. if configuration
+               # does not support 64-bit.
+               AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [
+                   AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags])
+                   for v in CFLAGS CPPFLAGS LDFLAGS; do
+                       eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"'
+                   done])
+           ])
+           ;;
+       OS/390-*)
+           CFLAGS_OPTIMIZE=""          # Optimizer is buggy
+           AC_DEFINE(_OE_SOCKETS, 1,   # needed in sys/socket.h
+               [Should OS/390 do the right thing with sockets?])
+           ;;
+       OSF1-V*)
+           # Digital OSF/1
+           SHLIB_CFLAGS=""
+           AS_IF([test "$SHARED_BUILD" = 1], [
+               SHLIB_LD='ld -shared -expect_unresolved "*"'
+           ], [
+               SHLIB_LD='ld -non_shared -expect_unresolved "*"'
+           ])
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
+           AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [
+               CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"])
+           # see pthread_intro(3) for pthread support on osf1, k.furukawa
+           AS_IF([test "${TCL_THREADS}" = 1], [
+               CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
+               CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
+               LIBS=`echo $LIBS | sed s/-lpthreads//`
+               AS_IF([test "$GCC" = yes], [
+                   LIBS="$LIBS -lpthread -lmach -lexc"
+               ], [
+                   CFLAGS="$CFLAGS -pthread"
+                   LDFLAGS="$LDFLAGS -pthread"
+               ])
+           ])
+           ;;
+       QNX-6*)
+           # QNX RTP
+           # This may work for all QNX, but it was only reported for v6.
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD="ld -Bshareable -x"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       SCO_SV-3.2*)
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_CFLAGS="-fPIC -melf"
+               LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
+           ], [
+               SHLIB_CFLAGS="-Kpic -belf"
+               LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
+           ])
+           SHLIB_LD="ld -G"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       SunOS-5.[[0-6]])
+           # Careful to not let 5.10+ fall into this case
+
+           # Note: If _REENTRANT isn't defined, then Solaris
+           # won't define thread-safe library routines.
+
+           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
+           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
+               [Do we really want to follow the standard? Yes we do!])
+
+           SHLIB_CFLAGS="-KPIC"
+           SHLIB_SUFFIX=".so"
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_LD='${CC} -shared'
+               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ], [
+               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
+               CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ])
+           ;;
+       SunOS-5*)
+           # Note: If _REENTRANT isn't defined, then Solaris
+           # won't define thread-safe library routines.
+
+           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
+           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
+               [Do we really want to follow the standard? Yes we do!])
+
+           SHLIB_CFLAGS="-KPIC"
+
+           # Check to enable 64-bit flags for compiler/linker
+           AS_IF([test "$do64bit" = yes], [
+               arch=`isainfo`
+               AS_IF([test "$arch" = "sparcv9 sparc"], [
+                   AS_IF([test "$GCC" = yes], [
+                       AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [
+                           AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system])
+                       ], [
+                           do64bit_ok=yes
+                           CFLAGS="$CFLAGS -m64 -mcpu=v9"
+                           LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
+                           SHLIB_CFLAGS="-fPIC"
+                       ])
+                   ], [
+                       do64bit_ok=yes
+                       AS_IF([test "$do64bitVIS" = yes], [
+                           CFLAGS="$CFLAGS -xarch=v9a"
+                           LDFLAGS_ARCH="-xarch=v9a"
+                       ], [
+                           CFLAGS="$CFLAGS -xarch=v9"
+                           LDFLAGS_ARCH="-xarch=v9"
+                       ])
+                       # Solaris 64 uses this as well
+                       #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
+                   ])
+               ], [AS_IF([test "$arch" = "amd64 i386"], [
+                   AS_IF([test "$GCC" = yes], [
+                       case $system in
+                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
+                               do64bit_ok=yes
+                               CFLAGS="$CFLAGS -m64"
+                               LDFLAGS="$LDFLAGS -m64";;
+                           *)
+                               AC_MSG_WARN([64bit mode not supported with GCC on $system]);;
+                       esac
+                   ], [
+                       do64bit_ok=yes
+                       case $system in
+                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
+                               CFLAGS="$CFLAGS -m64"
+                               LDFLAGS="$LDFLAGS -m64";;
+                           *)
+                               CFLAGS="$CFLAGS -xarch=amd64"
+                               LDFLAGS="$LDFLAGS -xarch=amd64";;
+                       esac
+                   ])
+               ], [AC_MSG_WARN([64bit mode not supported for $arch])])])
+           ])
+
+           SHLIB_SUFFIX=".so"
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_LD='${CC} -shared'
+               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+               AS_IF([test "$do64bit_ok" = yes], [
+                   AS_IF([test "$arch" = "sparcv9 sparc"], [
+                       # We need to specify -static-libgcc or we need to
+                       # add the path to the sparv9 libgcc.
+                       # JH: static-libgcc is necessary for core Tcl, but may
+                       # not be necessary for extensions.
+                       SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
+                       # for finding sparcv9 libgcc, get the regular libgcc
+                       # path, remove so name and append 'sparcv9'
+                       #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
+                       #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
+                   ], [AS_IF([test "$arch" = "amd64 i386"], [
+                       # JH: static-libgcc is necessary for core Tcl, but may
+                       # not be necessary for extensions.
+                       SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
+                   ])])
+               ])
+           ], [
+               case $system in
+                   SunOS-5.[[1-9]][[0-9]]*)
+                       # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
+                       SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';;
+                   *)
+                       SHLIB_LD='/usr/ccs/bin/ld -G -z text';;
+               esac
+               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
+           ])
+           ;;
+       UNIX_SV* | UnixWare-5*)
+           SHLIB_CFLAGS="-KPIC"
+           SHLIB_LD='${CC} -G'
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
+           # that don't grok the -Bexport option.  Test that it does.
+           AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [
+               hold_ldflags=$LDFLAGS
+               LDFLAGS="$LDFLAGS -Wl,-Bexport"
+               AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no)
+               LDFLAGS=$hold_ldflags])
+           AS_IF([test $tcl_cv_ld_Bexport = yes], [
+               LDFLAGS="$LDFLAGS -Wl,-Bexport"
+           ])
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+    esac
+
+    AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [
+       AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform])
+    ])
+
+dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so
+dnl # until the end of configure, as configure's compile and link tests use
+dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's
+dnl # preprocessing tests use only CPPFLAGS.
+    AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""])
+
+    # Add in the arch flags late to ensure it wasn't removed.
+    # Not necessary in TEA, but this is aligned with core
+    LDFLAGS="$LDFLAGS $LDFLAGS_ARCH"
+
+    # If we're running gcc, then change the C flags for compiling shared
+    # libraries to the right flags for gcc, instead of those for the
+    # standard manufacturer compiler.
+
+    AS_IF([test "$GCC" = yes], [
+       case $system in
+           AIX-*) ;;
+           BSD/OS*) ;;
+           CYGWIN_*|MINGW32_*) ;;
+           IRIX*) ;;
+           NetBSD-*|FreeBSD-*|OpenBSD-*) ;;
+           Darwin-*) ;;
+           SCO_SV-3.2*) ;;
+           windows) ;;
+           *) SHLIB_CFLAGS="-fPIC" ;;
+       esac])
+
+    AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
+       AC_DEFINE(MODULE_SCOPE, [extern],
+           [No Compiler support for module scope symbols])
+    ])
+
+    AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [
+    # TEA specific: use PACKAGE_VERSION instead of VERSION
+    SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}'])
+    AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [
+    # TEA specific: use PACKAGE_VERSION instead of VERSION
+    UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'])
+
+    if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then
+       AC_CACHE_CHECK(for SEH support in compiler,
+           tcl_cv_seh,
+       AC_TRY_RUN([
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#undef WIN32_LEAN_AND_MEAN
+
+           int main(int argc, char** argv) {
+               int a, b = 0;
+               __try {
+                   a = 666 / b;
+               }
+               __except (EXCEPTION_EXECUTE_HANDLER) {
+                   return 0;
+               }
+               return 1;
+           }
+       ],
+           tcl_cv_seh=yes,
+           tcl_cv_seh=no,
+           tcl_cv_seh=no)
+       )
+       if test "$tcl_cv_seh" = "no" ; then
+           AC_DEFINE(HAVE_NO_SEH, 1,
+                   [Defined when mingw does not support SEH])
+       fi
+
+       #
+       # Check to see if the excpt.h include file provided contains the
+       # definition for EXCEPTION_DISPOSITION; if not, which is the case
+       # with Cygwin's version as of 2002-04-10, define it to be int,
+       # sufficient for getting the current code to work.
+       #
+       AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files,
+           tcl_cv_eh_disposition,
+           AC_TRY_COMPILE([
+#          define WIN32_LEAN_AND_MEAN
+#          include <windows.h>
+#          undef WIN32_LEAN_AND_MEAN
+           ],[
+               EXCEPTION_DISPOSITION x;
+           ],
+               tcl_cv_eh_disposition=yes,
+               tcl_cv_eh_disposition=no)
+       )
+       if test "$tcl_cv_eh_disposition" = "no" ; then
+       AC_DEFINE(EXCEPTION_DISPOSITION, int,
+               [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION])
+       fi
+
+       # Check to see if winnt.h defines CHAR, SHORT, and LONG
+       # even if VOID has already been #defined. The win32api
+       # used by mingw and cygwin is known to do this.
+
+       AC_CACHE_CHECK(for winnt.h that ignores VOID define,
+           tcl_cv_winnt_ignore_void,
+           AC_TRY_COMPILE([
+#define VOID void
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#undef WIN32_LEAN_AND_MEAN
+           ], [
+               CHAR c;
+               SHORT s;
+               LONG l;
+           ],
+        tcl_cv_winnt_ignore_void=yes,
+        tcl_cv_winnt_ignore_void=no)
+       )
+       if test "$tcl_cv_winnt_ignore_void" = "yes" ; then
+           AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1,
+                   [Defined when cygwin/mingw ignores VOID define in winnt.h])
+       fi
+    fi
+
+       # See if the compiler supports casting to a union type.
+       # This is used to stop gcc from printing a compiler
+       # warning when initializing a union member.
+
+       AC_CACHE_CHECK(for cast to union support,
+           tcl_cv_cast_to_union,
+           AC_TRY_COMPILE([],
+           [
+                 union foo { int i; double d; };
+                 union foo f = (union foo) (int) 0;
+           ],
+           tcl_cv_cast_to_union=yes,
+           tcl_cv_cast_to_union=no)
+       )
+       if test "$tcl_cv_cast_to_union" = "yes"; then
+           AC_DEFINE(HAVE_CAST_TO_UNION, 1,
+                   [Defined when compiler supports casting to union type.])
+       fi
+
+    AC_SUBST(CFLAGS_DEBUG)
+    AC_SUBST(CFLAGS_OPTIMIZE)
+    AC_SUBST(CFLAGS_WARNING)
+
+    AC_SUBST(STLIB_LD)
+    AC_SUBST(SHLIB_LD)
+
+    AC_SUBST(SHLIB_LD_LIBS)
+    AC_SUBST(SHLIB_CFLAGS)
+
+    AC_SUBST(LD_LIBRARY_PATH_VAR)
+
+    # These must be called after we do the basic CFLAGS checks and
+    # verify any possible 64-bit or similar switches are necessary
+    TEA_TCL_EARLY_FLAGS
+    TEA_TCL_64BIT_FLAGS
+])
+
+#--------------------------------------------------------------------
+# TEA_SERIAL_PORT
+#
+#      Determine which interface to use to talk to the serial port.
+#      Note that #include lines must begin in leftmost column for
+#      some compilers to recognize them as preprocessor directives,
+#      and some build environments have stdin not pointing at a
+#      pseudo-terminal (usually /dev/null instead.)
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines only one of the following vars:
+#              HAVE_SYS_MODEM_H
+#              USE_TERMIOS
+#              USE_TERMIO
+#              USE_SGTTY
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_SERIAL_PORT], [
+    AC_CHECK_HEADERS(sys/modem.h)
+    AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [
+    AC_TRY_RUN([
+#include <termios.h>
+
+int main() {
+    struct termios t;
+    if (tcgetattr(0, &t) == 0) {
+       cfsetospeed(&t, 0);
+       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    if test $tcl_cv_api_serial = no ; then
+       AC_TRY_RUN([
+#include <termio.h>
+
+int main() {
+    struct termio t;
+    if (ioctl(0, TCGETA, &t) == 0) {
+       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no ; then
+       AC_TRY_RUN([
+#include <sgtty.h>
+
+int main() {
+    struct sgttyb t;
+    if (ioctl(0, TIOCGETP, &t) == 0) {
+       t.sg_ospeed = 0;
+       t.sg_flags |= ODDP | EVENP | RAW;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no ; then
+       AC_TRY_RUN([
+#include <termios.h>
+#include <errno.h>
+
+int main() {
+    struct termios t;
+    if (tcgetattr(0, &t) == 0
+       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+       cfsetospeed(&t, 0);
+       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no; then
+       AC_TRY_RUN([
+#include <termio.h>
+#include <errno.h>
+
+int main() {
+    struct termio t;
+    if (ioctl(0, TCGETA, &t) == 0
+       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+    }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no; then
+       AC_TRY_RUN([
+#include <sgtty.h>
+#include <errno.h>
+
+int main() {
+    struct sgttyb t;
+    if (ioctl(0, TIOCGETP, &t) == 0
+       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+       t.sg_ospeed = 0;
+       t.sg_flags |= ODDP | EVENP | RAW;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none)
+    fi])
+    case $tcl_cv_api_serial in
+       termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);;
+       termio)  AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);;
+       sgtty)   AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);;
+    esac
+])
+
+#--------------------------------------------------------------------
+# TEA_MISSING_POSIX_HEADERS
+#
+#      Supply substitutes for missing POSIX header files.  Special
+#      notes:
+#          - stdlib.h doesn't define strtol, strtoul, or
+#            strtod in some versions of SunOS
+#          - some versions of string.h don't declare procedures such
+#            as strstr
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines some of the following vars:
+#              NO_DIRENT_H
+#              NO_ERRNO_H
+#              NO_VALUES_H
+#              HAVE_LIMITS_H or NO_LIMITS_H
+#              NO_STDLIB_H
+#              NO_STRING_H
+#              NO_SYS_WAIT_H
+#              NO_DLFCN_H
+#              HAVE_SYS_PARAM_H
+#
+#              HAVE_STRING_H ?
+#
+# tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and
+# CHECK on limits.h
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [
+    AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [
+    AC_TRY_LINK([#include <sys/types.h>
+#include <dirent.h>], [
+#ifndef _POSIX_SOURCE
+#   ifdef __Lynx__
+       /*
+        * Generate compilation error to make the test fail:  Lynx headers
+        * are only valid if really in the POSIX environment.
+        */
+
+       missing_procedure();
+#   endif
+#endif
+DIR *d;
+struct dirent *entryPtr;
+char *p;
+d = opendir("foobar");
+entryPtr = readdir(d);
+p = entryPtr->d_name;
+closedir(d);
+], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)])
+
+    if test $tcl_cv_dirent_h = no; then
+       AC_DEFINE(NO_DIRENT_H, 1, [Do we have <dirent.h>?])
+    fi
+
+    # TEA specific:
+    AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have <errno.h>?])])
+    AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have <values.h>?])])
+    AC_CHECK_HEADER(limits.h,
+       [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have <limits.h>?])],
+       [AC_DEFINE(NO_LIMITS_H, 1, [Do we have <limits.h>?])])
+    AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
+    AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
+    if test $tcl_ok = 0; then
+       AC_DEFINE(NO_STDLIB_H, 1, [Do we have <stdlib.h>?])
+    fi
+    AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
+    AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
+
+    # See also memmove check below for a place where NO_STRING_H can be
+    # set and why.
+
+    if test $tcl_ok = 0; then
+       AC_DEFINE(NO_STRING_H, 1, [Do we have <string.h>?])
+    fi
+
+    AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have <sys/wait.h>?])])
+    AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have <dlfcn.h>?])])
+
+    # OS/390 lacks sys/param.h (and doesn't need it, by chance).
+    AC_HAVE_HEADERS(sys/param.h)
+])
+
+#--------------------------------------------------------------------
+# TEA_PATH_X
+#
+#      Locate the X11 header files and the X11 library archive.  Try
+#      the ac_path_x macro first, but if it doesn't find the X stuff
+#      (e.g. because there's no xmkmf program) then check through
+#      a list of possible directories.  Under some conditions the
+#      autoconf macro will return an include directory that contains
+#      no include files, so double-check its result just to be safe.
+#
+#      This should be called after TEA_CONFIG_CFLAGS as setting the
+#      LIBS line can confuse some configure macro magic.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Sets the following vars:
+#              XINCLUDES
+#              XLIBSW
+#              PKG_LIBS (appends to)
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_X], [
+    if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then
+       TEA_PATH_UNIX_X
+    fi
+])
+
+AC_DEFUN([TEA_PATH_UNIX_X], [
+    AC_PATH_X
+    not_really_there=""
+    if test "$no_x" = ""; then
+       if test "$x_includes" = ""; then
+           AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes")
+       else
+           if test ! -r $x_includes/X11/Xlib.h; then
+               not_really_there="yes"
+           fi
+       fi
+    fi
+    if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
+       AC_MSG_CHECKING([for X11 header files])
+       found_xincludes="no"
+       AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no")
+       if test "$found_xincludes" = "no"; then
+           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"
+           for i in $dirs ; do
+               if test -r $i/X11/Xlib.h; then
+                   AC_MSG_RESULT([$i])
+                   XINCLUDES=" -I$i"
+                   found_xincludes="yes"
+                   break
+               fi
+           done
+       fi
+    else
+       if test "$x_includes" != ""; then
+           XINCLUDES="-I$x_includes"
+           found_xincludes="yes"
+       fi
+    fi
+    if test "$found_xincludes" = "no"; then
+       AC_MSG_RESULT([couldn't find any!])
+    fi
+
+    if test "$no_x" = yes; then
+       AC_MSG_CHECKING([for X11 libraries])
+       XLIBSW=nope
+       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"
+       for i in $dirs ; do
+           if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then
+               AC_MSG_RESULT([$i])
+               XLIBSW="-L$i -lX11"
+               x_libraries="$i"
+               break
+           fi
+       done
+    else
+       if test "$x_libraries" = ""; then
+           XLIBSW=-lX11
+       else
+           XLIBSW="-L$x_libraries -lX11"
+       fi
+    fi
+    if test "$XLIBSW" = nope ; then
+       AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
+    fi
+    if test "$XLIBSW" = nope ; then
+       AC_MSG_RESULT([could not find any!  Using -lX11.])
+       XLIBSW=-lX11
+    fi
+    # TEA specific:
+    if test x"${XLIBSW}" != x ; then
+       PKG_LIBS="${PKG_LIBS} ${XLIBSW}"
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_BLOCKING_STYLE
+#
+#      The statements below check for systems where POSIX-style
+#      non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
+#      On these systems (mostly older ones), use the old BSD-style
+#      FIONBIO approach instead.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines some of the following vars:
+#              HAVE_SYS_IOCTL_H
+#              HAVE_SYS_FILIO_H
+#              USE_FIONBIO
+#              O_NONBLOCK
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_BLOCKING_STYLE], [
+    AC_CHECK_HEADERS(sys/ioctl.h)
+    AC_CHECK_HEADERS(sys/filio.h)
+    TEA_CONFIG_SYSTEM
+    AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
+    case $system in
+       OSF*)
+           AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?])
+           AC_MSG_RESULT([FIONBIO])
+           ;;
+       *)
+           AC_MSG_RESULT([O_NONBLOCK])
+           ;;
+    esac
+])
+
+#--------------------------------------------------------------------
+# TEA_TIME_HANDLER
+#
+#      Checks how the system deals with time.h, what time structures
+#      are used on the system, and what fields the structures have.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines some of the following vars:
+#              USE_DELTA_FOR_TZ
+#              HAVE_TM_GMTOFF
+#              HAVE_TM_TZADJ
+#              HAVE_TIMEZONE_VAR
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TIME_HANDLER], [
+    AC_CHECK_HEADERS(sys/time.h)
+    AC_HEADER_TIME
+    AC_STRUCT_TIMEZONE
+
+    AC_CHECK_FUNCS(gmtime_r localtime_r)
+
+    AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [
+       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
+           tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)])
+    if test $tcl_cv_member_tm_tzadj = yes ; then
+       AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?])
+    fi
+
+    AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [
+       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
+           tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)])
+    if test $tcl_cv_member_tm_gmtoff = yes ; then
+       AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?])
+    fi
+
+    #
+    # Its important to include time.h in this check, as some systems
+    # (like convex) have timezone functions, etc.
+    #
+    AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [
+       AC_TRY_COMPILE([#include <time.h>],
+           [extern long timezone;
+           timezone += 1;
+           exit (0);],
+           tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)])
+    if test $tcl_cv_timezone_long = yes ; then
+       AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
+    else
+       #
+       # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
+       #
+       AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [
+           AC_TRY_COMPILE([#include <time.h>],
+               [extern time_t timezone;
+               timezone += 1;
+               exit (0);],
+               tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)])
+       if test $tcl_cv_timezone_time = yes ; then
+           AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
+       fi
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_BUGGY_STRTOD
+#
+#      Under Solaris 2.4, strtod returns the wrong value for the
+#      terminating character under some conditions.  Check for this
+#      and if the problem exists use a substitute procedure
+#      "fixstrtod" (provided by Tcl) that corrects the error.
+#      Also, on Compaq's Tru64 Unix 5.0,
+#      strtod(" ") returns 0.0 instead of a failure to convert.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Might defines some of the following vars:
+#              strtod (=fixstrtod)
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_BUGGY_STRTOD], [
+    AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0)
+    if test "$tcl_strtod" = 1; then
+       AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[
+           AC_TRY_RUN([
+               extern double strtod();
+               int main() {
+                   char *infString="Inf", *nanString="NaN", *spaceString=" ";
+                   char *term;
+                   double value;
+                   value = strtod(infString, &term);
+                   if ((term != infString) && (term[-1] == 0)) {
+                       exit(1);
+                   }
+                   value = strtod(nanString, &term);
+                   if ((term != nanString) && (term[-1] == 0)) {
+                       exit(1);
+                   }
+                   value = strtod(spaceString, &term);
+                   if (term == (spaceString+1)) {
+                       exit(1);
+                   }
+                   exit(0);
+               }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy,
+                   tcl_cv_strtod_buggy=buggy)])
+       if test "$tcl_cv_strtod_buggy" = buggy; then
+           AC_LIBOBJ([fixstrtod])
+           USE_COMPAT=1
+           AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?])
+       fi
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_TCL_LINK_LIBS
+#
+#      Search for the libraries needed to link the Tcl shell.
+#      Things like the math library (-lm) and socket stuff (-lsocket vs.
+#      -lnsl) are dealt with here.
+#
+# Arguments:
+#      Requires the following vars to be set in the Makefile:
+#              DL_LIBS (not in TEA, only needed in core)
+#              LIBS
+#              MATH_LIBS
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TCL_LIBS
+#              MATH_LIBS
+#
+#      Might append to the following vars:
+#              LIBS
+#
+#      Might define the following vars:
+#              HAVE_NET_ERRNO_H
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TCL_LINK_LIBS], [
+    #--------------------------------------------------------------------
+    # On a few very rare systems, all of the libm.a stuff is
+    # already in libc.a.  Set compiler flags accordingly.
+    # Also, Linux requires the "ieee" library for math to work
+    # right (and it must appear before "-lm").
+    #--------------------------------------------------------------------
+
+    AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
+    AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
+
+    #--------------------------------------------------------------------
+    # Interactive UNIX requires -linet instead of -lsocket, plus it
+    # needs net/errno.h to define the socket-related error codes.
+    #--------------------------------------------------------------------
+
+    AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
+    AC_CHECK_HEADER(net/errno.h, [
+       AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have <net/errno.h>?])])
+
+    #--------------------------------------------------------------------
+    #  Check for the existence of the -lsocket and -lnsl libraries.
+    #  The order here is important, so that they end up in the right
+    #  order in the command line generated by make.  Here are some
+    #  special considerations:
+    #  1. Use "connect" and "accept" to check for -lsocket, and
+    #     "gethostbyname" to check for -lnsl.
+    #  2. Use each function name only once:  can't redo a check because
+    #     autoconf caches the results of the last check and won't redo it.
+    #  3. Use -lnsl and -lsocket only if they supply procedures that
+    #     aren't already present in the normal libraries.  This is because
+    #     IRIX 5.2 has libraries, but they aren't needed and they're
+    #     bogus:  they goof up name resolution if used.
+    #  4. On some SVR4 systems, can't use -lsocket without -lnsl too.
+    #     To get around this problem, check for both libraries together
+    #     if -lsocket doesn't work by itself.
+    #--------------------------------------------------------------------
+
+    tcl_checkBoth=0
+    AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
+    if test "$tcl_checkSocket" = 1; then
+       AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt,
+           LIBS="$LIBS -lsocket", tcl_checkBoth=1)])
+    fi
+    if test "$tcl_checkBoth" = 1; then
+       tk_oldLibs=$LIBS
+       LIBS="$LIBS -lsocket -lnsl"
+       AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs])
+    fi
+    AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname,
+           [LIBS="$LIBS -lnsl"])])
+
+    # TEA specific: Don't perform the eval of the libraries here because
+    # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS
+
+    TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
+    AC_SUBST(TCL_LIBS)
+    AC_SUBST(MATH_LIBS)
+])
+
+#--------------------------------------------------------------------
+# TEA_TCL_EARLY_FLAGS
+#
+#      Check for what flags are needed to be passed so the correct OS
+#      features are available.
+#
+# Arguments:
+#      None
+#
+# Results:
+#
+#      Might define the following vars:
+#              _ISOC99_SOURCE
+#              _LARGEFILE64_SOURCE
+#              _LARGEFILE_SOURCE64
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TCL_EARLY_FLAG],[
+    AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]),
+       AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no,
+           AC_TRY_COMPILE([[#define ]$1[ 1
+]$2], $3,
+               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes,
+               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no)))
+    if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then
+       AC_DEFINE($1, 1, [Add the ]$1[ flag when building])
+       tcl_flags="$tcl_flags $1"
+    fi
+])
+
+AC_DEFUN([TEA_TCL_EARLY_FLAGS],[
+    AC_MSG_CHECKING([for required early compiler flags])
+    tcl_flags=""
+    TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include <stdlib.h>],
+       [char *p = (char *)strtoll; char *q = (char *)strtoull;])
+    TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include <sys/stat.h>],
+       [struct stat64 buf; int i = stat64("/", &buf);])
+    TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include <sys/stat.h>],
+       [char *p = (char *)open64;])
+    if test "x${tcl_flags}" = "x" ; then
+       AC_MSG_RESULT([none])
+    else
+       AC_MSG_RESULT([${tcl_flags}])
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_TCL_64BIT_FLAGS
+#
+#      Check for what is defined in the way of 64-bit features.
+#
+# Arguments:
+#      None
+#
+# Results:
+#
+#      Might define the following vars:
+#              TCL_WIDE_INT_IS_LONG
+#              TCL_WIDE_INT_TYPE
+#              HAVE_STRUCT_DIRENT64
+#              HAVE_STRUCT_STAT64
+#              HAVE_TYPE_OFF64_T
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TCL_64BIT_FLAGS], [
+    AC_MSG_CHECKING([for 64-bit integer type])
+    AC_CACHE_VAL(tcl_cv_type_64bit,[
+       tcl_cv_type_64bit=none
+       # See if the compiler knows natively about __int64
+       AC_TRY_COMPILE(,[__int64 value = (__int64) 0;],
+           tcl_type_64bit=__int64, tcl_type_64bit="long long")
+       # See if we should use long anyway  Note that we substitute in the
+       # type that is our current guess for a 64-bit type inside this check
+       # program, so it should be modified only carefully...
+        AC_TRY_COMPILE(,[switch (0) {
+            case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ;
+        }],tcl_cv_type_64bit=${tcl_type_64bit})])
+    if test "${tcl_cv_type_64bit}" = none ; then
+       AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?])
+       AC_MSG_RESULT([using long])
+    elif test "${tcl_cv_type_64bit}" = "__int64" \
+               -a "${TEA_PLATFORM}" = "windows" ; then
+       # TEA specific: We actually want to use the default tcl.h checks in
+       # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER*
+       AC_MSG_RESULT([using Tcl header defaults])
+    else
+       AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit},
+           [What type should be used to define wide integers?])
+       AC_MSG_RESULT([${tcl_cv_type_64bit}])
+
+       # Now check for auxiliary declarations
+       AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[
+           AC_TRY_COMPILE([#include <sys/types.h>
+#include <dirent.h>],[struct dirent64 p;],
+               tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)])
+       if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
+           AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?])
+       fi
+
+       AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[
+           AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p;
+],
+               tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)])
+       if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
+           AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in <sys/stat.h>?])
+       fi
+
+       AC_CHECK_FUNCS(open64 lseek64)
+       AC_MSG_CHECKING([for off64_t])
+       AC_CACHE_VAL(tcl_cv_type_off64_t,[
+           AC_TRY_COMPILE([#include <sys/types.h>],[off64_t offset;
+],
+               tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)])
+       dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the
+       dnl functions lseek64 and open64 are defined.
+       if test "x${tcl_cv_type_off64_t}" = "xyes" && \
+               test "x${ac_cv_func_lseek64}" = "xyes" && \
+               test "x${ac_cv_func_open64}" = "xyes" ; then
+           AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in <sys/types.h>?])
+           AC_MSG_RESULT([yes])
+       else
+           AC_MSG_RESULT([no])
+       fi
+    fi
+])
+
+##
+## Here ends the standard Tcl configuration bits and starts the
+## TEA specific functions
+##
+
+#------------------------------------------------------------------------
+# TEA_INIT --
+#
+#      Init various Tcl Extension Architecture (TEA) variables.
+#      This should be the first called TEA_* macro.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              CYGPATH
+#              EXEEXT
+#      Defines only:
+#              TEA_VERSION
+#              TEA_INITED
+#              TEA_PLATFORM (windows or unix)
+#
+# "cygpath" is used on windows to generate native path names for include
+# files. These variables should only be used with the compiler and linker
+# since they generate native path names.
+#
+# EXEEXT
+#      Select the executable extension based on the host type.  This
+#      is a lightweight replacement for AC_EXEEXT that doesn't require
+#      a compiler.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_INIT], [
+    # TEA extensions pass this us the version of TEA they think they
+    # are compatible with.
+    TEA_VERSION="3.10"
+
+    AC_MSG_CHECKING([for correct TEA configuration])
+    if test x"${PACKAGE_NAME}" = x ; then
+       AC_MSG_ERROR([
+The PACKAGE_NAME variable must be defined by your TEA configure.ac])
+    fi
+    if test x"$1" = x ; then
+       AC_MSG_ERROR([
+TEA version not specified.])
+    elif test "$1" != "${TEA_VERSION}" ; then
+       AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"])
+    else
+       AC_MSG_RESULT([ok (TEA ${TEA_VERSION})])
+    fi
+
+    # If the user did not set CFLAGS, set it now to keep macros
+    # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2".
+    if test "${CFLAGS+set}" != "set" ; then
+       CFLAGS=""
+    fi
+
+    case "`uname -s`" in
+       *win32*|*WIN32*|*MINGW32_*)
+           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)
+           EXEEXT=".exe"
+           TEA_PLATFORM="windows"
+           ;;
+       *CYGWIN_*)
+           EXEEXT=".exe"
+           # CYGPATH and TEA_PLATFORM are determined later in LOAD_TCLCONFIG
+           ;;
+       *)
+           CYGPATH=echo
+           # Maybe we are cross-compiling....
+           case ${host_alias} in
+               *mingw32*)
+               EXEEXT=".exe"
+               TEA_PLATFORM="windows"
+               ;;
+           *)
+               EXEEXT=""
+               TEA_PLATFORM="unix"
+               ;;
+           esac
+           ;;
+    esac
+
+    # Check if exec_prefix is set. If not use fall back to prefix.
+    # Note when adjusted, so that TEA_PREFIX can correct for this.
+    # This is needed for recursive configures, since autoconf propagates
+    # $prefix, but not $exec_prefix (doh!).
+    if test x$exec_prefix = xNONE ; then
+       exec_prefix_default=yes
+       exec_prefix=$prefix
+    fi
+
+    AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}])
+
+    AC_SUBST(EXEEXT)
+    AC_SUBST(CYGPATH)
+
+    # This package name must be replaced statically for AC_SUBST to work
+    AC_SUBST(PKG_LIB_FILE)
+    # Substitute STUB_LIB_FILE in case package creates a stub library too.
+    AC_SUBST(PKG_STUB_LIB_FILE)
+
+    # We AC_SUBST these here to ensure they are subst'ed,
+    # in case the user doesn't call TEA_ADD_...
+    AC_SUBST(PKG_STUB_SOURCES)
+    AC_SUBST(PKG_STUB_OBJECTS)
+    AC_SUBST(PKG_TCL_SOURCES)
+    AC_SUBST(PKG_HEADERS)
+    AC_SUBST(PKG_INCLUDES)
+    AC_SUBST(PKG_LIBS)
+    AC_SUBST(PKG_CFLAGS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_SOURCES --
+#
+#      Specify one or more source files.  Users should check for
+#      the right platform before adding to their list.
+#      It is not important to specify the directory, as long as it is
+#      in the generic, win or unix subdirectory of $(srcdir).
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_SOURCES
+#              PKG_OBJECTS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_SOURCES], [
+    vars="$@"
+    for i in $vars; do
+       case $i in
+           [\$]*)
+               # allow $-var names
+               PKG_SOURCES="$PKG_SOURCES $i"
+               PKG_OBJECTS="$PKG_OBJECTS $i"
+               ;;
+           *)
+               # check for existence - allows for generic/win/unix VPATH
+               # To add more dirs here (like 'src'), you have to update VPATH
+               # in Makefile.in as well
+               if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
+                   -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
+                   -a ! -f "${srcdir}/macosx/$i" \
+                   ; then
+                   AC_MSG_ERROR([could not find source file '$i'])
+               fi
+               PKG_SOURCES="$PKG_SOURCES $i"
+               # this assumes it is in a VPATH dir
+               i=`basename $i`
+               # handle user calling this before or after TEA_SETUP_COMPILER
+               if test x"${OBJEXT}" != x ; then
+                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
+               else
+                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
+               fi
+               PKG_OBJECTS="$PKG_OBJECTS $j"
+               ;;
+       esac
+    done
+    AC_SUBST(PKG_SOURCES)
+    AC_SUBST(PKG_OBJECTS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_STUB_SOURCES --
+#
+#      Specify one or more source files.  Users should check for
+#      the right platform before adding to their list.
+#      It is not important to specify the directory, as long as it is
+#      in the generic, win or unix subdirectory of $(srcdir).
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_STUB_SOURCES
+#              PKG_STUB_OBJECTS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_STUB_SOURCES], [
+    vars="$@"
+    for i in $vars; do
+       # check for existence - allows for generic/win/unix VPATH
+       if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
+           -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
+           -a ! -f "${srcdir}/macosx/$i" \
+           ; then
+           AC_MSG_ERROR([could not find stub source file '$i'])
+       fi
+       PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i"
+       # this assumes it is in a VPATH dir
+       i=`basename $i`
+       # handle user calling this before or after TEA_SETUP_COMPILER
+       if test x"${OBJEXT}" != x ; then
+           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
+       else
+           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
+       fi
+       PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j"
+    done
+    AC_SUBST(PKG_STUB_SOURCES)
+    AC_SUBST(PKG_STUB_OBJECTS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_TCL_SOURCES --
+#
+#      Specify one or more Tcl source files.  These should be platform
+#      independent runtime files.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_TCL_SOURCES
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_TCL_SOURCES], [
+    vars="$@"
+    for i in $vars; do
+       # check for existence, be strict because it is installed
+       if test ! -f "${srcdir}/$i" ; then
+           AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i'])
+       fi
+       PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i"
+    done
+    AC_SUBST(PKG_TCL_SOURCES)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_HEADERS --
+#
+#      Specify one or more source headers.  Users should check for
+#      the right platform before adding to their list.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_HEADERS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_HEADERS], [
+    vars="$@"
+    for i in $vars; do
+       # check for existence, be strict because it is installed
+       if test ! -f "${srcdir}/$i" ; then
+           AC_MSG_ERROR([could not find header file '${srcdir}/$i'])
+       fi
+       PKG_HEADERS="$PKG_HEADERS $i"
+    done
+    AC_SUBST(PKG_HEADERS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_INCLUDES --
+#
+#      Specify one or more include dirs.  Users should check for
+#      the right platform before adding to their list.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_INCLUDES
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_INCLUDES], [
+    vars="$@"
+    for i in $vars; do
+       PKG_INCLUDES="$PKG_INCLUDES $i"
+    done
+    AC_SUBST(PKG_INCLUDES)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_LIBS --
+#
+#      Specify one or more libraries.  Users should check for
+#      the right platform before adding to their list.  For Windows,
+#      libraries provided in "foo.lib" format will be converted to
+#      "-lfoo" when using GCC (mingw).
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_LIBS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_LIBS], [
+    vars="$@"
+    for i in $vars; do
+       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
+           # Convert foo.lib to -lfoo for GCC.  No-op if not *.lib
+           i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'`
+       fi
+       PKG_LIBS="$PKG_LIBS $i"
+    done
+    AC_SUBST(PKG_LIBS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_CFLAGS --
+#
+#      Specify one or more CFLAGS.  Users should check for
+#      the right platform before adding to their list.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_CFLAGS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_CFLAGS], [
+    PKG_CFLAGS="$PKG_CFLAGS $@"
+    AC_SUBST(PKG_CFLAGS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_CLEANFILES --
+#
+#      Specify one or more CLEANFILES.
+#
+# Arguments:
+#      one or more file names to clean target
+#
+# Results:
+#
+#      Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_CLEANFILES], [
+    CLEANFILES="$CLEANFILES $@"
+])
+
+#------------------------------------------------------------------------
+# TEA_PREFIX --
+#
+#      Handle the --prefix=... option by defaulting to what Tcl gave
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      If --prefix or --exec-prefix was not specified, $prefix and
+#      $exec_prefix will be set to the values given to Tcl when it was
+#      configured.
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_PREFIX], [
+    if test "${prefix}" = "NONE"; then
+       prefix_default=yes
+       if test x"${TCL_PREFIX}" != x; then
+           AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}])
+           prefix=${TCL_PREFIX}
+       else
+           AC_MSG_NOTICE([--prefix defaulting to /usr/local])
+           prefix=/usr/local
+       fi
+    fi
+    if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \
+       -o x"${exec_prefix_default}" = x"yes" ; then
+       if test x"${TCL_EXEC_PREFIX}" != x; then
+           AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}])
+           exec_prefix=${TCL_EXEC_PREFIX}
+       else
+           AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}])
+           exec_prefix=$prefix
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_SETUP_COMPILER_CC --
+#
+#      Do compiler checks the way we want.  This is just a replacement
+#      for AC_PROG_CC in TEA configure.ac files to make them cleaner.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Sets up CC var and other standard bits we need to make executables.
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_SETUP_COMPILER_CC], [
+    # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE)
+    # in this macro, they need to go into TEA_SETUP_COMPILER instead.
+
+    AC_PROG_CC
+    AC_PROG_CPP
+
+    INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c'
+    INSTALL_DATA_DIR='${INSTALL} -d -m 755'
+    INSTALL_DATA='${INSTALL} -m 644'
+    INSTALL_PROGRAM='${INSTALL}'
+    INSTALL_SCRIPT='${INSTALL}'
+    INSTALL_LIBRARY='${INSTALL_DATA}'
+
+    AC_SUBST(INSTALL)
+    AC_SUBST(INSTALL_DATA_DIR)
+    AC_SUBST(INSTALL_DATA)
+    AC_SUBST(INSTALL_PROGRAM)
+    AC_SUBST(INSTALL_SCRIPT)
+    AC_SUBST(INSTALL_LIBRARY)
+
+    #--------------------------------------------------------------------
+    # Checks to see if the make program sets the $MAKE variable.
+    #--------------------------------------------------------------------
+
+    AC_PROG_MAKE_SET
+
+    #--------------------------------------------------------------------
+    # Find ranlib
+    #--------------------------------------------------------------------
+
+    AC_CHECK_TOOL(RANLIB, ranlib)
+
+    #--------------------------------------------------------------------
+    # Determines the correct binary file extension (.o, .obj, .exe etc.)
+    #--------------------------------------------------------------------
+
+    AC_OBJEXT
+    AC_EXEEXT
+])
+
+#------------------------------------------------------------------------
+# TEA_SETUP_COMPILER --
+#
+#      Do compiler checks that use the compiler.  This must go after
+#      TEA_SETUP_COMPILER_CC, which does the actual compiler check.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Sets up CC var and other standard bits we need to make executables.
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_SETUP_COMPILER], [
+    # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here.
+    AC_REQUIRE([TEA_SETUP_COMPILER_CC])
+
+    #------------------------------------------------------------------------
+    # If we're using GCC, see if the compiler understands -pipe. If so, use it.
+    # It makes compiling go faster.  (This is only a performance feature.)
+    #------------------------------------------------------------------------
+
+    if test -z "$no_pipe" -a -n "$GCC"; then
+       AC_CACHE_CHECK([if the compiler understands -pipe],
+           tcl_cv_cc_pipe, [
+           hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
+           AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no)
+           CFLAGS=$hold_cflags])
+       if test $tcl_cv_cc_pipe = yes; then
+           CFLAGS="$CFLAGS -pipe"
+       fi
+    fi
+
+    #--------------------------------------------------------------------
+    # Common compiler flag setup
+    #--------------------------------------------------------------------
+
+    AC_C_BIGENDIAN
+    if test "${TEA_PLATFORM}" = "unix" ; then
+       TEA_TCL_LINK_LIBS
+       TEA_MISSING_POSIX_HEADERS
+       # Let the user call this, because if it triggers, they will
+       # need a compat/strtod.c that is correct.  Users can also
+       # use Tcl_GetDouble(FromObj) instead.
+       #TEA_BUGGY_STRTOD
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_MAKE_LIB --
+#
+#      Generate a line that can be used to build a shared/unshared library
+#      in a platform independent manner.
+#
+# Arguments:
+#      none
+#
+#      Requires:
+#
+# Results:
+#
+#      Defines the following vars:
+#      CFLAGS -        Done late here to note disturb other AC macros
+#       MAKE_LIB -      Command to execute to build the Tcl library;
+#                       differs depending on whether or not Tcl is being
+#                       compiled as a shared library.
+#      MAKE_SHARED_LIB Makefile rule for building a shared library
+#      MAKE_STATIC_LIB Makefile rule for building a static library
+#      MAKE_STUB_LIB   Makefile rule for building a stub library
+#      VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL
+#      VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_MAKE_LIB], [
+    if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then
+       MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)"
+       MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)"
+       AC_EGREP_CPP([manifest needed], [
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+print("manifest needed")
+#endif
+       ], [
+       # Could do a CHECK_PROG for mt, but should always be with MSVC8+
+       VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi"
+       VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi"
+       MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}"
+       TEA_ADD_CLEANFILES([*.manifest])
+       ])
+       MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)"
+    else
+       MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)"
+       MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}"
+       MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)"
+    fi
+
+    if test "${SHARED_BUILD}" = "1" ; then
+       MAKE_LIB="${MAKE_SHARED_LIB} "
+    else
+       MAKE_LIB="${MAKE_STATIC_LIB} "
+    fi
+
+    #--------------------------------------------------------------------
+    # Shared libraries and static libraries have different names.
+    # Use the double eval to make sure any variables in the suffix is
+    # substituted. (@@@ Might not be necessary anymore)
+    #--------------------------------------------------------------------
+
+    if test "${TEA_PLATFORM}" = "windows" ; then
+       if test "${SHARED_BUILD}" = "1" ; then
+           # We force the unresolved linking of symbols that are really in
+           # the private libraries of Tcl and Tk.
+           if test x"${TK_BIN_DIR}" != x ; then
+               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\""
+           fi
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\""
+           if test "$GCC" = "yes"; then
+               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc"
+           fi
+           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
+       else
+           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
+           if test "$GCC" = "yes"; then
+               PKG_LIB_FILE=lib${PKG_LIB_FILE}
+           fi
+       fi
+       # Some packages build their own stubs libraries
+       eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
+       if test "$GCC" = "yes"; then
+           PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE}
+       fi
+       # These aren't needed on Windows (either MSVC or gcc)
+       RANLIB=:
+       RANLIB_STUB=:
+    else
+       RANLIB_STUB="${RANLIB}"
+       if test "${SHARED_BUILD}" = "1" ; then
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}"
+           if test x"${TK_BIN_DIR}" != x ; then
+               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}"
+           fi
+           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
+           RANLIB=:
+       else
+           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
+       fi
+       # Some packages build their own stubs libraries
+       eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
+    fi
+
+    # These are escaped so that only CFLAGS is picked up at configure time.
+    # The other values will be substituted at make time.
+    CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}"
+    if test "${SHARED_BUILD}" = "1" ; then
+       CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}"
+    fi
+
+    AC_SUBST(MAKE_LIB)
+    AC_SUBST(MAKE_SHARED_LIB)
+    AC_SUBST(MAKE_STATIC_LIB)
+    AC_SUBST(MAKE_STUB_LIB)
+    AC_SUBST(RANLIB_STUB)
+    AC_SUBST(VC_MANIFEST_EMBED_DLL)
+    AC_SUBST(VC_MANIFEST_EMBED_EXE)
+])
+
+#------------------------------------------------------------------------
+# TEA_LIB_SPEC --
+#
+#      Compute the name of an existing object library located in libdir
+#      from the given base name and produce the appropriate linker flags.
+#
+# Arguments:
+#      basename        The base name of the library without version
+#                      numbers, extensions, or "lib" prefixes.
+#      extra_dir       Extra directory in which to search for the
+#                      library.  This location is used first, then
+#                      $prefix/$exec-prefix, then some defaults.
+#
+# Requires:
+#      TEA_INIT and TEA_PREFIX must be called first.
+#
+# Results:
+#
+#      Defines the following vars:
+#              ${basename}_LIB_NAME    The computed library name.
+#              ${basename}_LIB_SPEC    The computed linker flags.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LIB_SPEC], [
+    AC_MSG_CHECKING([for $1 library])
+
+    # Look in exec-prefix for the library (defined by TEA_PREFIX).
+
+    tea_lib_name_dir="${exec_prefix}/lib"
+
+    # Or in a user-specified location.
+
+    if test x"$2" != x ; then
+       tea_extra_lib_dir=$2
+    else
+       tea_extra_lib_dir=NONE
+    fi
+
+    for i in \
+           `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do
+       if test -f "$i" ; then
+           tea_lib_name_dir=`dirname $i`
+           $1_LIB_NAME=`basename $i`
+           $1_LIB_PATH_NAME=$i
+           break
+       fi
+    done
+
+    if test "${TEA_PLATFORM}" = "windows"; then
+       $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\"
+    else
+       # Strip off the leading "lib" and trailing ".a" or ".so"
+
+       tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'`
+       $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}"
+    fi
+
+    if test "x${$1_LIB_NAME}" = x ; then
+       AC_MSG_ERROR([not found])
+    else
+       AC_MSG_RESULT([${$1_LIB_SPEC}])
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_PRIVATE_TCL_HEADERS --
+#
+#      Locate the private Tcl include files
+#
+# Arguments:
+#
+#      Requires:
+#              TCL_SRC_DIR     Assumes that TEA_LOAD_TCLCONFIG has
+#                              already been called.
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TCL_TOP_DIR_NATIVE
+#              TCL_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [
+    # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh}
+    AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS])
+    AC_MSG_CHECKING([for Tcl private include files])
+
+    TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}`
+    TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\"
+
+    # Check to see if tcl<Plat>Port.h isn't already with the public headers
+    # Don't look for tclInt.h because that resides with tcl.h in the core
+    # sources, but the <plat>Port headers are in a different directory
+    if test "${TEA_PLATFORM}" = "windows" -a \
+       -f "${ac_cv_c_tclh}/tclWinPort.h"; then
+       result="private headers found with public headers"
+    elif test "${TEA_PLATFORM}" = "unix" -a \
+       -f "${ac_cv_c_tclh}/tclUnixPort.h"; then
+       result="private headers found with public headers"
+    else
+       TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\"
+       if test "${TEA_PLATFORM}" = "windows"; then
+           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\"
+       else
+           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\"
+       fi
+       # Overwrite the previous TCL_INCLUDES as this should capture both
+       # public and private headers in the same set.
+       # We want to ensure these are substituted so as not to require
+       # any *_NATIVE vars be defined in the Makefile
+       TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}"
+       if test "`uname -s`" = "Darwin"; then
+            # If Tcl was built as a framework, attempt to use
+            # the framework's Headers and PrivateHeaders directories
+            case ${TCL_DEFS} in
+               *TCL_FRAMEWORK*)
+                   if test -d "${TCL_BIN_DIR}/Headers" -a \
+                           -d "${TCL_BIN_DIR}/PrivateHeaders"; then
+                       TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"
+                   else
+                       TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
+                   fi
+                   ;;
+           esac
+           result="Using ${TCL_INCLUDES}"
+       else
+           if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then
+               AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}])
+           fi
+           result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}"
+       fi
+    fi
+
+    AC_SUBST(TCL_TOP_DIR_NATIVE)
+
+    AC_SUBST(TCL_INCLUDES)
+    AC_MSG_RESULT([${result}])
+])
+
+#------------------------------------------------------------------------
+# TEA_PUBLIC_TCL_HEADERS --
+#
+#      Locate the installed public Tcl header files
+#
+# Arguments:
+#      None.
+#
+# Requires:
+#      CYGPATH must be set
+#
+# Results:
+#
+#      Adds a --with-tclinclude switch to configure.
+#      Result is cached.
+#
+#      Substitutes the following vars:
+#              TCL_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [
+    AC_MSG_CHECKING([for Tcl public headers])
+
+    AC_ARG_WITH(tclinclude, [  --with-tclinclude       directory containing the public Tcl header files], with_tclinclude=${withval})
+
+    AC_CACHE_VAL(ac_cv_c_tclh, [
+       # Use the value from --with-tclinclude, if it was given
+
+       if test x"${with_tclinclude}" != x ; then
+           if test -f "${with_tclinclude}/tcl.h" ; then
+               ac_cv_c_tclh=${with_tclinclude}
+           else
+               AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h])
+           fi
+       else
+           list=""
+           if test "`uname -s`" = "Darwin"; then
+               # If Tcl was built as a framework, attempt to use
+               # the framework's Headers directory
+               case ${TCL_DEFS} in
+                   *TCL_FRAMEWORK*)
+                       list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`"
+                       ;;
+               esac
+           fi
+
+           # Look in the source dir only if Tcl is not installed,
+           # and in that situation, look there before installed locations.
+           if test -f "${TCL_BIN_DIR}/Makefile" ; then
+               list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`"
+           fi
+
+           # Check order: pkg --prefix location, Tcl's --prefix location,
+           # relative to directory of tclConfig.sh.
+
+           eval "temp_includedir=${includedir}"
+           list="$list \
+               `ls -d ${temp_includedir}        2>/dev/null` \
+               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
+               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
+           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
+               list="$list /usr/local/include /usr/include"
+               if test x"${TCL_INCLUDE_SPEC}" != x ; then
+                   d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'`
+                   list="$list `ls -d ${d} 2>/dev/null`"
+               fi
+           fi
+           for i in $list ; do
+               if test -f "$i/tcl.h" ; then
+                   ac_cv_c_tclh=$i
+                   break
+               fi
+           done
+       fi
+    ])
+
+    # Print a message based on how we determined the include path
+
+    if test x"${ac_cv_c_tclh}" = x ; then
+       AC_MSG_ERROR([tcl.h not found.  Please specify its location with --with-tclinclude])
+    else
+       AC_MSG_RESULT([${ac_cv_c_tclh}])
+    fi
+
+    # Convert to a native path and substitute into the output files.
+
+    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
+
+    TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
+
+    AC_SUBST(TCL_INCLUDES)
+])
+
+#------------------------------------------------------------------------
+# TEA_PRIVATE_TK_HEADERS --
+#
+#      Locate the private Tk include files
+#
+# Arguments:
+#
+#      Requires:
+#              TK_SRC_DIR      Assumes that TEA_LOAD_TKCONFIG has
+#                               already been called.
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TK_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [
+    # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh}
+    AC_REQUIRE([TEA_PUBLIC_TK_HEADERS])
+    AC_MSG_CHECKING([for Tk private include files])
+
+    TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}`
+    TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\"
+
+    # Check to see if tk<Plat>Port.h isn't already with the public headers
+    # Don't look for tkInt.h because that resides with tk.h in the core
+    # sources, but the <plat>Port headers are in a different directory
+    if test "${TEA_PLATFORM}" = "windows" -a \
+       -f "${ac_cv_c_tkh}/tkWinPort.h"; then
+       result="private headers found with public headers"
+    elif test "${TEA_PLATFORM}" = "unix" -a \
+       -f "${ac_cv_c_tkh}/tkUnixPort.h"; then
+       result="private headers found with public headers"
+    else
+       TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\"
+       TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\"
+       if test "${TEA_PLATFORM}" = "windows"; then
+           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\"
+       else
+           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\"
+       fi
+       # Overwrite the previous TK_INCLUDES as this should capture both
+       # public and private headers in the same set.
+       # We want to ensure these are substituted so as not to require
+       # any *_NATIVE vars be defined in the Makefile
+       TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}"
+       # Detect and add ttk subdir
+       if test -d "${TK_SRC_DIR}/generic/ttk"; then
+          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\""
+       fi
+       if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
+          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\""
+       fi
+       if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then
+          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\""
+       fi
+       if test "`uname -s`" = "Darwin"; then
+           # If Tk was built as a framework, attempt to use
+           # the framework's Headers and PrivateHeaders directories
+           case ${TK_DEFS} in
+               *TK_FRAMEWORK*)
+                       if test -d "${TK_BIN_DIR}/Headers" -a \
+                               -d "${TK_BIN_DIR}/PrivateHeaders"; then
+                           TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"
+                       else
+                           TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
+                       fi
+                       ;;
+           esac
+           result="Using ${TK_INCLUDES}"
+       else
+           if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then
+              AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}])
+           fi
+           result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}"
+       fi
+    fi
+
+    AC_SUBST(TK_TOP_DIR_NATIVE)
+    AC_SUBST(TK_XLIB_DIR_NATIVE)
+
+    AC_SUBST(TK_INCLUDES)
+    AC_MSG_RESULT([${result}])
+])
+
+#------------------------------------------------------------------------
+# TEA_PUBLIC_TK_HEADERS --
+#
+#      Locate the installed public Tk header files
+#
+# Arguments:
+#      None.
+#
+# Requires:
+#      CYGPATH must be set
+#
+# Results:
+#
+#      Adds a --with-tkinclude switch to configure.
+#      Result is cached.
+#
+#      Substitutes the following vars:
+#              TK_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [
+    AC_MSG_CHECKING([for Tk public headers])
+
+    AC_ARG_WITH(tkinclude, [  --with-tkinclude        directory containing the public Tk header files], with_tkinclude=${withval})
+
+    AC_CACHE_VAL(ac_cv_c_tkh, [
+       # Use the value from --with-tkinclude, if it was given
+
+       if test x"${with_tkinclude}" != x ; then
+           if test -f "${with_tkinclude}/tk.h" ; then
+               ac_cv_c_tkh=${with_tkinclude}
+           else
+               AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h])
+           fi
+       else
+           list=""
+           if test "`uname -s`" = "Darwin"; then
+               # If Tk was built as a framework, attempt to use
+               # the framework's Headers directory.
+               case ${TK_DEFS} in
+                   *TK_FRAMEWORK*)
+                       list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`"
+                       ;;
+               esac
+           fi
+
+           # Look in the source dir only if Tk is not installed,
+           # and in that situation, look there before installed locations.
+           if test -f "${TK_BIN_DIR}/Makefile" ; then
+               list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`"
+           fi
+
+           # Check order: pkg --prefix location, Tk's --prefix location,
+           # relative to directory of tkConfig.sh, Tcl's --prefix location,
+           # relative to directory of tclConfig.sh.
+
+           eval "temp_includedir=${includedir}"
+           list="$list \
+               `ls -d ${temp_includedir}        2>/dev/null` \
+               `ls -d ${TK_PREFIX}/include      2>/dev/null` \
+               `ls -d ${TK_BIN_DIR}/../include  2>/dev/null` \
+               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
+               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
+           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
+               list="$list /usr/local/include /usr/include"
+               if test x"${TK_INCLUDE_SPEC}" != x ; then
+                   d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'`
+                   list="$list `ls -d ${d} 2>/dev/null`"
+               fi
+           fi
+           for i in $list ; do
+               if test -f "$i/tk.h" ; then
+                   ac_cv_c_tkh=$i
+                   break
+               fi
+           done
+       fi
+    ])
+
+    # Print a message based on how we determined the include path
+
+    if test x"${ac_cv_c_tkh}" = x ; then
+       AC_MSG_ERROR([tk.h not found.  Please specify its location with --with-tkinclude])
+    else
+       AC_MSG_RESULT([${ac_cv_c_tkh}])
+    fi
+
+    # Convert to a native path and substitute into the output files.
+
+    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}`
+
+    TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
+
+    AC_SUBST(TK_INCLUDES)
+
+    if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
+       # On Windows and Aqua, we need the X compat headers
+       AC_MSG_CHECKING([for X11 header files])
+       if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then
+           INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`"
+           TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
+           AC_SUBST(TK_XINCLUDES)
+       fi
+       AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}])
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_PATH_CONFIG --
+#
+#      Locate the ${1}Config.sh file and perform a sanity check on
+#      the ${1} compile flags.  These are used by packages like
+#      [incr Tk] that load *Config.sh files from more than Tcl and Tk.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-$1=...
+#
+#      Defines the following vars:
+#              $1_BIN_DIR      Full path to the directory containing
+#                              the $1Config.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_CONFIG], [
+    #
+    # Ok, lets find the $1 configuration
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-$1
+    #
+
+    if test x"${no_$1}" = x ; then
+       # we reset no_$1 in case something fails here
+       no_$1=true
+       AC_ARG_WITH($1, [  --with-$1              directory containing $1 configuration ($1Config.sh)], with_$1config=${withval})
+       AC_MSG_CHECKING([for $1 configuration])
+       AC_CACHE_VAL(ac_cv_c_$1config,[
+
+           # First check to see if --with-$1 was specified.
+           if test x"${with_$1config}" != x ; then
+               case ${with_$1config} in
+                   */$1Config.sh )
+                       if test -f ${with_$1config}; then
+                           AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself])
+                           with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'`
+                       fi;;
+               esac
+               if test -f "${with_$1config}/$1Config.sh" ; then
+                   ac_cv_c_$1config=`(cd ${with_$1config}; pwd)`
+               else
+                   AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh])
+               fi
+           fi
+
+           # then check for a private $1 installation
+           if test x"${ac_cv_c_$1config}" = x ; then
+               for i in \
+                       ../$1 \
+                       `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ../../$1 \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ../../../$1 \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ${srcdir}/../$1 \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ; do
+                   if test -f "$i/$1Config.sh" ; then
+                       ac_cv_c_$1config=`(cd $i; pwd)`
+                       break
+                   fi
+                   if test -f "$i/unix/$1Config.sh" ; then
+                       ac_cv_c_$1config=`(cd $i/unix; pwd)`
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few common install locations
+           if test x"${ac_cv_c_$1config}" = x ; then
+               for i in `ls -d ${libdir} 2>/dev/null` \
+                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
+                       `ls -d ${prefix}/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/lib 2>/dev/null` \
+                       `ls -d /usr/lib64 2>/dev/null` \
+                       ; do
+                   if test -f "$i/$1Config.sh" ; then
+                       ac_cv_c_$1config=`(cd $i; pwd)`
+                       break
+                   fi
+               done
+           fi
+       ])
+
+       if test x"${ac_cv_c_$1config}" = x ; then
+           $1_BIN_DIR="# no $1 configs found"
+           AC_MSG_WARN([Cannot find $1 configuration definitions])
+           exit 0
+       else
+           no_$1=
+           $1_BIN_DIR=${ac_cv_c_$1config}
+           AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_CONFIG --
+#
+#      Load the $1Config.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              $1_BIN_DIR
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              $1_SRC_DIR
+#              $1_LIB_FILE
+#              $1_LIB_SPEC
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LOAD_CONFIG], [
+    AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh])
+
+    if test -f "${$1_BIN_DIR}/$1Config.sh" ; then
+        AC_MSG_RESULT([loading])
+       . "${$1_BIN_DIR}/$1Config.sh"
+    else
+        AC_MSG_RESULT([file not found])
+    fi
+
+    #
+    # If the $1_BIN_DIR is the build directory (not the install directory),
+    # then set the common variable name to the value of the build variables.
+    # For example, the variable $1_LIB_SPEC will be set to the value
+    # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC
+    # instead of $1_BUILD_LIB_SPEC since it will work with both an
+    # installed and uninstalled version of Tcl.
+    #
+
+    if test -f "${$1_BIN_DIR}/Makefile" ; then
+       AC_MSG_WARN([Found Makefile - using build library specs for $1])
+        $1_LIB_SPEC=${$1_BUILD_LIB_SPEC}
+        $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC}
+        $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH}
+        $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC}
+        $1_LIBRARY_PATH=${$1_LIBRARY_PATH}
+    fi
+
+    AC_SUBST($1_VERSION)
+    AC_SUBST($1_BIN_DIR)
+    AC_SUBST($1_SRC_DIR)
+
+    AC_SUBST($1_LIB_FILE)
+    AC_SUBST($1_LIB_SPEC)
+
+    AC_SUBST($1_STUB_LIB_FILE)
+    AC_SUBST($1_STUB_LIB_SPEC)
+    AC_SUBST($1_STUB_LIB_PATH)
+
+    # Allow the caller to prevent this auto-check by specifying any 2nd arg
+    AS_IF([test "x$2" = x], [
+       # Check both upper and lower-case variants
+       # If a dev wanted non-stubs libs, this function could take an option
+       # to not use _STUB in the paths below
+       AS_IF([test "x${$1_STUB_LIB_SPEC}" = x],
+           [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)],
+           [TEA_LOAD_CONFIG_LIB($1_STUB)])
+    ])
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_CONFIG_LIB --
+#
+#      Helper function to load correct library from another extension's
+#      ${PACKAGE}Config.sh.
+#
+# Results:
+#      Adds to LIBS the appropriate extension library
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_LOAD_CONFIG_LIB], [
+    AC_MSG_CHECKING([For $1 library for LIBS])
+    # This simplifies the use of stub libraries by automatically adding
+    # the stub lib to your path.  Normally this would add to SHLIB_LD_LIBS,
+    # but this is called before CONFIG_CFLAGS.  More importantly, this adds
+    # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD.
+    if test "x${$1_LIB_SPEC}" != "x" ; then
+       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then
+           TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"])
+           AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}])
+       else
+           TEA_ADD_LIBS([${$1_LIB_SPEC}])
+           AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}])
+       fi
+    else
+       AC_MSG_RESULT([file not found])
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_EXPORT_CONFIG --
+#
+#      Define the data to insert into the ${PACKAGE}Config.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              $1
+#
+# Results:
+#      Substitutes the following vars:
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_EXPORT_CONFIG], [
+    #--------------------------------------------------------------------
+    # These are for $1Config.sh
+    #--------------------------------------------------------------------
+
+    # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib)
+    eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}"
+    if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
+       eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}"
+       eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}"
+    else
+       eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
+       eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
+    fi
+    $1_BUILD_LIB_SPEC="-L`$CYGPATH $(pwd)` ${$1_LIB_FLAG}"
+    $1_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${$1_LIB_FLAG}"
+    $1_BUILD_STUB_LIB_SPEC="-L`$CYGPATH $(pwd)` [$]{$1_STUB_LIB_FLAG}"
+    $1_STUB_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` [$]{$1_STUB_LIB_FLAG}"
+    $1_BUILD_STUB_LIB_PATH="`$CYGPATH $(pwd)`/[$]{PKG_STUB_LIB_FILE}"
+    $1_STUB_LIB_PATH="`$CYGPATH ${pkglibdir}`/[$]{PKG_STUB_LIB_FILE}"
+
+    AC_SUBST($1_BUILD_LIB_SPEC)
+    AC_SUBST($1_LIB_SPEC)
+    AC_SUBST($1_BUILD_STUB_LIB_SPEC)
+    AC_SUBST($1_STUB_LIB_SPEC)
+    AC_SUBST($1_BUILD_STUB_LIB_PATH)
+    AC_SUBST($1_STUB_LIB_PATH)
+
+    AC_SUBST(MAJOR_VERSION)
+    AC_SUBST(MINOR_VERSION)
+    AC_SUBST(PATCHLEVEL)
+])
+
+
+#------------------------------------------------------------------------
+# TEA_PATH_CELIB --
+#
+#      Locate Keuchel's celib emulation layer for targeting Win/CE
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-celib=...
+#
+#      Defines the following vars:
+#              CELIB_DIR       Full path to the directory containing
+#                              the include and platform lib files
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_CELIB], [
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-celib
+
+    if test x"${no_celib}" = x ; then
+       # we reset no_celib in case something fails here
+       no_celib=true
+       AC_ARG_WITH(celib,[  --with-celib=DIR        use Windows/CE support library from DIR], with_celibconfig=${withval})
+       AC_MSG_CHECKING([for Windows/CE celib directory])
+       AC_CACHE_VAL(ac_cv_c_celibconfig,[
+           # First check to see if --with-celibconfig was specified.
+           if test x"${with_celibconfig}" != x ; then
+               if test -d "${with_celibconfig}/inc" ; then
+                   ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)`
+               else
+                   AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory])
+               fi
+           fi
+
+           # then check for a celib library
+           if test x"${ac_cv_c_celibconfig}" = x ; then
+               for i in \
+                       ../celib-palm-3.0 \
+                       ../celib \
+                       ../../celib-palm-3.0 \
+                       ../../celib \
+                       `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \
+                       ${srcdir}/../celib-palm-3.0 \
+                       ${srcdir}/../celib \
+                       `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \
+                       ; do
+                   if test -d "$i/inc" ; then
+                       ac_cv_c_celibconfig=`(cd $i; pwd)`
+                       break
+                   fi
+               done
+           fi
+       ])
+       if test x"${ac_cv_c_celibconfig}" = x ; then
+           AC_MSG_ERROR([Cannot find celib support library directory])
+       else
+           no_celib=
+           CELIB_DIR=${ac_cv_c_celibconfig}
+           CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
+           AC_MSG_RESULT([found $CELIB_DIR])
+       fi
+    fi
+])
+
+###
+# Tip 430 - ZipFS Modifications
+###
+#------------------------------------------------------------------------
+# SC_ZIPFS_SUPPORT
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
+#              TCL_ZIPFS_FLAG
+#              ZIP_PROG
+#------------------------------------------------------------------------
+
+#------------------------------------------------------------------------
+# SC_PROG_ZIP
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              ZIP_PROG
+#       ZIP_PROG_OPTIONS
+#       ZIP_PROG_VFSSEARCH
+#       ZIP_INSTALL_OBJS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ZIPFS_SUPPORT], [
+    AC_MSG_CHECKING([for zipfs support])
+    ZIP_PROG=""
+    ZIP_PROG_OPTIONS=""
+    ZIP_PROG_VFSSEARCH=""
+    INSTALL_MSGS=""
+    # If our native tclsh processes the "install" command line option
+    # we can use it to mint zip files
+    AS_IF([$TCLSH_PROG install],[
+      ZIP_PROG=${TCLSH_PROG}
+      ZIP_PROG_OPTIONS="install mkzip"
+      ZIP_PROG_VFSSEARCH="."
+      AC_MSG_RESULT([Can use Native Tclsh for Zip encoding])
+    ])
+    if test "x$ZIP_PROG" = "x" ; then
+        AC_CACHE_VAL(ac_cv_path_zip, [
+        search_path=`echo ${PATH} | sed -e 's/:/ /g'`
+        for dir in $search_path ; do
+            for j in `ls -r $dir/zip 2> /dev/null` \
+                `ls -r $dir/zip 2> /dev/null` ; do
+            if test x"$ac_cv_path_zip" = x ; then
+                if test -f "$j" ; then
+                ac_cv_path_zip=$j
+                break
+                fi
+            fi
+            done
+        done
+        ])
+        if test -f "$ac_cv_path_zip" ; then
+            ZIP_PROG="$ac_cv_path_zip "
+            AC_MSG_RESULT([$ZIP_PROG])
+            ZIP_PROG_OPTIONS="-rq"
+            ZIP_PROG_VFSSEARCH="."
+            AC_MSG_RESULT([Found INFO Zip in environment])
+            # Use standard arguments for zip
+        fi
+    fi
+    if test "x$ZIP_PROG" = "x" ; then
+           # It is not an error if an installed version of Zip can't be located.
+        ZIP_PROG=""
+        ZIP_PROG_OPTIONS=""
+        ZIP_PROG_VFSSEARCH=""
+        TCL_ZIPFS_SUPPORT=0
+        TCL_ZIPFS_FLAG=
+    else
+        # ZIPFS Support
+       eval "TCL_ZIP_FILE=\"${TCL_ZIP_FILE}\""
+       if test ${TCL_ZIP_FILE} = "" ; then
+          TCL_ZIPFS_SUPPORT=0
+          TCL_ZIPFS_FLAG=
+          INSTALL_LIBRARIES=install-libraries
+          INSTALL_MSGS=install-msgs
+       else
+           if test ${SHARED_BUILD} = 1 ; then
+              TCL_ZIPFS_SUPPORT=1
+              INSTALL_LIBRARIES=install-libraries-zipfs-shared
+           else
+              TCL_ZIPFS_SUPPORT=2
+              INSTALL_LIBRARIES=install-libraries-zipfs-static
+           fi
+          TCL_ZIPFS_FLAG=-DTCL_ZIPFS_SUPPORT
+       fi
+    fi
+
+    AC_SUBST(TCL_ZIP_FILE)
+    AC_SUBST(TCL_ZIPFS_SUPPORT)
+    AC_SUBST(TCL_ZIPFS_FLAG)
+    AC_SUBST(ZIP_PROG)
+    AC_SUBST(ZIP_PROG_OPTIONS)
+    AC_SUBST(ZIP_PROG_VFSSEARCH)
+    AC_SUBST(INSTALL_LIBRARIES)
+    AC_SUBST(INSTALL_MSGS)
+])
+
+# Local Variables:
+# mode: autoconf
+# End:
diff --git a/pkgs/tdbcsqlite3-1.0.6/win/makefile.vc b/pkgs/tdbcsqlite3-1.0.6/win/makefile.vc
new file mode 100644 (file)
index 0000000..ea9ad94
--- /dev/null
@@ -0,0 +1,42 @@
+#------------------------------------------------------------- -*- makefile -*-
+#
+# Makefile for TBDC Sqlite3 interface
+#
+# Basic test and install
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir TCLDIR=c:\path\to\tcl\source test
+#   nmake /s /nologo /f makefile.vc INSTALLDIR=c:\path\to\installdir TCLDIR=c:\path\to\tcl\source install
+#
+# For other build options (debug, static etc.)
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+# 
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+#------------------------------------------------------------------------------
+
+PROJECT = tdbcsqlite3
+!include "rules-ext.vc"
+
+# Pure Tcl extension, no object files
+PRJ_OBJS = 
+
+TM_INSTALL_DIR = $(_INSTALLDIR)\tcl$(TCL_MAJOR_VERSION)\$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+
+$(PROJECT):
+       @echo "This is a pure Tcl module and does not require a build step. Do a nmake install to install"
+setup: default-setup
+install: install-tm default-install-docs-n
+clean: default-clean
+realclean: hose
+hose: default-hose
+distclean: realclean default-distclean
+
+install-tm:
+       @echo Installing 'tdbcsqlite3.tcl' file to '$(TM_INSTALL_DIR)\tdbc\sqlite3-$(DOTVERSION).tm'
+       @if not exist "$(TM_INSTALL_DIR)\tdbc" mkdir "$(TM_INSTALL_DIR)\tdbc"
+       @if exist $(LIBDIR) $(COPY) $(LIBDIR)\tdbcsqlite3.tcl "$(TM_INSTALL_DIR)\tdbc\sqlite3-$(DOTVERSION).tm"
+
+test: default-test
+
+shell: default-shell
diff --git a/pkgs/tdbcsqlite3-1.0.6/win/nmakehlp.c b/pkgs/tdbcsqlite3-1.0.6/win/nmakehlp.c
new file mode 100644 (file)
index 0000000..025bb99
--- /dev/null
@@ -0,0 +1,814 @@
+/*
+ * ----------------------------------------------------------------------------
+ * nmakehlp.c --
+ *
+ *     This is used to fix limitations within nmake and the environment.
+ *
+ * Copyright (c) 2002 by David Gravereaux.
+ * Copyright (c) 2006 by Pat Thoyts
+ *
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ * ----------------------------------------------------------------------------
+ */
+
+#define _CRT_SECURE_NO_DEPRECATE
+#include <windows.h>
+#define NO_SHLWAPI_GDI
+#define NO_SHLWAPI_STREAM
+#define NO_SHLWAPI_REG
+#include <shlwapi.h>
+#pragma comment (lib, "user32.lib")
+#pragma comment (lib, "kernel32.lib")
+#pragma comment (lib, "shlwapi.lib")
+#include <stdio.h>
+#include <math.h>
+
+/*
+ * This library is required for x64 builds with _some_ versions of MSVC
+ */
+#if defined(_M_IA64) || defined(_M_AMD64)
+#if _MSC_VER >= 1400 && _MSC_VER < 1500
+#pragma comment(lib, "bufferoverflowU")
+#endif
+#endif
+
+/* ISO hack for dumb VC++ */
+#ifdef _MSC_VER
+#define   snprintf     _snprintf
+#endif
+
+
+/* protos */
+
+static int CheckForCompilerFeature(const char *option);
+static int CheckForLinkerFeature(const char **options, int count);
+static int IsIn(const char *string, const char *substring);
+static int SubstituteFile(const char *substs, const char *filename);
+static int QualifyPath(const char *path);
+static int LocateDependency(const char *keyfile);
+static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
+static DWORD WINAPI ReadFromPipe(LPVOID args);
+
+/* globals */
+
+#define CHUNK  25
+#define STATICBUFFERSIZE    1000
+typedef struct {
+    HANDLE pipe;
+    char buffer[STATICBUFFERSIZE];
+} pipeinfo;
+
+pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'};
+pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'};
+\f
+/*
+ * exitcodes: 0 == no, 1 == yes, 2 == error
+ */
+
+int
+main(
+    int argc,
+    char *argv[])
+{
+    char msg[300];
+    DWORD dwWritten;
+    int chars;
+    char *s;
+
+    /*
+     * Make sure children (cl.exe and link.exe) are kept quiet.
+     */
+
+    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
+
+    /*
+     * Make sure the compiler and linker aren't effected by the outside world.
+     */
+
+    SetEnvironmentVariable("CL", "");
+    SetEnvironmentVariable("LINK", "");
+
+    if (argc > 1 && *argv[1] == '-') {
+       switch (*(argv[1]+1)) {
+       case 'c':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -c <compiler option>\n"
+                       "Tests for whether cl.exe supports an option\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return CheckForCompilerFeature(argv[2]);
+       case 'l':
+           if (argc < 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -l <linker option> ?<mandatory option> ...?\n"
+                       "Tests for whether link.exe supports an option\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return CheckForLinkerFeature(&argv[2], argc-2);
+       case 'f':
+           if (argc == 2) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -f <string> <substring>\n"
+                       "Find a substring within another\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           } else if (argc == 3) {
+               /*
+                * If the string is blank, there is no match.
+                */
+
+               return 0;
+           } else {
+               return IsIn(argv[2], argv[3]);
+           }
+       case 's':
+           if (argc == 2) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -s <substitutions file> <file>\n"
+                       "Perform a set of string map type substutitions on a file\n"
+                       "exitcodes: 0\n",
+                       argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return SubstituteFile(argv[2], argv[3]);
+       case 'V':
+           if (argc != 4) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -V filename matchstring\n"
+                   "Extract a version from a file:\n"
+                   "eg: pkgIndex.tcl \"package ifneeded http\"",
+                   argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 0;
+           }
+           s = GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0');
+           if (s && *s) {
+               printf("%s\n", s);
+               return 0;
+           } else
+               return 1; /* Version not found. Return non-0 exit code */
+
+       case 'Q':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -Q path\n"
+                   "Emit the fully qualified path\n"
+                   "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return QualifyPath(argv[2]);
+
+       case 'L':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -L keypath\n"
+                   "Emit the fully qualified path of directory containing keypath\n"
+                   "exitcodes: 0 == success, 1 == not found, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return LocateDependency(argv[2]);
+       }
+    }
+    chars = snprintf(msg, sizeof(msg) - 1,
+           "usage: %s -c|-f|-l|-Q|-s|-V ...\n"
+           "This is a little helper app to equalize shell differences between WinNT and\n"
+           "Win9x and get nmake.exe to accomplish its job.\n",
+           argv[0]);
+    WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
+    return 2;
+}
+\f
+static int
+CheckForCompilerFeature(
+    const char *option)
+{
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;
+    SECURITY_ATTRIBUTES sa;
+    DWORD threadID;
+    char msg[300];
+    BOOL ok;
+    HANDLE hProcess, h, pipeThreads[2];
+    char cmdline[100];
+
+    hProcess = GetCurrentProcess();
+
+    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
+    ZeroMemory(&si, sizeof(STARTUPINFO));
+    si.cb = sizeof(STARTUPINFO);
+    si.dwFlags   = STARTF_USESTDHANDLES;
+    si.hStdInput = INVALID_HANDLE_VALUE;
+
+    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
+    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+    sa.lpSecurityDescriptor = NULL;
+    sa.bInheritHandle = FALSE;
+
+    /*
+     * Create a non-inheritible pipe.
+     */
+
+    CreatePipe(&Out.pipe, &h, &sa, 0);
+
+    /*
+     * Dupe the write side, make it inheritible, and close the original.
+     */
+
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Same as above, but for the error side.
+     */
+
+    CreatePipe(&Err.pipe, &h, &sa, 0);
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Base command line.
+     */
+
+    lstrcpy(cmdline, "cl.exe -nologo -c -TC -Zs -X -Fp.\\_junk.pch ");
+
+    /*
+     * Append our option for testing
+     */
+
+    lstrcat(cmdline, option);
+
+    /*
+     * Filename to compile, which exists, but is nothing and empty.
+     */
+
+    lstrcat(cmdline, " .\\nul");
+
+    ok = CreateProcess(
+           NULL,           /* Module name. */
+           cmdline,        /* Command line. */
+           NULL,           /* Process handle not inheritable. */
+           NULL,           /* Thread handle not inheritable. */
+           TRUE,           /* yes, inherit handles. */
+           DETACHED_PROCESS, /* No console for you. */
+           NULL,           /* Use parent's environment block. */
+           NULL,           /* Use parent's starting directory. */
+           &si,            /* Pointer to STARTUPINFO structure. */
+           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
+
+    if (!ok) {
+       DWORD err = GetLastError();
+       int chars = snprintf(msg, sizeof(msg) - 1,
+               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
+
+       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
+               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
+               (300-chars), 0);
+       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
+       return 2;
+    }
+
+    /*
+     * Close our references to the write handles that have now been inherited.
+     */
+
+    CloseHandle(si.hStdOutput);
+    CloseHandle(si.hStdError);
+
+    WaitForInputIdle(pi.hProcess, 5000);
+    CloseHandle(pi.hThread);
+
+    /*
+     * Start the pipe reader threads.
+     */
+
+    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
+    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
+
+    /*
+     * Block waiting for the process to end.
+     */
+
+    WaitForSingleObject(pi.hProcess, INFINITE);
+    CloseHandle(pi.hProcess);
+
+    /*
+     * Wait for our pipe to get done reading, should it be a little slow.
+     */
+
+    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
+    CloseHandle(pipeThreads[0]);
+    CloseHandle(pipeThreads[1]);
+
+    /*
+     * Look for the commandline warning code in both streams.
+     *  - in MSVC 6 & 7 we get D4002, in MSVC 8 we get D9002.
+     */
+
+    return !(strstr(Out.buffer, "D4002") != NULL
+             || strstr(Err.buffer, "D4002") != NULL
+             || strstr(Out.buffer, "D9002") != NULL
+             || strstr(Err.buffer, "D9002") != NULL
+             || strstr(Out.buffer, "D2021") != NULL
+             || strstr(Err.buffer, "D2021") != NULL);
+}
+\f
+static int
+CheckForLinkerFeature(
+    const char **options,
+    int count)
+{
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;
+    SECURITY_ATTRIBUTES sa;
+    DWORD threadID;
+    char msg[300];
+    BOOL ok;
+    HANDLE hProcess, h, pipeThreads[2];
+    int i;
+    char cmdline[255];
+
+    hProcess = GetCurrentProcess();
+
+    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
+    ZeroMemory(&si, sizeof(STARTUPINFO));
+    si.cb = sizeof(STARTUPINFO);
+    si.dwFlags   = STARTF_USESTDHANDLES;
+    si.hStdInput = INVALID_HANDLE_VALUE;
+
+    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
+    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+    sa.lpSecurityDescriptor = NULL;
+    sa.bInheritHandle = TRUE;
+
+    /*
+     * Create a non-inheritible pipe.
+     */
+
+    CreatePipe(&Out.pipe, &h, &sa, 0);
+
+    /*
+     * Dupe the write side, make it inheritible, and close the original.
+     */
+
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Same as above, but for the error side.
+     */
+
+    CreatePipe(&Err.pipe, &h, &sa, 0);
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Base command line.
+     */
+
+    lstrcpy(cmdline, "link.exe -nologo ");
+
+    /*
+     * Append our option for testing.
+     */
+
+    for (i = 0; i < count; i++) {
+       lstrcat(cmdline, " \"");
+       lstrcat(cmdline, options[i]);
+       lstrcat(cmdline, "\"");
+    }
+
+    ok = CreateProcess(
+           NULL,           /* Module name. */
+           cmdline,        /* Command line. */
+           NULL,           /* Process handle not inheritable. */
+           NULL,           /* Thread handle not inheritable. */
+           TRUE,           /* yes, inherit handles. */
+           DETACHED_PROCESS, /* No console for you. */
+           NULL,           /* Use parent's environment block. */
+           NULL,           /* Use parent's starting directory. */
+           &si,            /* Pointer to STARTUPINFO structure. */
+           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
+
+    if (!ok) {
+       DWORD err = GetLastError();
+       int chars = snprintf(msg, sizeof(msg) - 1,
+               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
+
+       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
+               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
+               (300-chars), 0);
+       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
+       return 2;
+    }
+
+    /*
+     * Close our references to the write handles that have now been inherited.
+     */
+
+    CloseHandle(si.hStdOutput);
+    CloseHandle(si.hStdError);
+
+    WaitForInputIdle(pi.hProcess, 5000);
+    CloseHandle(pi.hThread);
+
+    /*
+     * Start the pipe reader threads.
+     */
+
+    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
+    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
+
+    /*
+     * Block waiting for the process to end.
+     */
+
+    WaitForSingleObject(pi.hProcess, INFINITE);
+    CloseHandle(pi.hProcess);
+
+    /*
+     * Wait for our pipe to get done reading, should it be a little slow.
+     */
+
+    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
+    CloseHandle(pipeThreads[0]);
+    CloseHandle(pipeThreads[1]);
+
+    /*
+     * Look for the commandline warning code in the stderr stream.
+     */
+
+    return !(strstr(Out.buffer, "LNK1117") != NULL ||
+           strstr(Err.buffer, "LNK1117") != NULL ||
+           strstr(Out.buffer, "LNK4044") != NULL ||
+           strstr(Err.buffer, "LNK4044") != NULL ||
+           strstr(Out.buffer, "LNK4224") != NULL ||
+           strstr(Err.buffer, "LNK4224") != NULL);
+}
+\f
+static DWORD WINAPI
+ReadFromPipe(
+    LPVOID args)
+{
+    pipeinfo *pi = (pipeinfo *) args;
+    char *lastBuf = pi->buffer;
+    DWORD dwRead;
+    BOOL ok;
+
+  again:
+    if (lastBuf - pi->buffer + CHUNK > STATICBUFFERSIZE) {
+       CloseHandle(pi->pipe);
+       return (DWORD)-1;
+    }
+    ok = ReadFile(pi->pipe, lastBuf, CHUNK, &dwRead, 0L);
+    if (!ok || dwRead == 0) {
+       CloseHandle(pi->pipe);
+       return 0;
+    }
+    lastBuf += dwRead;
+    goto again;
+
+    return 0;  /* makes the compiler happy */
+}
+\f
+static int
+IsIn(
+    const char *string,
+    const char *substring)
+{
+    return (strstr(string, substring) != NULL);
+}
+\f
+/*
+ * GetVersionFromFile --
+ *     Looks for a match string in a file and then returns the version
+ *     following the match where a version is anything acceptable to
+ *     package provide or package ifneeded.
+ */
+
+static const char *
+GetVersionFromFile(
+    const char *filename,
+    const char *match,
+    int numdots)
+{
+    size_t cbBuffer = 100;
+    static char szBuffer[100];
+    char *szResult = NULL;
+    FILE *fp = fopen(filename, "rt");
+
+    if (fp != NULL) {
+       /*
+        * Read data until we see our match string.
+        */
+
+       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
+           LPSTR p, q;
+
+           p = strstr(szBuffer, match);
+           if (p != NULL) {
+               /*
+                * Skip to first digit after the match.
+                */
+
+               p += strlen(match);
+               while (*p && !isdigit(*p)) {
+                   ++p;
+               }
+
+               /*
+                * Find ending whitespace.
+                */
+
+               q = p;
+               while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q)
+                           && (!strchr("ab", q[-1])) || --numdots))) {
+                   ++q;
+               }
+
+               memcpy(szBuffer, p, q - p);
+               szBuffer[q-p] = 0;
+               szResult = szBuffer;
+               break;
+           }
+       }
+       fclose(fp);
+    }
+    return szResult;
+}
+\f
+/*
+ * List helpers for the SubstituteFile function
+ */
+
+typedef struct list_item_t {
+    struct list_item_t *nextPtr;
+    char * key;
+    char * value;
+} list_item_t;
+
+/* insert a list item into the list (list may be null) */
+static list_item_t *
+list_insert(list_item_t **listPtrPtr, const char *key, const char *value)
+{
+    list_item_t *itemPtr = malloc(sizeof(list_item_t));
+    if (itemPtr) {
+       itemPtr->key = strdup(key);
+       itemPtr->value = strdup(value);
+       itemPtr->nextPtr = NULL;
+
+       while(*listPtrPtr) {
+           listPtrPtr = &(*listPtrPtr)->nextPtr;
+       }
+       *listPtrPtr = itemPtr;
+    }
+    return itemPtr;
+}
+
+static void
+list_free(list_item_t **listPtrPtr)
+{
+    list_item_t *tmpPtr, *listPtr = *listPtrPtr;
+    while (listPtr) {
+       tmpPtr = listPtr;
+       listPtr = listPtr->nextPtr;
+       free(tmpPtr->key);
+       free(tmpPtr->value);
+       free(tmpPtr);
+    }
+}
+\f
+/*
+ * SubstituteFile --
+ *     As windows doesn't provide anything useful like sed and it's unreliable
+ *     to use the tclsh you are building against (consider x-platform builds -
+ *     eg compiling AMD64 target from IX86) we provide a simple substitution
+ *     option here to handle autoconf style substitutions.
+ *     The substitution file is whitespace and line delimited. The file should
+ *     consist of lines matching the regular expression:
+ *       \s*\S+\s+\S*$
+ *
+ *     Usage is something like:
+ *       nmakehlp -S << $** > $@
+ *        @PACKAGE_NAME@ $(PACKAGE_NAME)
+ *        @PACKAGE_VERSION@ $(PACKAGE_VERSION)
+ *        <<
+ */
+
+static int
+SubstituteFile(
+    const char *substitutions,
+    const char *filename)
+{
+    size_t cbBuffer = 1024;
+    static char szBuffer[1024], szCopy[1024];
+    char *szResult = NULL;
+    list_item_t *substPtr = NULL;
+    FILE *fp, *sp;
+
+    fp = fopen(filename, "rt");
+    if (fp != NULL) {
+
+       /*
+        * Build a list of substutitions from the first filename
+        */
+
+       sp = fopen(substitutions, "rt");
+       if (sp != NULL) {
+           while (fgets(szBuffer, cbBuffer, sp) != NULL) {
+               unsigned char *ks, *ke, *vs, *ve;
+               ks = (unsigned char*)szBuffer;
+               while (ks && *ks && isspace(*ks)) ++ks;
+               ke = ks;
+               while (ke && *ke && !isspace(*ke)) ++ke;
+               vs = ke;
+               while (vs && *vs && isspace(*vs)) ++vs;
+               ve = vs;
+               while (ve && *ve && !(*ve == '\r' || *ve == '\n')) ++ve;
+               *ke = 0, *ve = 0;
+               list_insert(&substPtr, (char*)ks, (char*)vs);
+           }
+           fclose(sp);
+       }
+
+       /* debug: dump the list */
+#ifdef _DEBUG
+       {
+           int n = 0;
+           list_item_t *p = NULL;
+           for (p = substPtr; p != NULL; p = p->nextPtr, ++n) {
+               fprintf(stderr, "% 3d '%s' => '%s'\n", n, p->key, p->value);
+           }
+       }
+#endif
+
+       /*
+        * Run the substitutions over each line of the input
+        */
+
+       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
+           list_item_t *p = NULL;
+           for (p = substPtr; p != NULL; p = p->nextPtr) {
+               char *m = strstr(szBuffer, p->key);
+               if (m) {
+                   char *cp, *op, *sp;
+                   cp = szCopy;
+                   op = szBuffer;
+                   while (op != m) *cp++ = *op++;
+                   sp = p->value;
+                   while (sp && *sp) *cp++ = *sp++;
+                   op += strlen(p->key);
+                   while (*op) *cp++ = *op++;
+                   *cp = 0;
+                   memcpy(szBuffer, szCopy, sizeof(szCopy));
+               }
+           }
+           printf(szBuffer);
+       }
+
+       list_free(&substPtr);
+    }
+    fclose(fp);
+    return 0;
+}
+\f
+/*
+ * QualifyPath --
+ *
+ *     This composes the current working directory with a provided path
+ *     and returns the fully qualified and normalized path.
+ *     Mostly needed to setup paths for testing.
+ */
+
+static int
+QualifyPath(
+    const char *szPath)
+{
+    char szCwd[MAX_PATH + 1];
+    char szTmp[MAX_PATH + 1];
+    char *p;
+    GetCurrentDirectory(MAX_PATH, szCwd);
+    while ((p = strchr(szPath, '/')) && *p)
+       *p = '\\';
+    PathCombine(szTmp, szCwd, szPath);
+    PathCanonicalize(szCwd, szTmp);
+    printf("%s\n", szCwd);
+    return 0;
+}
+
+/*
+ * Implements LocateDependency for a single directory. See that command
+ * for an explanation.
+ * Returns 0 if found after printing the directory.
+ * Returns 1 if not found but no errors.
+ * Returns 2 on any kind of error
+ * Basically, these are used as exit codes for the process.
+ */
+static int LocateDependencyHelper(const char *dir, const char *keypath)
+{
+    HANDLE hSearch;
+    char path[MAX_PATH+1];
+    int dirlen, keylen, ret;
+    WIN32_FIND_DATA finfo;
+
+    if (dir == NULL || keypath == NULL)
+       return 2; /* Have no real error reporting mechanism into nmake */
+    dirlen = strlen(dir);
+    if ((dirlen + 3) > sizeof(path))
+       return 2;
+    strncpy(path, dir, dirlen);
+    strncpy(path+dirlen, "\\*", 3);    /* Including terminating \0 */
+    keylen = strlen(keypath);
+
+#if 0 /* This function is not available in Visual C++ 6 */
+    /*
+     * Use numerics 0 -> FindExInfoStandard,
+     * 1 -> FindExSearchLimitToDirectories, 
+     * as these are not defined in Visual C++ 6
+     */
+    hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0);
+#else
+    hSearch = FindFirstFile(path, &finfo);
+#endif
+    if (hSearch == INVALID_HANDLE_VALUE)
+       return 1; /* Not found */
+
+    /* Loop through all subdirs checking if the keypath is under there */
+    ret = 1; /* Assume not found */
+    do {
+       int sublen;
+       /*
+        * We need to check it is a directory despite the 
+        * FindExSearchLimitToDirectories in the above call. See SDK docs
+        */
+       if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
+           continue;
+       sublen = strlen(finfo.cFileName);
+       if ((dirlen+1+sublen+1+keylen+1) > sizeof(path))
+           continue;           /* Path does not fit, assume not matched */
+       strncpy(path+dirlen+1, finfo.cFileName, sublen);
+       path[dirlen+1+sublen] = '\\';
+       strncpy(path+dirlen+1+sublen+1, keypath, keylen+1);
+       if (PathFileExists(path)) {
+           /* Found a match, print to stdout */
+           path[dirlen+1+sublen] = '\0';
+           QualifyPath(path);
+           ret = 0;
+           break;
+       }
+    } while (FindNextFile(hSearch, &finfo));
+    FindClose(hSearch);
+    return ret;
+}
+
+/*
+ * LocateDependency --
+ *
+ *     Locates a dependency for a package.
+ *        keypath - a relative path within the package directory
+ *          that is used to confirm it is the correct directory.
+ *     The search path for the package directory is currently only
+ *      the parent and grandparent of the current working directory.
+ *      If found, the command prints 
+ *         name_DIRPATH=<full path of located directory>
+ *      and returns 0. If not found, does not print anything and returns 1.
+ */
+static int LocateDependency(const char *keypath)
+{
+    int i, ret;
+    static char *paths[] = {"..", "..\\..", "..\\..\\.."};
+    
+    for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) {
+       ret = LocateDependencyHelper(paths[i], keypath);
+       if (ret == 0)
+           return ret;
+    }
+    return ret;
+}
+
+
+/*
+ * Local variables:
+ *   mode: c
+ *   c-basic-offset: 4
+ *   fill-column: 78
+ *   indent-tabs-mode: t
+ *   tab-width: 8
+ * End:
+ */
diff --git a/pkgs/tdbcsqlite3-1.0.6/win/rules-ext.vc b/pkgs/tdbcsqlite3-1.0.6/win/rules-ext.vc
new file mode 100644 (file)
index 0000000..ab86876
--- /dev/null
@@ -0,0 +1,118 @@
+# This file should only be included in makefiles for Tcl extensions,
+# NOT in the makefile for Tcl itself.
+
+!ifndef _RULES_EXT_VC
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+!if "$(PROJECT)" == "tcl"
+!error The rules-ext.vc file is not intended for Tcl itself.
+!endif
+
+# We extract version numbers using the nmakehlp program. For now use
+# the local copy of nmakehlp. Once we locate Tcl, we will use that
+# one if it is newer.
+!if [$(CC) -nologo "nmakehlp.c" -link -subsystem:console > nul]
+!endif
+
+# First locate the Tcl directory that we are working with.
+!ifdef TCLDIR
+
+_RULESDIR = $(TCLDIR:/=\)
+
+!else
+
+# If an installation path is specified, that is also the Tcl directory.
+# Also Tk never builds against an installed Tcl, it needs Tcl sources
+!if defined(INSTALLDIR) && "$(PROJECT)" != "tk"
+_RULESDIR=$(INSTALLDIR:/=\)
+!else
+# Locate Tcl sources
+!if [echo _RULESDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+_RULESDIR = ..\..\tcl
+!else
+!include nmakehlp.out
+!endif
+
+!endif # defined(INSTALLDIR)....
+
+!endif # ifndef TCLDIR
+
+# Now look for the targets.vc file under the Tcl root. Note we check this
+# file and not rules.vc because the latter also exists on older systems.
+!if exist("$(_RULESDIR)\lib\nmake\targets.vc") # Building against installed Tcl
+_RULESDIR = $(_RULESDIR)\lib\nmake
+!elseif exist("$(_RULESDIR)\win\targets.vc")   # Building against Tcl sources
+_RULESDIR = $(_RULESDIR)\win
+!else
+# If we have not located Tcl's targets file, most likely we are compiling
+# against an older version of Tcl and so must use our own support files.
+_RULESDIR = .
+!endif
+
+!if "$(_RULESDIR)" != "."
+# Potentially using Tcl's support files. If this extension has its own
+# nmake support files, need to compare the versions and pick newer.
+
+!if exist("rules.vc") # The extension has its own copy
+
+!if [echo TCL_RULES_MAJOR = \> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo TCL_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+
+!if [echo OUR_RULES_MAJOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MAJOR >> versions.vc]
+!endif
+!if [echo OUR_RULES_MINOR = \>> versions.vc] \
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MINOR >> versions.vc]
+!endif
+!include versions.vc
+# We have a newer version of the support files, use them
+!if ($(TCL_RULES_MAJOR) != $(OUR_RULES_MAJOR)) || ($(TCL_RULES_MINOR) < $(OUR_RULES_MINOR))
+_RULESDIR = .
+!endif
+
+!endif # if exist("rules.vc")
+
+!endif # if $(_RULESDIR) != "."
+
+# Let rules.vc know what copy of nmakehlp.c to use.
+NMAKEHLPC = $(_RULESDIR)\nmakehlp.c
+
+# Get rid of our internal defines before calling rules.vc
+!undef TCL_RULES_MAJOR
+!undef TCL_RULES_MINOR
+!undef OUR_RULES_MAJOR
+!undef OUR_RULES_MINOR
+
+!if exist("$(_RULESDIR)\rules.vc")
+!message *** Using $(_RULESDIR)\rules.vc
+!include "$(_RULESDIR)\rules.vc"
+!else
+!error *** Could not locate rules.vc in $(_RULESDIR)
+!endif
+
+!endif # _RULES_EXT_VC
\ No newline at end of file
diff --git a/pkgs/tdbcsqlite3-1.0.6/win/rules.vc b/pkgs/tdbcsqlite3-1.0.6/win/rules.vc
new file mode 100644 (file)
index 0000000..bbb412d
--- /dev/null
@@ -0,0 +1,1723 @@
+#------------------------------------------------------------- -*- makefile -*-
+# rules.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file does all the hard work in terms of parsing build options,
+# compiler switches, defining common targets and macros. The Tcl makefile
+# directly includes this. Extensions include it via "rules-ext.vc".
+#
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for
+# detailed documentation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# Copyright (c) 2001-2003 David Gravereaux.
+# Copyright (c) 2003-2008 Patrick Thoyts
+# Copyright (c) 2017      Ashok P. Nadkarni
+#------------------------------------------------------------------------------
+
+!ifndef _RULES_VC
+_RULES_VC = 1
+
+# The following macros define the version of the rules.vc nmake build system
+# For modifications that are not backward-compatible, you *must* change
+# the major version.
+RULES_VERSION_MAJOR = 1
+RULES_VERSION_MINOR = 0
+
+# The PROJECT macro must be defined by parent makefile.
+!if "$(PROJECT)" == ""
+!error *** Error: Macro PROJECT not defined! Please define it before including rules.vc
+!endif
+
+!if "$(PRJ_PACKAGE_TCLNAME)" == ""
+PRJ_PACKAGE_TCLNAME = $(PROJECT)
+!endif
+
+# Also special case Tcl and Tk to save some typing later
+DOING_TCL = 0
+DOING_TK  = 0
+!if "$(PROJECT)" == "tcl"
+DOING_TCL = 1
+!elseif "$(PROJECT)" == "tk"
+DOING_TK = 1
+!endif
+
+!ifndef NEED_TK
+# Backwards compatibility
+!ifdef PROJECT_REQUIRES_TK
+NEED_TK = $(PROJECT_REQUIRES_TK)
+!else
+NEED_TK = 0
+!endif
+!endif
+
+!ifndef NEED_TCL_SOURCE
+NEED_TCL_SOURCE = 0
+!endif
+
+!ifdef NEED_TK_SOURCE
+!if $(NEED_TK_SOURCE)
+NEED_TK = 1
+!endif
+!else
+NEED_TK_SOURCE = 0
+!endif
+
+################################################################
+# Nmake is a pretty weak environment in syntax and capabilities
+# so this file is necessarily verbose. It's broken down into
+# the following parts.
+#
+# 0. Sanity check that compiler environment is set up and initialize
+#    any built-in settings from the parent makefile
+# 1. First define the external tools used for compiling, copying etc.
+#    as this is independent of everything else.
+# 2. Figure out our build structure in terms of the directory, whether
+#    we are building Tcl or an extension, etc.
+# 3. Determine the compiler and linker versions
+# 4. Build the nmakehlp helper application
+# 5. Determine the supported compiler options and features
+# 6. Parse the OPTS macro value for user-specified build configuration
+# 7. Parse the STATS macro value for statistics instrumentation
+# 8. Parse the CHECKS macro for additional compilation checks
+# 9. Extract Tcl, and possibly Tk, version numbers from the headers
+# 10. Based on this selected configuration, construct the output
+#     directory and file paths
+# 11. Construct the paths where the package is to be installed
+# 12. Set up the actual options passed to compiler and linker based
+#     on the information gathered above.
+# 13. Define some standard build targets and implicit rules. These may
+#     be optionally disabled by the parent makefile.
+# 14. (For extensions only.) Compare the configuration of the target
+#     Tcl and the extensions and warn against discrepancies.
+#
+# One final note about the macro names used. They are as they are
+# for historical reasons. We would like legacy extensions to
+# continue to work with this make include file so be wary of
+# changing them for consistency or clarity.
+
+# 0. Sanity check compiler environment
+
+# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
+# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
+
+!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)
+MSG = ^
+Visual C++ compiler environment not initialized.
+!error $(MSG)
+!endif
+
+# We need to run from the directory the parent makefile is located in.
+# nmake does not tell us what makefile was used to invoke it so parent
+# makefile has to set the MAKEFILEVC macro or we just make a guess and
+# warn if we think that is not the case.
+!if "$(MAKEFILEVC)" == ""
+
+!if exist("$(PROJECT).vc")
+MAKEFILEVC = $(PROJECT).vc
+!elseif exist("makefile.vc")
+MAKEFILEVC = makefile.vc
+!endif
+!endif # "$(MAKEFILEVC)" == ""
+
+!if !exist("$(MAKEFILEVC)")
+MSG = ^
+You must run nmake from the directory containing the project makefile.^
+If you are doing that and getting this message, set the MAKEFILEVC^
+macro to the name of the project makefile.
+!message WARNING: $(MSG)
+!endif
+
+
+################################################################
+# 1. Define external programs being used
+
+#----------------------------------------------------------
+# Set the proper copy method to avoid overwrite questions
+# to the user when copying files and selecting the right
+# "delete all" method.
+#----------------------------------------------------------
+
+RMDIR  = rmdir /S /Q
+CPY    = xcopy /i /y >NUL
+CPYDIR  = xcopy /e /i /y >NUL
+COPY   = copy /y >NUL
+MKDIR   = mkdir
+
+######################################################################
+# 2. Figure out our build environment in terms of what we're building.
+#
+# (a) Tcl itself
+# (b) Tk
+# (c) a Tcl extension using libraries/includes from an *installed* Tcl
+# (d) a Tcl extension using libraries/includes from Tcl source directory
+#
+# This last is needed because some extensions still need
+# some Tcl interfaces that are not publicly exposed.
+#
+# The fragment will set the following macros:
+# ROOT - root of this module sources
+# COMPATDIR - source directory that holds compatibility sources
+# DOCDIR - source directory containing documentation files
+# GENERICDIR - platform-independent source directory
+# WINDIR - Windows-specific source directory
+# TESTDIR - directory containing test files
+# TOOLSDIR - directory containing build tools
+# _TCLDIR - root of the Tcl installation OR the Tcl sources. Not set
+#    when building Tcl itself.
+# _INSTALLDIR - native form of the installation path. For Tcl
+#    this will be the root of the Tcl installation. For extensions
+#    this will be the lib directory under the root.
+# TCLINSTALL  - set to 1 if _TCLDIR refers to
+#    headers and libraries from an installed Tcl, and 0 if built against
+#    Tcl sources. Not set when building Tcl itself. Yes, not very well
+#    named.
+# _TCL_H - native path to the tcl.h file
+#
+# If Tk is involved, also sets the following
+# _TKDIR - native form Tk installation OR Tk source. Not set if building
+#    Tk itself.
+# TKINSTALL - set 1 if _TKDIR refers to installed Tk and 0 if Tk sources
+# _TK_H - native path to the tk.h file
+
+# Root directory for sources and assumed subdirectories
+ROOT = $(MAKEDIR)\..
+# The following paths CANNOT have spaces in them as they appear on the
+# left side of implicit rules.
+!ifndef COMPATDIR
+COMPATDIR      = $(ROOT)\compat
+!endif
+!ifndef DOCDIR
+DOCDIR         = $(ROOT)\doc
+!endif
+!ifndef GENERICDIR
+GENERICDIR     = $(ROOT)\generic
+!endif
+!ifndef TOOLSDIR
+TOOLSDIR       = $(ROOT)\tools
+!endif
+!ifndef TESTDIR
+TESTDIR        = $(ROOT)\tests
+!endif
+!ifndef LIBDIR
+!if exist("$(ROOT)\library")
+LIBDIR          = $(ROOT)\library
+!else
+LIBDIR          = $(ROOT)\lib
+!endif
+!endif
+!ifndef DEMODIR
+!if exist("$(LIBDIR)\demos")
+DEMODIR                = $(LIBDIR)\demos
+!else
+DEMODIR                = $(ROOT)\demos
+!endif
+!endif # ifndef DEMODIR
+# Do NOT enclose WINDIR in a !ifndef because Windows always defines
+# WINDIR env var to point to c:\windows!
+# TBD - This is a potentially dangerous conflict, rename WINDIR to
+# something else
+WINDIR         = $(ROOT)\win
+
+!ifndef RCDIR
+!if exist("$(WINDIR)\rc")
+RCDIR           = $(WINDIR)\rc
+!else
+RCDIR           = $(WINDIR)
+!endif
+!endif
+RCDIR = $(RCDIR:/=\)
+
+# The target directory where the built packages and binaries will be installed.
+# INSTALLDIR is the (optional) path specified by the user.
+# _INSTALLDIR is INSTALLDIR using the backslash separator syntax
+!ifdef INSTALLDIR
+### Fix the path separators.
+_INSTALLDIR    = $(INSTALLDIR:/=\)
+!else
+### Assume the normal default.
+_INSTALLDIR    = $(HOMEDRIVE)\Tcl
+!endif
+
+!if $(DOING_TCL)
+
+# BEGIN Case 2(a) - Building Tcl itself
+
+# Only need to define _TCL_H
+_TCL_H = ..\generic\tcl.h
+
+# END Case 2(a) - Building Tcl itself
+
+!elseif $(DOING_TK)
+
+# BEGIN Case 2(b) - Building Tk
+
+TCLINSTALL = 0 # Tk always builds against Tcl source, not an installed Tcl
+!if "$(TCLDIR)" == ""
+!if [echo TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+!endif # TCLDIR == ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+_TCL_H  = $(_TCLDIR)\generic\tcl.h
+!if !exist("$(_TCL_H)")
+!error Could not locate tcl.h. Please set the TCLDIR macro to point to the Tcl *source* directory.
+!endif
+
+_TK_H = ..\generic\tk.h
+
+# END Case 2(b) - Building Tk
+
+!else
+
+# BEGIN Case 2(c) or (d) - Building an extension other than Tk
+
+# If command line has specified Tcl location through TCLDIR, use it
+# else default to the INSTALLDIR setting
+!if "$(TCLDIR)" != ""
+
+_TCLDIR        = $(TCLDIR:/=\)
+!if exist("$(_TCLDIR)\include\tcl.h") # Case 2(c) with TCLDIR defined
+TCLINSTALL     = 1
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+!elseif exist("$(_TCLDIR)\generic\tcl.h") # Case 2(d) with TCLDIR defined
+TCLINSTALL     = 0
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+!endif
+
+!else  #  # Case 2(c) for extensions with TCLDIR undefined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tcl.h") && !$(NEED_TCL_SOURCE)
+
+TCLINSTALL     = 1
+TCLDIR          = $(_INSTALLDIR)\..
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TCLDIR                = $(_INSTALLDIR)\..
+_TCL_H          = $(_TCLDIR)\include\tcl.h
+
+!else # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!if [echo _TCLDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]
+!error *** Could not locate Tcl source directory.
+!endif
+!include nmakehlp.out
+TCLINSTALL      = 0
+TCLDIR         = $(_TCLDIR)
+_TCL_H          = $(_TCLDIR)\generic\tcl.h
+
+!endif # exist(...) && ! $(NEED_TCL_SOURCE)
+
+!endif # TCLDIR
+
+!ifndef _TCL_H
+MSG =^
+Failed to find tcl.h. The TCLDIR macro is set incorrectly or is not set and default path does not contain tcl.h.
+!error $(MSG)
+!endif
+
+# Now do the same to locate Tk headers and libs if project requires Tk
+!if $(NEED_TK)
+
+!if "$(TKDIR)" != ""
+
+_TKDIR = $(TKDIR:/=\)
+!if exist("$(_TKDIR)\include\tk.h")
+TKINSTALL      = 1
+_TK_H          = $(_TKDIR)\include\tk.h
+!elseif exist("$(_TKDIR)\generic\tk.h")
+TKINSTALL      = 0
+_TK_H          = $(_TKDIR)\generic\tk.h
+!endif
+
+!else # TKDIR not defined
+
+# Need to locate Tcl depending on whether it needs Tcl source or not.
+# If we don't, check the INSTALLDIR for an installed Tcl first
+
+!if exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+TKINSTALL      = 1
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions
+# later so the \.. accounts for the /lib
+_TKDIR         = $(_INSTALLDIR)\..
+_TK_H          = $(_TKDIR)\include\tk.h
+TKDIR          = $(_TKDIR)
+
+!else # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!if [echo _TKDIR = \> nmakehlp.out] \
+   || [nmakehlp -L generic\tk.h >> nmakehlp.out]
+!error *** Could not locate Tk source directory.
+!endif
+!include nmakehlp.out
+TKINSTALL      = 0
+TKDIR          = $(_TKDIR)
+_TK_H          = $(_TKDIR)\generic\tk.h
+
+!endif # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)
+
+!endif # TKDIR
+
+!ifndef _TK_H
+MSG =^
+Failed to find tk.h. The TKDIR macro is set incorrectly or is not set and default path does not contain tk.h.
+!error $(MSG)
+!endif
+
+!endif # NEED_TK
+
+!if $(NEED_TCL_SOURCE) && $(TCLINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tcl.^
+*** Please set the TCLDIR macro to point to the Tcl sources.
+!error $(MSG)
+!endif
+
+!if $(NEED_TK_SOURCE)
+!if $(TKINSTALL)
+MSG = ^
+*** Warning: This extension requires the source distribution of Tk.^
+*** Please set the TKDIR macro to point to the Tk sources.
+!error $(MSG)
+!endif
+!endif
+
+
+# If INSTALLDIR set to tcl installation root dir then reset to the
+# lib dir for installing extensions 
+!if exist("$(_INSTALLDIR)\include\tcl.h")
+_INSTALLDIR=$(_INSTALLDIR)\lib
+!endif
+
+# END Case 2(c) or (d) - Building an extension
+!endif # if $(DOING_TCL)
+
+################################################################
+# 3. Determine compiler version and architecture
+# In this section, we figure out the compiler version and the
+# architecture for which we are building. This sets the
+# following macros:
+# VCVERSION - the internal compiler version as 1200, 1400, 1910 etc.
+#     This is also printed by the compiler in dotted form 19.10 etc.
+# VCVER - the "marketing version", for example Visual C++ 6 for internal
+#     compiler version 1200. This is kept only for legacy reasons as it
+#     does not make sense for recent Microsoft compilers. Only used for
+#     output directory names.
+# ARCH - set to IX86 or AMD64 depending on 32- or 64-bit target
+# NATIVE_ARCH - set to IX86 or AMD64 for the host machine
+# MACHINE - same as $(ARCH) - legacy
+# _VC_MANIFEST_EMBED_{DLL,EXE} - commands for embedding a manifest if needed
+# CFG_ENCODING - set to an character encoding.
+#   TBD - this is passed to compiler as TCL_CFGVAL_ENCODING but can't
+#   see where it is used
+
+cc32           = $(CC)   # built-in default.
+link32         = link
+lib32          = lib
+rc32           = $(RC)   # built-in default.
+
+#----------------------------------------------------------------
+# Figure out the compiler architecture and version by writing
+# the C macros to a file, preprocessing them with the C
+# preprocessor and reading back the created file
+
+_HASH=^#
+_VC_MANIFEST_EMBED_EXE=
+_VC_MANIFEST_EMBED_DLL=
+VCVER=0
+!if ![echo VCVERSION=_MSC_VER > vercl.x] \
+    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
+    && ![echo ARCH=IX86 >> vercl.x] \
+    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
+    && ![echo ARCH=AMD64 >> vercl.x] \
+    && ![echo $(_HASH)endif >> vercl.x] \
+    && ![$(cc32) -nologo -TC -P vercl.x 2>NUL]
+!include vercl.i
+!if $(VCVERSION) < 1900
+!if ![echo VCVER= ^\> vercl.vc] \
+    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
+!include vercl.vc
+!endif
+!else
+# The simple calculation above does not apply to new Visual Studio releases
+# Keep the compiler version in its native form.
+VCVER = $(VCVERSION)
+!endif
+!endif
+
+!if ![del 2>NUL /q/f vercl.x vercl.i vercl.vc]
+!endif
+
+#----------------------------------------------------------------
+# The MACHINE macro is used by legacy makefiles so set it as well
+!ifdef MACHINE
+!if "$(MACHINE)" == "x86"
+!undef MACHINE
+MACHINE = IX86
+!elseif "$(MACHINE)" == "x64"
+!undef MACHINE
+MACHINE = AMD64
+!endif
+!if "$(MACHINE)" != "$(ARCH)"
+!error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH).
+!endif
+!else
+MACHINE=$(ARCH)
+!endif
+
+#------------------------------------------------------------
+# Figure out the *host* architecture by reading the registry
+
+!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]
+NATIVE_ARCH=IX86
+!else
+NATIVE_ARCH=AMD64
+!endif
+
+# Since MSVC8 we must deal with manifest resources.
+!if $(VCVERSION) >= 1400
+_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1
+_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2
+!endif
+
+!ifndef CFG_ENCODING
+CFG_ENCODING   = \"cp1252\"
+!endif
+
+################################################################
+# 4. Build the nmakehlp program
+# This is a helper app we need to overcome nmake's limiting
+# environment. We will call out to it to get various bits of
+# information about supported compiler options etc.
+#
+# Tcl itself will always use the nmakehlp.c program which is
+# in its own source. This is the "master" copy and kept updated.
+#
+# Extensions built against an installed Tcl will use the installed
+# copy of Tcl's nmakehlp.c if there is one and their own version
+# otherwise. In the latter case, they would also be using their own
+# rules.vc. Note that older versions of Tcl do not install nmakehlp.c
+# or rules.vc.
+#
+# Extensions built against Tcl sources will use the one from the Tcl source.
+#
+# When building an extension using a sufficiently new version of Tcl,
+# rules-ext.vc will define NMAKEHLPC appropriately to point to the
+# copy of nmakehlp.c to be used.
+
+!ifndef NMAKEHLPC
+# Default to the one in the current directory (the extension's own nmakehlp.c)
+NMAKEHLPC = nmakehlp.c
+
+!if !$(DOING_TCL)
+!if $(TCLINSTALL)
+!if exist("$(_TCLDIR)\lib\nmake\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\lib\nmake\nmakehlp.c
+!endif
+!else # ! $(TCLINSTALL)
+!if exist("$(_TCLDIR)\win\nmakehlp.c")
+NMAKEHLPC = $(_TCLDIR)\win\nmakehlp.c
+!endif
+!endif # $(TCLINSTALL)
+!endif # !$(DOING_TCL)
+
+!endif # NMAKEHLPC
+
+# We always build nmakehlp even if it exists since we do not know
+# what source it was built from.
+!message *** Using $(NMAKEHLPC)
+!if [$(cc32) -nologo "$(NMAKEHLPC)" -link -subsystem:console > nul]
+!endif
+
+################################################################
+# 5. Test for compiler features
+# Visual C++ compiler options have changed over the years. Check
+# which options are supported by the compiler in use.
+#
+# The following macros are set:
+# OPTIMIZATIONS - the compiler flags to be used for optimized builds
+# DEBUGFLAGS - the compiler flags to be used for debug builds
+# LINKERFLAGS - Flags passed to the linker 
+#
+# Note that these are the compiler settings *available*, not those
+# that will be *used*. The latter depends on the OPTS macro settings
+# which we have not yet parsed.
+#
+# Also note that some of the flags in OPTIMIZATIONS are not really
+# related to optimization. They are placed there only for legacy reasons
+# as some extensions expect them to be included in that macro.
+
+# -Op improves float consistency. Note only needed for older compilers
+# Newer compilers do not need or support this option.
+!if [nmakehlp -c -Op]
+FPOPTS  = -Op
+!endif
+
+# Strict floating point semantics - present in newer compilers in lieu of -Op
+!if [nmakehlp -c -fp:strict]
+FPOPTS  = $(FPOPTS) -fp:strict
+!endif
+
+!if "$(MACHINE)" == "IX86"
+### test for pentium errata
+!if [nmakehlp -c -QI0f]
+!message *** Compiler has 'Pentium 0x0f fix'
+FPOPTS  = $(FPOPTS) -QI0f
+!else
+!message *** Compiler does not have 'Pentium 0x0f fix'
+!endif
+!endif
+
+### test for optimizations
+# /O2 optimization includes /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy as per
+# documentation. Note we do NOT want /Gs as that inserts a _chkstk
+# stack probe at *every* function entry, not just those with more than
+# a page of stack allocation resulting in a performance hit.  However,
+# /O2 documentation is misleading as its stack probes are simply the
+# default page size locals allocation probes and not what is implied
+# by an explicit /Gs option.
+
+OPTIMIZATIONS = $(FPOPTS)
+
+!if [nmakehlp -c -O2]
+!message *** Compiler has 'Optimizations'
+OPTIMIZING = 1
+OPTIMIZATIONS   = $(OPTIMIZATIONS) -O2
+!else
+# Legacy, really. All modern compilers support this
+!message *** Compiler does not have 'Optimizations'
+OPTIMIZING = 0
+!endif
+
+# Checks for buffer overflows in local arrays
+!if [nmakehlp -c -GS]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS
+!endif
+
+# Link time optimization. Note that this option (potentially) makes
+# generated libraries only usable by the specific VC++ version that
+# created it. Requires /LTCG linker option
+!if [nmakehlp -c -GL]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL
+CC_GL_OPT_ENABLED = 1
+!else
+# In newer compilers -GL and -YX are incompatible.
+!if [nmakehlp -c -YX]
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX
+!endif
+!endif # [nmakehlp -c -GL]
+
+DEBUGFLAGS     = $(FPOPTS)
+
+# Run time error checks. Not available or valid in a release, non-debug build
+# RTC is for modern compilers, -GZ is legacy
+!if [nmakehlp -c -RTC1]
+DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1
+!elseif [nmakehlp -c -GZ]
+DEBUGFLAGS     = $(DEBUGFLAGS) -GZ
+!endif
+
+#----------------------------------------------------------------
+# Linker flags
+
+# LINKER_TESTFLAGS are for internal use when we call nmakehlp to test
+# if the linker supports a specific option. Without these flags link will
+# return "LNK1561: entry point must be defined" error compiling from VS-IDE:
+# They are not passed through to the actual application / extension
+# link rules.
+!ifndef LINKER_TESTFLAGS
+LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmakehlp.out
+!endif
+
+LINKERFLAGS     =
+
+# If compiler has enabled link time optimization, linker must too with -ltcg
+!ifdef CC_GL_OPT_ENABLED
+!if [nmakehlp -l -ltcg $(LINKER_TESTFLAGS)]
+LINKERFLAGS     = $(LINKERFLAGS) -ltcg
+!endif
+!endif
+
+########################################################################
+# 6. Parse the OPTS macro to work out the requested build configuration.
+# Based on this, we will construct the actual switches to be passed to the
+# compiler and linker using the macros defined in the previous section.
+# The following macros are defined by this section based on OPTS
+# STATIC_BUILD - 0 -> Tcl is to be built as a shared library
+#                1 -> build as a static library and shell
+# TCL_THREADS - legacy but always 1 on Windows since winsock requires it.
+# DEBUG - 1 -> debug build, 0 -> release builds
+# SYMBOLS - 1 -> generate PDB's, 0 -> no PDB's
+# PROFILE - 1 -> generate profiling info, 0 -> no profiling
+# PGO     - 1 -> profile based optimization, 0 -> no
+# MSVCRT  - 1 -> link to dynamic C runtime even when building static Tcl build
+#           0 -> link to static C runtime for static Tcl build.
+#           Does not impact shared Tcl builds (STATIC_BUILD == 0)
+# TCL_USE_STATIC_PACKAGES - 1 -> statically link the registry and dde extensions
+#           in the Tcl shell. 0 -> keep them as shared libraries
+#           Does not impact shared Tcl builds.
+# USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation.
+#           0 -> Use the non-thread allocator.
+# UNCHECKED - 1 -> when doing a debug build with symbols, use the release
+#           C runtime, 0 -> use the debug C runtime.
+# USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking
+# CONFIG_CHECK - 1 -> check current build configuration against Tcl
+#           configuration (ignored for Tcl itself)
+# Further, LINKERFLAGS are modified based on above.
+
+# Default values for all the above
+STATIC_BUILD   = 0
+TCL_THREADS    = 1
+DEBUG          = 0
+SYMBOLS                = 0
+PROFILE                = 0
+PGO            = 0
+MSVCRT         = 1
+TCL_USE_STATIC_PACKAGES        = 0
+USE_THREAD_ALLOC = 1
+UNCHECKED      = 0
+CONFIG_CHECK    = 1
+!if $(DOING_TCL)
+USE_STUBS       = 0
+!else
+USE_STUBS       = 1
+!endif
+
+# If OPTS is not empty AND does not contain "none" which turns off all OPTS
+# set the above macros based on OPTS content
+!if "$(OPTS)" != "" && ![nmakehlp -f "$(OPTS)" "none"]
+
+# OPTS are specified, parse them
+
+!if [nmakehlp -f $(OPTS) "static"]
+!message *** Doing static
+STATIC_BUILD   = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "nostubs"]
+!message *** Not using stubs
+USE_STUBS      = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nomsvcrt"]
+!message *** Doing nomsvcrt
+MSVCRT         = 0
+!else
+!if [nmakehlp -f $(OPTS) "msvcrt"]
+!message *** Doing msvcrt
+MSVCRT         = 1
+!else
+!if !$(STATIC_BUILD)
+MSVCRT         = 1
+!else
+MSVCRT         = 0
+!endif
+!endif
+!endif # [nmakehlp -f $(OPTS) "nomsvcrt"]
+
+!if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD)
+!message *** Doing staticpkg
+TCL_USE_STATIC_PACKAGES        = 1
+!else
+TCL_USE_STATIC_PACKAGES        = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "nothreads"]
+!message *** Compile explicitly for non-threaded tcl
+TCL_THREADS    = 0
+USE_THREAD_ALLOC= 0
+!else
+TCL_THREADS    = 1
+USE_THREAD_ALLOC= 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "symbols"]
+!message *** Doing symbols
+DEBUG          = 1
+!else
+DEBUG          = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pdbs"]
+!message *** Doing pdbs
+SYMBOLS                = 1
+!else
+SYMBOLS                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "profile"]
+!message *** Doing profile
+PROFILE                = 1
+!else
+PROFILE                = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "pgi"]
+!message *** Doing profile guided optimization instrumentation
+PGO            = 1
+!elseif [nmakehlp -f $(OPTS) "pgo"]
+!message *** Doing profile guided optimization
+PGO            = 2
+!else
+PGO            = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "loimpact"]
+!message *** Warning: ignoring option "loimpact" - deprecated on modern Windows.
+!endif
+
+# TBD - should get rid of this option
+!if [nmakehlp -f $(OPTS) "thrdalloc"]
+!message *** Doing thrdalloc
+USE_THREAD_ALLOC = 1
+!endif
+
+!if [nmakehlp -f $(OPTS) "tclalloc"]
+USE_THREAD_ALLOC = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "unchecked"]
+!message *** Doing unchecked
+UNCHECKED = 1
+!else
+UNCHECKED = 0
+!endif
+
+!if [nmakehlp -f $(OPTS) "noconfigcheck"]
+CONFIG_CHECK = 1
+!else
+CONFIG_CHECK = 0
+!endif
+
+!endif # "$(OPTS)" != ""  && ... parsing of OPTS
+
+# Set linker flags based on above
+
+!if $(PGO) > 1
+!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!elseif $(PGO) > 0
+!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)]
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument
+!else
+MSG=^
+This compiler does not support profile guided optimization.
+!error $(MSG)
+!endif
+!endif
+
+################################################################
+# 7. Parse the STATS macro to configure code instrumentation
+# The following macros are set by this section:
+# TCL_MEM_DEBUG - 1 -> enables memory allocation instrumentation
+#                 0 -> disables
+# TCL_COMPILE_DEBUG - 1 -> enables byte compiler logging
+#                     0 -> disables
+
+# Default both are off
+TCL_MEM_DEBUG      = 0
+TCL_COMPILE_DEBUG   = 0
+
+!if "$(STATS)" != "" && ![nmakehlp -f "$(STATS)" "none"]
+
+!if [nmakehlp -f $(STATS) "memdbg"]
+!message *** Doing memdbg
+TCL_MEM_DEBUG      = 1
+!else
+TCL_MEM_DEBUG      = 0
+!endif
+
+!if [nmakehlp -f $(STATS) "compdbg"]
+!message *** Doing compdbg
+TCL_COMPILE_DEBUG   = 1
+!else
+TCL_COMPILE_DEBUG   = 0
+!endif
+
+!endif
+
+####################################################################
+# 8. Parse the CHECKS macro to configure additional compiler checks
+# The following macros are set by this section:
+# WARNINGS - compiler switches that control the warnings level
+# TCL_NO_DEPRECATED - 1 -> disable support for deprecated functions
+#                     0 -> enable deprecated functions
+
+# Defaults - Permit deprecated functions and warning level 3
+TCL_NO_DEPRECATED          = 0
+WARNINGS                   = -W3
+
+!if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"]
+
+!if [nmakehlp -f $(CHECKS) "nodep"]
+!message *** Doing nodep check
+TCL_NO_DEPRECATED          = 1
+!endif
+
+!if [nmakehlp -f $(CHECKS) "fullwarn"]
+!message *** Doing full warnings check
+WARNINGS                   = -W4
+!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)]
+LINKERFLAGS                = $(LINKERFLAGS) -warn:3
+!endif
+!endif
+
+!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]
+!message *** Doing 64bit portability warnings
+WARNINGS                   = $(WARNINGS) -Wp64
+!endif
+
+!endif
+
+################################################################
+# 9. Extract various version numbers
+# For Tcl and Tk, version numbers are extracted from tcl.h and tk.h
+# respectively. For extensions, versions are extracted from the
+# configure.in or configure.ac from the TEA configuration if it
+# exists, and unset otherwise.
+# Sets the following macros:
+# TCL_MAJOR_VERSION
+# TCL_MINOR_VERSION
+# TCL_PATCH_LEVEL
+# TCL_VERSION
+# TK_MAJOR_VERSION
+# TK_MINOR_VERSION
+# TK_PATCH_LEVEL
+# TK_VERSION
+# DOTVERSION - set as (for example) 2.5
+# VERSION - set as (for example 25)
+#--------------------------------------------------------------
+
+!if [echo REM = This file is generated from rules.vc > versions.vc]
+!endif
+!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]
+!endif
+
+!if defined(_TK_H)
+!if [echo TK_MAJOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_MINOR_VERSION = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]
+!endif
+!if [echo TK_PATCH_LEVEL = \>> versions.vc] \
+   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]
+!endif
+!endif # _TK_H
+
+!include versions.vc
+
+TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)
+TCL_DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!if defined(_TK_H)
+TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)
+TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+
+# Set DOTVERSION and VERSION
+!if $(DOING_TCL)
+
+DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+VERSION = $(TCL_VERSION)
+
+!elseif $(DOING_TK)
+
+DOTVERSION = $(TK_DOTVERSION)
+VERSION = $(TK_VERSION)
+
+!else # Doing a non-Tk extension
+
+# If parent makefile has not defined DOTVERSION, try to get it from TEA
+# first from a configure.in file, and then from configure.ac
+!ifndef DOTVERSION
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.in ^[$(PROJECT)^] >> versions.vc]
+!if [echo DOTVERSION = \> versions.vc] \
+   || [nmakehlp -V $(ROOT)\configure.ac ^[$(PROJECT)^] >> versions.vc]
+!error *** Could not figure out extension version. Please define DOTVERSION in parent makefile before including rules.vc.
+!endif
+!endif
+!include versions.vc
+!endif # DOTVERSION
+VERSION         = $(DOTVERSION:.=)
+
+!endif # $(DOING_TCL) ... etc.
+
+################################################################
+# 10. Construct output directory and file paths
+# Figure-out how to name our intermediate and output directories.
+# In order to avoid inadvertent mixing of object files built using
+# different compilers, build configurations etc.,
+#
+# Naming convention (suffixes):
+#   t = full thread support.
+#   s = static library (as opposed to an import library)
+#   g = linked to the debug enabled C run-time.
+#   x = special static build when it links to the dynamic C run-time.
+#
+# The following macros are set in this section:
+# SUFX - the suffix to use for binaries based on above naming convention
+# BUILDDIRTOP - the toplevel default output directory
+#      is of the form {Release,Debug}[_AMD64][_COMPILERVERSION]
+# TMP_DIR - directory where object files are created
+# OUT_DIR - directory where output executables are created
+# Both TMP_DIR and OUT_DIR are defaulted only if not defined by the
+# parent makefile (or command line). The default values are
+# based on BUILDDIRTOP.
+# STUBPREFIX - name of the stubs library for this project
+# PRJIMPLIB - output path of the generated project import library
+# PRJLIBNAME - name of generated project library
+# PRJLIB     - output path of generated project library
+# PRJSTUBLIBNAME - name of the generated project stubs library
+# PRJSTUBLIB - output path of the generated project stubs library
+# RESFILE - output resource file (only if not static build)
+
+SUFX       = tsgx
+
+!if $(DEBUG)
+BUILDDIRTOP = Debug
+!else
+BUILDDIRTOP = Release
+!endif
+
+!if "$(MACHINE)" != "IX86"
+BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)
+!endif
+!if $(VCVER) > 6
+BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)
+!endif
+
+!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)
+SUFX       = $(SUFX:g=)
+!endif
+
+TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
+
+!if !$(STATIC_BUILD)
+TMP_DIRFULL = $(TMP_DIRFULL:Static=)
+SUFX       = $(SUFX:s=)
+EXT        = dll
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!else
+TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
+EXT        = lib
+!if !$(MSVCRT)
+TMP_DIRFULL = $(TMP_DIRFULL:X=)
+SUFX       = $(SUFX:x=)
+!endif
+!endif
+
+!if !$(TCL_THREADS)
+TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)
+SUFX       = $(SUFX:t=)
+!endif
+
+!ifndef TMP_DIR
+TMP_DIR            = $(TMP_DIRFULL)
+!ifndef OUT_DIR
+OUT_DIR            = .\$(BUILDDIRTOP)
+!endif
+!else
+!ifndef OUT_DIR
+OUT_DIR            = $(TMP_DIR)
+!endif
+!endif
+
+# Relative paths -> absolute
+!if [echo OUT_DIR = \> nmakehlp.out] \
+   || [nmakehlp -Q "$(OUT_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path OUT_DIR=$(OUT_DIR)
+!endif
+!if [echo TMP_DIR = \>> nmakehlp.out] \
+   || [nmakehlp -Q "$(TMP_DIR)" >> nmakehlp.out]
+!error *** Could not fully qualify path TMP_DIR=$(TMP_DIR)
+!endif
+!include nmakehlp.out
+
+# The name of the stubs library for the project being built
+STUBPREFIX      = $(PROJECT)stub
+
+# Set up paths to various Tcl executables and libraries needed by extensions
+!if $(DOING_TCL)
+
+TCLSHNAME       = $(PROJECT)sh$(TCL_VERSION)$(SUFX).exe
+TCLSH          = $(OUT_DIR)\$(TCLSHNAME)
+TCLIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+TCLLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+TCLLIB         = $(OUT_DIR)\$(TCLLIBNAME)
+
+TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+TCLSTUBLIB     = $(OUT_DIR)\$(TCLSTUBLIBNAME)
+TCL_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+
+TCLSH          = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist("$(TCLSH)") && $(TCL_THREADS)
+TCLSH           = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\lib
+TCLREGLIB      = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target
+TCL_INCLUDES    = -I"$(_TCLDIR)\include"
+
+!else # Building against Tcl sources
+
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe
+!if !exist($(TCLSH)) && $(TCL_THREADS)
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe
+!endif
+TCLSTUBLIB     = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib
+TCLIMPLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib
+TCL_LIBRARY    = $(_TCLDIR)\library
+TCLREGLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib
+TCLDDELIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib
+TCLTOOLSDIR    = $(_TCLDIR)\tools
+TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"
+
+!endif # TCLINSTALL
+
+tcllibs = "$(TCLSTUBLIB)" "$(TCLIMPLIB)"
+
+!endif # $(DOING_TCL)
+
+# We need a tclsh that will run on the host machine as part of the build.
+# IX86 runs on all architectures.
+!ifndef TCLSH_NATIVE
+!if "$(MACHINE)" == "IX86" || "$(MACHINE)" == "$(NATIVE_ARCH)"
+TCLSH_NATIVE   = $(TCLSH)
+!else
+!error You must explicitly set TCLSH_NATIVE for cross-compilation
+!endif
+!endif
+
+# Do the same for Tk and Tk extensions that require the Tk libraries
+!if $(DOING_TK) || $(NEED_TK)
+WISHNAMEPREFIX = wish
+WISHNAME = $(WISHNAMEPREFIX)$(TK_VERSION)$(SUFX).exe
+TKLIBNAME      = $(PROJECT)$(TK_VERSION)$(SUFX).$(EXT)
+TKSTUBLIBNAME  = tkstub$(TK_VERSION).lib
+TKIMPLIBNAME   = tk$(TK_VERSION)$(SUFX).lib
+
+!if $(DOING_TK)
+WISH           = $(OUT_DIR)\$(WISHNAME)
+TKSTUBLIB      = $(OUT_DIR)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(OUT_DIR)\$(TKIMPLIBNAME)
+TKLIB          = $(OUT_DIR)\$(TKLIBNAME)
+TK_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"
+
+!else # effectively NEED_TK
+
+!if $(TKINSTALL) # Building against installed Tk
+WISH           = $(_TKDIR)\bin\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\lib\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\lib\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\include"
+!else # Building against Tk sources
+WISH           = $(_TKDIR)\win\$(BUILDDIRTOP)\$(WISHNAME)
+TKSTUBLIB      = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKSTUBLIBNAME)
+TKIMPLIB       = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKIMPLIBNAME)
+TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
+!endif # TKINSTALL
+tklibs = "$(TKSTUBLIB)" "$(TKIMPLIB)"
+
+!endif # $(DOING_TK)
+!endif # $(DOING_TK) || $(NEED_TK)
+
+# Various output paths
+PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
+PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
+PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)
+
+PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
+PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)
+
+# If extension parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+!if !$(DOING_TCL) && !$(DOING_TK) && !$(STATIC_BUILD)
+!ifdef RCFILE
+RESFILE = $(TMP_DIR)\$(RCFILE:.rc=.res)
+!else
+RESFILE = $(TMP_DIR)\$(PROJECT).res
+!endif
+!endif
+
+###################################################################
+# 11. Construct the paths for the installation directories
+# The following macros get defined in this section:
+# LIB_INSTALL_DIR - where libraries should be installed
+# BIN_INSTALL_DIR - where the executables should be installed
+# DOC_INSTALL_DIR - where documentation should be installed
+# SCRIPT_INSTALL_DIR - where scripts should be installed
+# INCLUDE_INSTALL_DIR - where C include files should be installed
+# DEMO_INSTALL_DIR - where demos should be installed
+# PRJ_INSTALL_DIR - where package will be installed (not set for tcl and tk)
+
+!if $(DOING_TCL) || $(DOING_TK)
+LIB_INSTALL_DIR                = $(_INSTALLDIR)\lib
+BIN_INSTALL_DIR                = $(_INSTALLDIR)\bin
+DOC_INSTALL_DIR                = $(_INSTALLDIR)\doc
+!if $(DOING_TCL)
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)
+!else # DOING_TK
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)
+!endif
+DEMO_INSTALL_DIR       = $(SCRIPT_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\include
+
+!else # extension other than Tk
+
+PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)
+LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)
+SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)
+DEMO_INSTALL_DIR       = $(PRJ_INSTALL_DIR)\demos
+INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include
+
+!endif
+
+###################################################################
+# 12. Set up actual options to be passed to the compiler and linker
+# Now we have all the information we need, set up the actual flags and
+# options that we will pass to the compiler and linker. The main
+# makefile should use these in combination with whatever other flags
+# and switches are specific to it.
+# The following macros are defined, names are for historical compatibility:
+# OPTDEFINES - /Dxxx C macro flags based on user-specified OPTS
+# COMPILERFLAGS - /Dxxx C macro flags independent of any configuration opttions
+# crt - Compiler switch that selects the appropriate C runtime
+# cdebug - Compiler switches related to debug AND optimizations
+# cwarn - Compiler switches that set warning levels
+# cflags - complete compiler switches (subsumes cdebug and cwarn)
+# ldebug - Linker switches controlling debug information and optimization
+# lflags - complete linker switches (subsumes ldebug) except subsystem type
+# dlllflags - complete linker switches to build DLLs (subsumes lflags)
+# conlflags - complete linker switches for console program (subsumes lflags)
+# guilflags - complete linker switches for GUI program (subsumes lflags)
+# baselibs - minimum Windows libraries required. Parent makefile can
+#    define PRJ_LIBS before including rules.rc if additional libs are needed
+
+OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS
+
+!if $(TCL_MEM_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG
+!endif
+!if $(TCL_COMPILE_DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
+!endif
+!if $(TCL_THREADS)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1
+!if $(USE_THREAD_ALLOC)
+OPTDEFINES     = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1
+!endif
+!endif
+!if $(STATIC_BUILD)
+OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD
+!endif
+!if $(TCL_NO_DEPRECATED)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED
+!endif
+
+!if $(USE_STUBS)
+# Note we do not define USE_TCL_STUBS even when building tk since some
+# test targets in tk do not use stubs
+!if ! $(DOING_TCL)
+USE_STUBS_DEFS  = -DUSE_TCL_STUBS -DUSE_TCLOO_STUBS
+!if $(NEED_TK)
+USE_STUBS_DEFS  = $(USE_STUBS_DEFS) -DUSE_TK_STUBS
+!endif
+!endif
+!endif # USE_STUBS
+
+!if !$(DEBUG)
+OPTDEFINES     = $(OPTDEFINES) -DNDEBUG
+!if $(OPTIMIZING)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
+!endif
+!endif
+!if $(PROFILE)
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED
+!endif
+!if "$(MACHINE)" == "AMD64"
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT
+!endif
+!if $(VCVERSION) < 1300
+OPTDEFINES     = $(OPTDEFINES) -DNO_STRTOI64
+!endif
+
+# _ATL_XP_TARGETING - Newer SDK's need this to build for XP
+COMPILERFLAGS  = /D_ATL_XP_TARGETING
+
+# Following is primarily for the benefit of extensions. Tcl 8.5 builds
+# Tcl without /DUNICODE, while 8.6 builds with it defined. When building
+# an extension, it is advisable (but not mandated) to use the same Windows
+# API as the Tcl build. This is accordingly defaulted below. A particular
+# extension can override this by pre-definining USE_WIDECHAR_API.
+!ifndef USE_WIDECHAR_API
+!if $(TCL_VERSION) > 85
+USE_WIDECHAR_API = 1
+!else
+USE_WIDECHAR_API = 0
+!endif
+!endif
+
+!if $(USE_WIDECHAR_API)
+COMPILERFLAGS = $(COMPILERFLAGS) /DUNICODE /D_UNICODE 
+!endif
+
+# Like the TEA system only set this non empty for non-Tk extensions
+# Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME
+# so we pass both
+!if !$(DOING_TCL) && !$(DOING_TK)
+PKGNAMEFLAGS = -DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_TCLNAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \
+               -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \
+               -DMODULE_SCOPE=extern 
+!endif
+
+# crt picks the C run time based on selected OPTS
+!if $(MSVCRT)
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MDd
+!else
+crt = -MD
+!endif
+!else
+!if $(DEBUG) && !$(UNCHECKED)
+crt = -MTd
+!else
+crt = -MT
+!endif
+!endif
+
+# cdebug includes compiler options for debugging as well as optimization.
+!if $(DEBUG)
+
+# In debugging mode, optimizations need to be disabled
+cdebug = -Zi -Od $(DEBUGFLAGS)
+
+!else
+
+cdebug = $(OPTIMIZATIONS)
+!if $(SYMBOLS)
+cdebug = $(cdebug) -Zi
+!endif
+
+!endif # $(DEBUG)
+
+# cwarn includes default warning levels.
+cwarn = $(WARNINGS)
+
+!if "$(MACHINE)" == "AMD64"
+# Disable pointer<->int warnings related to cast between different sizes
+# There are a gadzillion of these due to use of ClientData and
+# clutter up compiler
+# output increasing chance of a real warning getting lost. So disable them.
+# Eventually some day, Tcl will be 64-bit clean.
+cwarn = $(cwarn) -wd4311 -wd4312
+!endif
+
+### Common compiler options that are architecture specific
+!if "$(MACHINE)" == "ARM"
+carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
+!else
+carch =
+!endif
+
+!if $(DEBUG)
+# Turn warnings into errors
+cwarn = $(cwarn) -WX
+!endif
+
+INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES)
+!if !$(DOING_TCL) && !$(DOING_TK)
+INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WINDIR)" -I"$(COMPATDIR)"
+!endif
+
+# These flags are defined roughly in the order of the pre-reform
+# rules.vc/makefile.vc to help visually compare that the pre- and
+# post-reform build logs
+
+# cflags contains generic flags used for building practically all object files
+cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\ $(cdebug)
+
+# appcflags contains $(cflags) and flags for building the application
+# object files (e.g. tclsh, or wish) pkgcflags contains $(cflags) plus
+# flags used for building shared object files The two differ in the
+# BUILD_$(PROJECT) macro which should be defined only for the shared
+# library *implementation* and not for its caller interface
+
+appcflags = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES) $(USE_STUBS_DEFS)
+appcflags_nostubs = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES)
+pkgcflags = $(appcflags) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+pkgcflags_nostubs = $(appcflags_nostubs) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)
+
+# stubscflags contains $(cflags) plus flags used for building a stubs
+# library for the package.  Note: -DSTATIC_BUILD is defined in
+# $(OPTDEFINES) only if the OPTS configuration indicates a static
+# library. However the stubs library is ALWAYS static hence included
+# here irrespective of the OPTS setting.
+#
+# TBD - tclvfs has a comment that stubs libs should not be compiled with -GL
+# without stating why. Tcl itself compiled stubs libs with this flag.
+# so we do not remove it from cflags. -GL may prevent extensions
+# compiled with one VC version to fail to link against stubs library
+# compiled with another VC version. Check for this and fix accordingly.
+stubscflags = $(cflags) $(PKGNAMEFLAGS) $(PRJ_DEFINES) $(OPTDEFINES) -Zl -DSTATIC_BUILD $(INCLUDES)
+
+# Link flags 
+
+!if $(DEBUG)
+ldebug = -debug -debugtype:cv
+!else
+ldebug = -release -opt:ref -opt:icf,3
+!if $(SYMBOLS)
+ldebug = $(ldebug) -debug -debugtype:cv
+!endif
+!endif
+
+# Note: Profiling is currently only possible with the Visual Studio Enterprise
+!if $(PROFILE)
+ldebug= $(ldebug) -profile
+!endif
+
+### Declarations common to all linker versions 
+lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+lflags = $(lflags) -nodefaultlib:libucrt.lib
+!endif
+
+# Old linkers (Visual C++ 6 in particular) will link for fast loading
+# on Win98. Since we do not support Win98 any more, we specify nowin98
+# as recommended for NT and later. However, this is only required by
+# IX86 on older compilers and only needed if we are not doing a static build.
+
+!if "$(MACHINE)" == "IX86" && !$(STATIC_BUILD)
+!if [nmakehlp -l -opt:nowin98 $(LINKER_TESTFLAGS)]
+# Align sections for PE size savings.
+lflags = $(lflags) -opt:nowin98
+!endif
+!endif
+
+dlllflags = $(lflags) -dll
+conlflags = $(lflags) -subsystem:console
+guilflags = $(lflags) -subsystem:windows
+
+# Libraries that are required for every image.
+# Extensions should define any additional libraries with $(PRJ_LIBS)
+winlibs   = kernel32.lib advapi32.lib
+
+!if $(NEED_TK)
+winlibs = $(winlibs) gdi32.lib user32.lib uxtheme.lib
+!endif
+
+# Avoid 'unresolved external symbol __security_cookie' errors.
+# c.f. http://support.microsoft.com/?id=894573
+!if "$(MACHINE)" == "AMD64"
+!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500
+winlibs   = $(winlibs) bufferoverflowU.lib
+!endif
+!endif
+
+baselibs = $(winlibs) $(PRJ_LIBS)
+
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900
+baselibs   = $(baselibs) ucrt.lib
+!endif
+
+################################################################
+# 13. Define standard commands, common make targets and implicit rules
+
+CCPKGCMD = $(cc32) $(pkgcflags) -Fo$(TMP_DIR)^\
+CCAPPCMD = $(cc32) $(appcflags) -Fo$(TMP_DIR)^\
+CCSTUBSCMD = $(cc32) $(stubscflags) -Fo$(TMP_DIR)^\
+
+LIBCMD = $(lib32) -nologo $(LINKERFLAGS) -out:$@
+DLLCMD = $(link32) $(dlllflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+
+CONEXECMD = $(link32) $(conlflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+GUIEXECMD = $(link32) $(guilflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)
+RESCMD  = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \
+           $(TCL_INCLUDES) \
+           -DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \
+           -DCOMMAVERSION=$(DOTVERSION:.=,),0 \
+           -DDOTVERSION=\"$(DOTVERSION)\" \
+           -DVERSION=\"$(VERSION)\" \
+           -DSUFX=\"$(SUFX)\" \
+            -DPROJECT=\"$(PROJECT)\" \
+            -DPRJLIBNAME=\"$(PRJLIBNAME)\" 
+
+!ifndef DEFAULT_BUILD_TARGET
+DEFAULT_BUILD_TARGET = $(PROJECT)
+!endif
+
+default-target: $(DEFAULT_BUILD_TARGET)
+
+default-pkgindex:
+       @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \
+           [list load [file join $$dir $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl
+
+default-pkgindex-tea:
+       @if exist $(ROOT)\pkgIndex.tcl.in nmakehlp -s << $(ROOT)\pkgIndex.tcl.in > $(OUT_DIR)\pkgIndex.tcl
+@PACKAGE_VERSION@    $(DOTVERSION)
+@PACKAGE_NAME@       $(PRJ_PACKAGE_TCLNAME)
+@PACKAGE_TCLNAME@    $(PRJ_PACKAGE_TCLNAME)
+@PKG_LIB_FILE@       $(PRJLIBNAME)
+<<
+
+
+default-install: default-install-binaries default-install-libraries
+
+default-install-binaries: $(PRJLIB)
+       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-libraries: $(OUT_DIR)\pkgIndex.tcl
+       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
+       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
+       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
+       @$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)
+
+default-install-stubs:
+       @echo Installing stubs library to '$(SCRIPT_INSTALL_DIR)'
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
+       @$(CPY) $(PRJSTUBLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
+
+default-install-docs-html:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.html" "$(DOCDIR)\*.css" "$(DOCDIR)\*.png") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-docs-n:
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.n") do @$(COPY) %f "$(DOC_INSTALL_DIR)"
+
+default-install-demos:
+       @echo Installing demos to '$(DEMO_INSTALL_DIR)'
+       @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)"
+       @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)"
+
+default-clean:
+       @echo Cleaning $(TMP_DIR)\* ...
+       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)
+       @echo Cleaning $(WINDIR)\nmakehlp.obj, nmakehlp.exe ...
+       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj
+       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe
+       @if exist $(WINDIR)\nmakehlp.out del $(WINDIR)\nmakehlp.out
+       @echo Cleaning $(WINDIR)\nmhlp-out.txt ...
+       @if exist $(WINDIR)\nmhlp-out.txt del $(WINDIR)\nmhlp-out.txt
+       @echo Cleaning $(WINDIR)\_junk.pch ...
+       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch
+       @echo Cleaning $(WINDIR)\vercl.x, vercl.i ...
+       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x
+       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i
+       @echo Cleaning $(WINDIR)\versions.vc, version.vc ...
+       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc
+       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc
+
+default-hose: default-clean
+       @echo Hosing $(OUT_DIR)\* ...
+       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)
+
+# Only for backward compatibility
+default-distclean: default-hose
+
+default-setup:
+       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
+       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
+
+!if "$(TESTPAT)" != ""
+TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
+!endif
+
+default-test: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS)
+
+default-shell: default-setup $(PROJECT)
+       @set TCLLIBPATH=$(OUT_DIR:\=/)
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"
+       $(DEBUGGER) $(TCLSH)
+
+# Generation of Windows version resource 
+!ifdef RCFILE
+
+# Note: don't use $** in below rule because there may be other dependencies
+# and only the "master" rc must be passed to the resource compiler
+$(TMP_DIR)\$(PROJECT).res: $(RCDIR)\$(PROJECT).rc
+       $(RESCMD) $(RCDIR)\$(PROJECT).rc
+
+!else
+
+# If parent makefile has not defined a resource definition file,
+# we will generate one from standard template.
+$(TMP_DIR)\$(PROJECT).res: $(TMP_DIR)\$(PROJECT).rc
+
+$(TMP_DIR)\$(PROJECT).rc:
+       @$(COPY) << $(TMP_DIR)\$(PROJECT).rc
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION   COMMAVERSION
+ PRODUCTVERSION        COMMAVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef DEBUG
+ FILEFLAGS     VS_FF_DEBUG
+#else
+ FILEFLAGS     0x0L
+#endif
+ FILEOS                VOS_NT_WINDOWS32
+ FILETYPE      VFT_DLL
+ FILESUBTYPE   0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "FileDescription",  "Tcl extension " PROJECT
+            VALUE "OriginalFilename", PRJLIBNAME
+            VALUE "FileVersion",      DOTVERSION
+            VALUE "ProductName",      "Package " PROJECT " for Tcl"
+            VALUE "ProductVersion",   DOTVERSION 
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+<<
+
+!endif # ifdef RCFILE
+
+!ifndef DISABLE_IMPLICIT_RULES
+DISABLE_IMPLICIT_RULES = 0
+!endif
+
+!if !$(DISABLE_IMPLICIT_RULES)
+# Implicit rule definitions - only for building library objects. For stubs and
+# main application, the master makefile should define explicit rules.
+
+{$(ROOT)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(WINDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
+       $(CCPKGCMD) @<<
+$<
+<<
+
+{$(RCDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(WINDIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+{$(TMP_DIR)}.rc{$(TMP_DIR)}.res:
+       $(RESCMD) $<
+
+.SUFFIXES:
+.SUFFIXES:.c .rc
+
+!endif
+
+################################################################
+# 14. Sanity check selected options against Tcl build options
+# When building an extension, certain configuration options should
+# match the ones used when Tcl was built. Here we check and
+# warn on a mismatch.
+!if ! $(DOING_TCL)
+
+!if $(TCLINSTALL) # Building against an installed Tcl
+!if exist("$(_TCLDIR)\lib\nmake\tcl.nmake")
+TCLNMAKECONFIG = "$(_TCLDIR)\lib\nmake\tcl.nmake"
+!endif
+!else # ! $(TCLINSTALL) - building against Tcl source
+!if exist("$(OUT_DIR)\tcl.nmake")
+TCLNMAKECONFIG = "$(OUT_DIR)\tcl.nmake"
+!endif
+!endif # TCLINSTALL
+
+!if $(CONFIG_CHECK)
+!ifdef TCLNMAKECONFIG
+!include $(TCLNMAKECONFIG)
+
+!if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)"
+!error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)).
+!endif
+!if defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC)
+!message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)).
+!endif
+!if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG)
+!message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)).
+!endif
+!endif
+
+!endif # TCLNMAKECONFIG
+
+!endif # ! $(DOING_TCL)
+
+
+#----------------------------------------------------------
+# Display stats being used.
+#----------------------------------------------------------
+
+!if !$(DOING_TCL)
+!message *** Building against Tcl at '$(_TCLDIR)'
+!endif
+!if !$(DOING_TK) && $(NEED_TK)
+!message *** Building against Tk at '$(_TKDIR)'
+!endif
+!message *** Intermediate directory will be '$(TMP_DIR)'
+!message *** Output directory will be '$(OUT_DIR)'
+!message *** Installation, if selected, will be in '$(_INSTALLDIR)'
+!message *** Suffix for binaries will be '$(SUFX)'
+!message *** Compiler version $(VCVER). Target machine is $(MACHINE)
+!message *** Host architecture is $(NATIVE_ARCH)
+
+!endif # ifdef _RULES_VC
diff --git a/pkgs/tdbcsqlite3-1.0.6/win/targets.vc b/pkgs/tdbcsqlite3-1.0.6/win/targets.vc
new file mode 100644 (file)
index 0000000..312022d
--- /dev/null
@@ -0,0 +1,98 @@
+#------------------------------------------------------------- -*- makefile -*-
+# targets.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file defines some standard targets for the convenience of extensions
+# and can be optionally included by the extension makefile.
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for docs.
+
+$(PROJECT): setup pkgindex $(PRJLIB)
+
+!ifdef PRJ_STUBOBJS
+$(PROJECT): $(PRJSTUBLIB)
+$(PRJSTUBLIB): $(PRJ_STUBOBJS)
+       $(LIBCMD) $**
+
+$(PRJ_STUBOBJS):
+       $(CCSTUBSCMD) %s
+!endif # PRJ_STUBOBJS
+
+!ifdef PRJ_MANIFEST
+$(PROJECT): $(PRJLIB).manifest
+$(PRJLIB).manifest: $(PRJ_MANIFEST)
+       @nmakehlp -s << $** >$@
+@MACHINE@        $(MACHINE:IX86=X86)
+<<
+!endif
+
+!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"
+$(PRJLIB): $(PRJ_OBJS) $(RESFILE)
+!if $(STATIC_BUILD)
+       $(LIBCMD) $**
+!else
+       $(DLLCMD) $**
+       $(_VC_MANIFEST_EMBED_DLL)
+!endif
+       -@del $*.exp
+!endif
+
+!if "$(PRJ_HEADERS)" != "" && "$(PRJ_OBJS)" != ""
+$(PRJ_OBJS): $(PRJ_HEADERS)
+!endif
+
+# If parent makefile has defined stub objects, add their installation
+# to the default install
+!if "$(PRJ_STUBOBJS)" != ""
+default-install: default-install-stubs
+!endif
+
+# Unlike the other default targets, these cannot be in rules.vc because
+# the executed command depends on existence of macro PRJ_HEADERS_PUBLIC
+# that the parent makefile will not define until after including rules-ext.vc
+!if "$(PRJ_HEADERS_PUBLIC)" != ""
+default-install: default-install-headers
+default-install-headers:
+       @echo Installing headers to '$(INCLUDE_INSTALL_DIR)'
+       @for %f in ($(PRJ_HEADERS_PUBLIC)) do @$(COPY) %f "$(INCLUDE_INSTALL_DIR)"
+!endif
+
+!if "$(DISABLE_STANDARD_TARGETS)" == ""
+DISABLE_STANDARD_TARGETS = 0
+!endif
+
+!if "$(DISABLE_TARGET_setup)" == ""
+DISABLE_TARGET_setup = 0
+!endif
+!if "$(DISABLE_TARGET_install)" == ""
+DISABLE_TARGET_install = 0
+!endif
+!if "$(DISABLE_TARGET_clean)" == ""
+DISABLE_TARGET_clean = 0
+!endif
+!if "$(DISABLE_TARGET_test)" == ""
+DISABLE_TARGET_test = 0
+!endif
+!if "$(DISABLE_TARGET_shell)" == ""
+DISABLE_TARGET_shell = 0
+!endif
+
+!if !$(DISABLE_STANDARD_TARGETS)
+!if !$(DISABLE_TARGET_setup)
+setup: default-setup
+!endif
+!if !$(DISABLE_TARGET_install)
+install: default-install
+!endif
+!if !$(DISABLE_TARGET_clean)
+clean: default-clean
+realclean: hose
+hose: default-hose
+distclean: realclean default-distclean
+!endif
+!if !$(DISABLE_TARGET_test)
+test: default-test
+!endif
+!if !$(DISABLE_TARGET_shell)
+shell: default-shell
+!endif
+!endif # DISABLE_STANDARD_TARGETS
diff --git a/pkgs/thread2.8.1/win/makefile.vc b/pkgs/thread2.8.1/win/makefile.vc
deleted file mode 100644 (file)
index cc3eaee..0000000
+++ /dev/null
@@ -1,487 +0,0 @@
-#------------------------------------------------------------- -*- makefile -*-\r
-# makefile.vc --\r
-#\r
-#      Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)\r
-#\r
-# See the file "license.terms" for information on usage and redistribution\r
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
-#\r
-# Copyright (c) 1995-1996 Sun Microsystems, Inc.\r
-# Copyright (c) 1998-2000 Ajuba Solutions.\r
-# Copyright (c) 2001-2005 ActiveState Corporation.\r
-# Copyright (c) 2001-2004 David Gravereaux.\r
-# Copyright (c) 2003-2008 Pat Thoyts.\r
-#------------------------------------------------------------------------------\r
-\r
-# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or\r
-# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)\r
-!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)\r
-MSG = ^\r
-You need to run vcvars32.bat from Developer Studio or setenv.bat from the^\r
-Platform SDK first to setup the environment.  Jump to this line to read^\r
-the build instructions.\r
-!error $(MSG)\r
-!endif\r
-\r
-#------------------------------------------------------------------------------\r
-# HOW TO USE this makefile:\r
-#\r
-# 1)  It is now necessary to have MSVCDir, MSDevDir or MSSDK set in the\r
-#     environment.  This is used as a check to see if vcvars32.bat had been\r
-#     run prior to running nmake or during the installation of Microsoft\r
-#     Visual C++, MSVCDir had been set globally and the PATH adjusted.\r
-#     Either way is valid.\r
-#\r
-#     You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin\r
-#     directory to setup the proper environment, if needed, for your\r
-#     current setup.  This is a needed bootstrap requirement and allows the\r
-#     swapping of different environments to be easier.\r
-#\r
-# 2)  To use the Platform SDK (not expressly needed), run setenv.bat after\r
-#     vcvars32.bat according to the instructions for it.  This can also\r
-#     turn on the 64-bit compiler, if your SDK has it.\r
-#\r
-# 3)  Targets are:\r
-#      all       -- Builds everything.\r
-#      <project> -- Builds the project (eg: nmake sample)\r
-#      test      -- Builds and runs the test suite.\r
-#      install   -- Installs the built binaries and libraries to $(INSTALLDIR)\r
-#                   in an appropriate subdirectory.\r
-#      clean/realclean/distclean -- varying levels of cleaning.\r
-#\r
-# 4)  Macros usable on the commandline:\r
-#      INSTALLDIR=<path>\r
-#              Sets where to install Tcl from the built binaries.\r
-#              C:\Progra~1\Tcl is assumed when not specified.\r
-#\r
-#      OPTS=static,msvcrt,staticpkg,nothreads,symbols,profile,loimpact,none\r
-#              Sets special options for the core.  The default is for none.\r
-#              Any combination of the above may be used (comma separated).\r
-#              'none' will over-ride everything to nothing.\r
-#\r
-#              static  =  Builds a static library of the core instead of a\r
-#                         dll.  The shell will be static (and large), as well.\r
-#              msvcrt  =  Affects the static option only to switch it from\r
-#                         using libcmt(d) as the C runtime [by default] to\r
-#                         msvcrt(d). This is useful for static embedding\r
-#                         support.\r
-#              staticpkg = Affects the static option only to switch\r
-#                         tclshXX.exe to have the dde and reg extension linked\r
-#                         inside it.\r
-#              nothreads = Turns off multithreading support (not supported).\r
-#              thrdalloc = Use the thread allocator (shared global free pool)\r
-#                         This is the default on threaded builds.\r
-#              symbols  = Debug build. Links to the debug C runtime, disables\r
-#                         optimizations and creates pdb symbols files.\r
-#              profile  = Adds profiling hooks.  Map file is assumed.\r
-#              loimpact = Adds a flag for how NT treats the heap to keep memory\r
-#                         in use, low.  This is said to impact alloc performance.\r
-#\r
-#      STATS=memdbg,compdbg,none\r
-#              Sets optional memory and bytecode compiler debugging code added\r
-#              to the core.  The default is for none.  Any combination of the\r
-#              above may be used (comma separated).  'none' will over-ride\r
-#              everything to nothing.\r
-#\r
-#              memdbg   = Enables the debugging memory allocator.\r
-#              compdbg  = Enables byte compilation logging.\r
-#\r
-#      MACHINE=(ARM|AMD64|IA64|X86)\r
-#              Set the machine type used for the compiler, linker, and\r
-#              resource compiler.  This hook is needed to tell the tools\r
-#              when alternate platforms are requested.  IX86 is the default\r
-#              when not specified. If the CPU environment variable has been\r
-#              set (ie: recent Platform SDK) then MACHINE is set from CPU.\r
-#\r
-#      TMP_DIR=<path>\r
-#      OUT_DIR=<path>\r
-#              Hooks to allow the intermediate and output directories to be\r
-#              changed.  $(OUT_DIR) is assumed to be\r
-#              $(BINROOT)\(Release|Debug) based on if symbols are requested.\r
-#              $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default.\r
-#\r
-#      TESTPAT=<file>\r
-#              Reads the tests requested to be run from this file.\r
-#\r
-#      CFG_ENCODING=encoding\r
-#              name of encoding for configuration information. Defaults\r
-#              to cp1252\r
-#\r
-# 5)  Examples:\r
-#\r
-#      Basic syntax of calling nmake looks like this:\r
-#      nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]]\r
-#\r
-#                        Standard (no frills)\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
-#       c:\tcl_src\win\>nmake -f makefile.vc all\r
-#       c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl\r
-#\r
-#                         Building for Win64\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
-#       c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL\r
-#       Targeting Windows pre64 RETAIL\r
-#       c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64\r
-#\r
-#------------------------------------------------------------------------------\r
-#==============================================================================\r
-#------------------------------------------------------------------------------\r
-\r
-!if !exist("makefile.vc")\r
-MSG = ^\r
-You must run this makefile only from the directory it is in.^\r
-Please `cd` to its location first.\r
-!error $(MSG)\r
-!endif\r
-\r
-#-------------------------------------------------------------------------\r
-# Project specific information (EDIT)\r
-#\r
-# You should edit this with the name and version of your project. This\r
-# information is used to generate the name of the package library and\r
-# it's install location.\r
-#\r
-# For example, the sample extension is  going to build sample05.dll and\r
-# would install it into $(INSTALLDIR)\lib\sample05\r
-#\r
-# You need to specify the object files that need to be linked into your\r
-# binary here.\r
-#\r
-#-------------------------------------------------------------------------\r
-\r
-PROJECT = thread\r
-\r
-# Uncomment the following line if this is a Tk extension.\r
-#PROJECT_REQUIRES_TK=1\r
-!include "rules.vc"\r
-\r
-!include "pkg.vc"\r
-\r
-DOTVERSION      = $(PACKAGE_VERSION:"=) #"\r
-VERSION         = $(PACKAGE_MAJOR)$(PACKAGE_MINOR)\r
-STUBPREFIX      = $(PROJECT)stub\r
-\r
-DLLOBJS = \\r
-       $(TMP_DIR)\threadNs.obj \\r
-       $(TMP_DIR)\threadCmd.obj \\r
-       $(TMP_DIR)\threadSvCmd.obj \\r
-       $(TMP_DIR)\threadSpCmd.obj \\r
-       $(TMP_DIR)\threadPoolCmd.obj \\r
-       $(TMP_DIR)\psGdbm.obj \\r
-       $(TMP_DIR)\threadSvListCmd.obj \\r
-       $(TMP_DIR)\threadSvKeylistCmd.obj \\r
-       $(TMP_DIR)\tclXkeylist.obj \\r
-       $(TMP_DIR)\threadWin.obj \\r
-!if !$(STATIC_BUILD)\r
-       $(TMP_DIR)\thread.res\r
-!endif\r
-\r
-PRJHEADERS =\r
-\r
-#-------------------------------------------------------------------------\r
-# Target names and paths ( shouldn't need changing )\r
-#-------------------------------------------------------------------------\r
-\r
-BINROOT                = $(MAKEDIR)\r
-ROOT            = $(MAKEDIR)\..\r
-\r
-PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib\r
-PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)\r
-PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)\r
-\r
-PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
-PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)\r
-\r
-### Make sure we use backslash only.\r
-PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)\r
-LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
-SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)\r
-INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include\r
-\r
-### The following paths CANNOT have spaces in them.\r
-GENERICDIR     = $(ROOT)\generic\r
-WINDIR         = $(ROOT)\win\r
-LIBDIR          = $(ROOT)\lib\r
-DOCDIR         = $(ROOT)\doc\r
-TOOLSDIR       = $(ROOT)\tools\r
-COMPATDIR      = $(ROOT)\compat\r
-\r
-#---------------------------------------------------------------------\r
-# Compile flags\r
-#---------------------------------------------------------------------\r
-\r
-!if !$(DEBUG)\r
-!if $(OPTIMIZING)\r
-### This cranks the optimization level to maximize speed\r
-cdebug = $(OPTIMIZATIONS)\r
-!else\r
-cdebug =\r
-!endif\r
-!else if "$(MACHINE)" == "IA64"\r
-### Warnings are too many, can't support warnings into errors.\r
-cdebug = -Zi -Od $(DEBUGFLAGS)\r
-!else\r
-cdebug = -Zi -W3 $(DEBUGFLAGS)\r
-!endif\r
-\r
-### Common compiler options that are architecture specific\r
-!if "$(MACHINE)" == "ARM"\r
-carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE\r
-!else\r
-carch =\r
-!endif\r
-\r
-### Declarations common to all compiler options\r
-cwarn = $(WARNINGS) -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE\r
-cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\\r
-\r
-!if $(MSVCRT)\r
-!if $(DEBUG) && !$(UNCHECKED)\r
-crt = -MDd\r
-!else\r
-crt = -MD\r
-!endif\r
-!else\r
-!if $(DEBUG) && !$(UNCHECKED)\r
-crt = -MTd\r
-!else\r
-crt = -MT\r
-!endif\r
-!endif\r
-\r
-cflags = $(cflags) -DMODULE_SCOPE=extern -DUSE_TCL_STUBS\r
-cflags = $(cflags) -DTCL_TIP143 -DTCL_TIP285\r
-!if defined(TKSTUBLIB)\r
-cflags = $(cflags) -DUSE_TK_STUBS\r
-!endif\r
-\r
-INCLUDES       = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)"\r
-BASE_CFLAGS    = $(cflags) $(cdebug) $(crt) $(INCLUDES)\r
-CON_CFLAGS     = $(cflags) $(cdebug) $(crt) -DCONSOLE\r
-TCL_CFLAGS     = -DPACKAGE_NAME="\"$(PROJECT)\"" \\r
-                 -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \\r
-                 -DBUILD_$(PROJECT) \\r
-                 $(BASE_CFLAGS) $(OPTDEFINES)\r
-\r
-### Stubs files should not be compiled with -GL\r
-STUB_CFLAGS     = $(cflags) $(cdebug:-GL=) #$(TK_DEFINES)\r
-\r
-#---------------------------------------------------------------------\r
-# Link flags\r
-#---------------------------------------------------------------------\r
-\r
-!if $(DEBUG)\r
-ldebug = -debug\r
-!if $(MSVCRT)\r
-ldebug = $(ldebug) -nodefaultlib:msvcrt\r
-!endif\r
-!else\r
-ldebug = -release -opt:ref -opt:icf,3\r
-!endif\r
-\r
-### Declarations common to all linker options\r
-lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)\r
-\r
-!if $(PROFILE)\r
-lflags = $(lflags) -profile\r
-!endif\r
-\r
-!if $(ALIGN98_HACK) && !$(STATIC_BUILD)\r
-### Align sections for PE size savings.\r
-lflags = $(lflags) -opt:nowin98\r
-!else if !$(ALIGN98_HACK) && $(STATIC_BUILD)\r
-### Align sections for speed in loading by choosing the virtual page size.\r
-lflags = $(lflags) -align:4096\r
-!endif\r
-\r
-!if $(LOIMPACT)\r
-lflags = $(lflags) -ws:aggressive\r
-!endif\r
-\r
-dlllflags = $(lflags) -dll\r
-conlflags = $(lflags) -subsystem:console\r
-guilflags = $(lflags) -subsystem:windows\r
-!if !$(STATIC_BUILD)\r
-baselibs  = $(TCLSTUBLIB)\r
-!if defined(TKSTUBLIB)\r
-baselibs  = $(baselibs) $(TKSTUBLIB)\r
-!endif\r
-!endif\r
-\r
-# Avoid 'unresolved external symbol __security_cookie' errors.\r
-# c.f. http://support.microsoft.com/?id=894573\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500\r
-baselibs   = $(baselibs) bufferoverflowU.lib\r
-!endif\r
-!endif\r
-\r
-#---------------------------------------------------------------------\r
-# TclTest flags\r
-#---------------------------------------------------------------------\r
-\r
-!if "$(TESTPAT)" != ""\r
-TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)\r
-!endif\r
-\r
-#---------------------------------------------------------------------\r
-# Project specific targets (EDIT)\r
-#---------------------------------------------------------------------\r
-\r
-all:       setup $(PROJECT)\r
-$(PROJECT): setup pkgIndex $(PRJLIB)\r
-install:    install-binaries install-libraries install-docs\r
-pkgIndex:   $(OUT_DIR)\pkgIndex.tcl\r
-\r
-test: setup $(PROJECT)\r
-       @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)\r
-       @set TCLLIBPATH=$(OUT_DIR_PATH:\=/)\r
-       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)\r
-!if $(TCLINSTALL)\r
-       @set PATH=$(_TCLDIR)\bin;$(PATH)\r
-!else\r
-       @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)\r
-!endif\r
-       $(DEBUGGER) $(TCLSH) "$(ROOT)/tests/all.tcl" $(TESTFLAGS)\r
-\r
-shell: setup $(PROJECT)\r
-       @set VLERQ_LIBRARY=$(LIBDIR:\=/)\r
-       @set TCL_LIBRARY=$(TCL_LIBRARY:\=/)\r
-       @set TCLLIBPATH=$(OUT_DIR:\=/)\r
-       @$(CPY) $(LIBDIR)\*.tcl $(OUT_DIR)\r
-!if $(TCLINSTALL)\r
-       @set PATH=$(_TCLDIR)\bin;$(PATH)\r
-!else\r
-       @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)\r
-!endif\r
-       $(DEBUGGER) $(TCLSH) $(SCRIPT)\r
-\r
-setup:\r
-       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)\r
-       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)\r
-\r
-# See <tcl>/win/coffbase.txt for extension base addresses.\r
-$(PRJLIB): $(DLLOBJS)\r
-!if $(STATIC_BUILD)\r
-       $(lib32) -nologo -out:$@ @<<\r
-$**\r
-<<\r
-!else\r
-       $(link32) $(dlllflags) -base:0x10C80000 -out:$@ $(baselibs) @<<\r
-$**\r
-<<\r
-       $(_VC_MANIFEST_EMBED_DLL)\r
-       -@del $*.exp\r
-!endif\r
-\r
-$(PRJSTUBLIB): $(PRJSTUBOBJS)\r
-       $(lib32) -nologo -nodefaultlib -out:$@ $(PRJSTUBOBJS)\r
-\r
-#---------------------------------------------------------------------\r
-# Implicit rules\r
-#---------------------------------------------------------------------\r
-\r
-{$(WINDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::\r
-    $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(WINDIR)}.rc{$(TMP_DIR)}.res:\r
-       $(rc32) -fo $@ -r -i "$(GENERICDIR)" $(TCL_INCLUDES) \\r
-               -D_WIN32 -D__WIN32__ \\r
-               -DCOMMAVERSION=$(DOTVERSION:.=,),0 \\r
-               -DDOTVERSION=\"$(DOTVERSION)\" \\r
-               -DVERSION=\"$(VERSION)$(SUFX)\" \\r
-               -DDEBUG=$(DEBUG) \\r
-               -DPACKAGE_MAJOR=$(PACKAGE_MAJOR) \\r
-               -DPACKAGE_MINOR=$(PACKAGE_MINOR) \\r
-               -DPACKAGE_VERSION=\"$(PACKAGE_VERSION)\" \\r
-!if $(DEBUG)\r
-       -d DEBUG \\r
-!endif\r
-!if $(TCL_THREADS)\r
-       -d TCL_THREADS \\r
-!endif\r
-!if $(STATIC_BUILD)\r
-       -d STATIC_BUILD \\r
-!endif\r
-       $<\r
-\r
-.SUFFIXES:\r
-.SUFFIXES:.c .rc\r
-\r
-#-------------------------------------------------------------------------\r
-# Explicit dependency rules\r
-#\r
-#-------------------------------------------------------------------------\r
-\r
-#{$(WINDIR)}.c{$(TMP_DIR)}.obj ::\r
-$(GENERICDIR)\psGdbm.c: $(GENERICDIR)\psGdbm.h\r
-$(GENERICDIR)\threadSpCmd.c : $(GENERICDIR)\tclThreadInt.h\r
-$(GENERICDIR)\threadSvCmd.c : $(GENERICDIR)\tclThreadInt.h\r
-$(GENERICDIR)\threadPoolCmd.c : $(GENERICDIR)\tclThreadInt.h\r
-$(GENERICDIR)\threadSvListCmd.c : $(GENERICDIR)\tclThreadInt.h\r
-$(GENERICDIR)\threadSvKeylistCmd.c : $(GENERICDIR)\tclThreadInt.h\r
-\r
-.PHONY: $(OUT_DIR)\pkgIndex.tcl\r
-\r
-$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in\r
-       @nmakehlp -s << $** > $@\r
-@PACKAGE_NAME@       thread\r
-@PACKAGE_VERSION@    $(DOTVERSION)\r
-@PKG_LIB_FILE@       $(PRJLIBNAME)\r
-<<\r
-\r
-#---------------------------------------------------------------------\r
-# Installation. (EDIT)\r
-#\r
-# You may need to modify this section to reflect the final distribution\r
-# of your files and possibly to generate documentation.\r
-#\r
-#---------------------------------------------------------------------\r
-\r
-install-binaries:\r
-       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'\r
-       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"\r
-       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL\r
-\r
-install-libraries:\r
-       @echo Installing library files to '$(SCRIPT_INSTALL_DIR)'\r
-       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"\r
-       @$(CPY) $(OUT_DIR)\pkgIndex.tcl "$(SCRIPT_INSTALL_DIR)"\r
-\r
-install-docs:\r
-       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'\r
-       @if exist $(DOCDIR)\man $(CPY) $(DOCDIR)\man\*.n "$(DOC_INSTALL_DIR)"\r
-\r
-#---------------------------------------------------------------------\r
-# Clean up\r
-#---------------------------------------------------------------------\r
-\r
-clean:\r
-       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)\r
-       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc\r
-       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i\r
-       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x\r
-       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch\r
-\r
-realclean: clean\r
-       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)\r
-\r
-distclean: realclean\r
-       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe\r
-       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj\r
diff --git a/pkgs/thread2.8.1/win/rules.vc b/pkgs/thread2.8.1/win/rules.vc
deleted file mode 100644 (file)
index a9efecf..0000000
+++ /dev/null
@@ -1,623 +0,0 @@
-#------------------------------------------------------------------------------\r
-# rules.vc --\r
-#\r
-#      Microsoft Visual C++ makefile include for decoding the commandline\r
-#      macros.  This file does not need editing to build Tcl.\r
-#\r
-#      This version is modified from the Tcl source version to support\r
-#      building extensions using nmake.\r
-#\r
-# See the file "license.terms" for information on usage and redistribution\r
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
-#\r
-# Copyright (c) 2001-2002 David Gravereaux.\r
-# Copyright (c) 2003-2008 Patrick Thoyts\r
-#------------------------------------------------------------------------------\r
-\r
-!ifndef _RULES_VC\r
-_RULES_VC = 1\r
-\r
-cc32           = $(CC)   # built-in default.\r
-link32         = link\r
-lib32          = lib\r
-rc32           = $(RC)   # built-in default.\r
-\r
-!ifndef INSTALLDIR\r
-### Assume the normal default.\r
-_INSTALLDIR    = C:\Program Files\Tcl\r
-!else\r
-### Fix the path separators.\r
-_INSTALLDIR    = $(INSTALLDIR:/=\)\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Set the proper copy method to avoid overwrite questions\r
-# to the user when copying files and selecting the right\r
-# "delete all" method.\r
-#----------------------------------------------------------\r
-\r
-!if "$(OS)" == "Windows_NT"\r
-RMDIR  = rmdir /S /Q\r
-ERRNULL  = 2>NUL\r
-!if ![ver | find "4.0" > nul]\r
-CPY    = echo y | xcopy /i >NUL\r
-COPY   = copy >NUL\r
-!else\r
-CPY    = xcopy /i /y >NUL\r
-COPY   = copy /y >NUL\r
-!endif\r
-!else # "$(OS)" != "Windows_NT"\r
-CPY    = xcopy /i >_JUNK.OUT # On Win98 NUL does not work here.\r
-COPY   = copy >_JUNK.OUT # On Win98 NUL does not work here.\r
-RMDIR  = deltree /Y\r
-NULL    = \NUL # Used in testing directory existence\r
-ERRNULL = >NUL # Win9x shell cannot redirect stderr\r
-!endif\r
-MKDIR   = mkdir\r
-\r
-#------------------------------------------------------------------------------\r
-# Determine the host and target architectures and compiler version.\r
-#------------------------------------------------------------------------------\r
-\r
-_HASH=^#\r
-_VC_MANIFEST_EMBED_EXE=\r
-_VC_MANIFEST_EMBED_DLL=\r
-VCVER=0\r
-!if ![echo VCVERSION=_MSC_VER > vercl.x] \\r
-    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \\r
-    && ![echo ARCH=IX86 >> vercl.x] \\r
-    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \\r
-    && ![echo ARCH=AMD64 >> vercl.x] \\r
-    && ![echo $(_HASH)endif >> vercl.x] \\r
-    && ![cl -nologo -TC -P vercl.x $(ERRNULL)]\r
-!include vercl.i\r
-!if ![echo VCVER= ^\> vercl.vc] \\r
-    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]\r
-!include vercl.vc\r
-!endif\r
-!endif\r
-!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]\r
-!endif\r
-\r
-!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]\r
-NATIVE_ARCH=IX86\r
-!else\r
-NATIVE_ARCH=AMD64\r
-!endif\r
-\r
-# Since MSVC8 we must deal with manifest resources.\r
-!if $(VCVERSION) >= 1400\r
-_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1\r
-_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2\r
-!endif\r
-\r
-!ifndef MACHINE\r
-MACHINE=$(ARCH)\r
-!endif\r
-\r
-!ifndef CFG_ENCODING\r
-CFG_ENCODING   = \"cp1252\"\r
-!endif\r
-\r
-!message ===============================================================================\r
-\r
-#----------------------------------------------------------\r
-# build the helper app we need to overcome nmake's limiting\r
-# environment.\r
-#----------------------------------------------------------\r
-\r
-!if !exist(nmakehlp.exe)\r
-!if [$(cc32) -nologo nmakehlp.c -link -subsystem:console > nul]\r
-!endif\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Test for compiler features\r
-#----------------------------------------------------------\r
-\r
-### test for optimizations\r
-!if [nmakehlp -c -Ot]\r
-!message *** Compiler has 'Optimizations'\r
-OPTIMIZING     = 1\r
-!else\r
-!message *** Compiler does not have 'Optimizations'\r
-OPTIMIZING     = 0\r
-!endif\r
-\r
-OPTIMIZATIONS   =\r
-\r
-!if [nmakehlp -c -Ot]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Ot\r
-!endif\r
-\r
-!if [nmakehlp -c -Oi]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Oi\r
-!endif\r
-\r
-!if [nmakehlp -c -Op]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Op\r
-!endif\r
-\r
-!if [nmakehlp -c -fp:strict]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -fp:strict\r
-!endif\r
-\r
-!if [nmakehlp -c -Gs]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Gs\r
-!endif\r
-\r
-!if [nmakehlp -c -GS]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS\r
-!endif\r
-\r
-!if [nmakehlp -c -GL]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL\r
-!endif\r
-\r
-DEBUGFLAGS     =\r
-\r
-!if [nmakehlp -c -RTC1]\r
-DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1\r
-!elseif [nmakehlp -c -GZ]\r
-DEBUGFLAGS     = $(DEBUGFLAGS) -GZ\r
-!endif\r
-\r
-COMPILERFLAGS  =-W3\r
-\r
-# In v13 -GL and -YX are incompatible.\r
-!if [nmakehlp -c -YX]\r
-!if ![nmakehlp -c -GL]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for pentium errata\r
-!if [nmakehlp -c -QI0f]\r
-!message *** Compiler has 'Pentium 0x0f fix'\r
-COMPILERFLAGS  = $(COMPILERFLAGS) -QI0f\r
-!else\r
-!message *** Compiler does not have 'Pentium 0x0f fix'\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IA64"\r
-### test for Itanium errata\r
-!if [nmakehlp -c -QIA64_Bx]\r
-!message *** Compiler has 'B-stepping errata workarounds'\r
-COMPILERFLAGS   = $(COMPILERFLAGS) -QIA64_Bx\r
-!else\r
-!message *** Compiler does not have 'B-stepping errata workarounds'\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for -align:4096, when align:512 will do.\r
-!if [nmakehlp -l -opt:nowin98]\r
-!message *** Linker has 'Win98 alignment problem'\r
-ALIGN98_HACK   = 1\r
-!else\r
-!message *** Linker does not have 'Win98 alignment problem'\r
-ALIGN98_HACK   = 0\r
-!endif\r
-!else\r
-ALIGN98_HACK   = 0\r
-!endif\r
-\r
-LINKERFLAGS     =\r
-\r
-!if [nmakehlp -l -ltcg]\r
-LINKERFLAGS     =-ltcg\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Decode the options requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]\r
-STATIC_BUILD   = 0\r
-TCL_THREADS    = 1\r
-DEBUG          = 0\r
-PROFILE                = 0\r
-MSVCRT         = 0\r
-LOIMPACT       = 0\r
-TCL_USE_STATIC_PACKAGES        = 0\r
-USE_THREAD_ALLOC = 1\r
-USE_THREAD_STORAGE = 1\r
-UNCHECKED       = 0\r
-!else\r
-!if [nmakehlp -f $(OPTS) "static"]\r
-!message *** Doing static\r
-STATIC_BUILD   = 1\r
-!else\r
-STATIC_BUILD   = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "msvcrt"]\r
-!message *** Doing msvcrt\r
-MSVCRT         = 1\r
-!else\r
-MSVCRT         = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "staticpkg"]\r
-!message *** Doing staticpkg\r
-TCL_USE_STATIC_PACKAGES        = 1\r
-!else\r
-TCL_USE_STATIC_PACKAGES        = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "nothreads"]\r
-!message *** Compile explicitly for non-threaded tcl\r
-TCL_THREADS    = 0\r
-!else\r
-TCL_THREADS     = 1\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "symbols"]\r
-!message *** Doing symbols\r
-DEBUG          = 1\r
-!else\r
-DEBUG          = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "profile"]\r
-!message *** Doing profile\r
-PROFILE                = 1\r
-!else\r
-PROFILE                = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "loimpact"]\r
-!message *** Doing loimpact\r
-LOIMPACT       = 1\r
-!else\r
-LOIMPACT       = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "thrdalloc"]\r
-!message *** Doing thrdalloc\r
-USE_THREAD_ALLOC = 1\r
-!else\r
-USE_THREAD_ALLOC = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "thrdstorage"]\r
-!message *** Doing thrdstorage\r
-USE_THREAD_STORAGE = 1\r
-!else\r
-USE_THREAD_STORAGE = 0\r
-!endif\r
-!if [nmakehlp -f $(OPTS) "unchecked"]\r
-!message *** Doing unchecked\r
-UNCHECKED = 1\r
-!else\r
-UNCHECKED = 0\r
-!endif\r
-!endif\r
-\r
-\r
-!if !$(STATIC_BUILD)\r
-# Make sure we don't build overly fat DLLs.\r
-MSVCRT         = 1\r
-# We shouldn't statically put the extensions inside the shell when dynamic.\r
-TCL_USE_STATIC_PACKAGES = 0\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Figure-out how to name our intermediate and output directories.\r
-# We wouldn't want different builds to use the same .obj files\r
-# by accident.\r
-#----------------------------------------------------------\r
-\r
-#----------------------------------------\r
-# Naming convention:\r
-#   t = full thread support.\r
-#   s = static library (as opposed to an\r
-#      import library)\r
-#   g = linked to the debug enabled C\r
-#      run-time.\r
-#   x = special static build when it\r
-#      links to the dynamic C run-time.\r
-#----------------------------------------\r
-SUFX       = sgx\r
-\r
-!if $(DEBUG)\r
-BUILDDIRTOP = Debug\r
-!else\r
-BUILDDIRTOP = Release\r
-!endif\r
-\r
-!if "$(MACHINE)" != "IX86"\r
-BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)\r
-!endif\r
-!if $(VCVER) > 6\r
-BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)\r
-!endif\r
-\r
-!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)\r
-SUFX       = $(SUFX:g=)\r
-!endif\r
-\r
-TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX\r
-\r
-!if !$(STATIC_BUILD)\r
-TMP_DIRFULL = $(TMP_DIRFULL:Static=)\r
-SUFX       = $(SUFX:s=)\r
-EXT        = dll\r
-!if $(MSVCRT)\r
-TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
-SUFX       = $(SUFX:x=)\r
-!endif\r
-!else\r
-TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)\r
-EXT        = lib\r
-!if !$(MSVCRT)\r
-TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
-SUFX       = $(SUFX:x=)\r
-!endif\r
-!endif\r
-\r
-!if !$(TCL_THREADS)\r
-TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)\r
-SUFX       = $(SUFX:t=)\r
-!endif\r
-\r
-!ifndef TMP_DIR\r
-TMP_DIR            = $(TMP_DIRFULL)\r
-!ifndef OUT_DIR\r
-OUT_DIR            = .\$(BUILDDIRTOP)\r
-!endif\r
-!else\r
-!ifndef OUT_DIR\r
-OUT_DIR            = $(TMP_DIR)\r
-!endif\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Decode the statistics requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"]\r
-TCL_MEM_DEBUG      = 0\r
-TCL_COMPILE_DEBUG   = 0\r
-!else\r
-!if [nmakehlp -f $(STATS) "memdbg"]\r
-!message *** Doing memdbg\r
-TCL_MEM_DEBUG      = 1\r
-!else\r
-TCL_MEM_DEBUG      = 0\r
-!endif\r
-!if [nmakehlp -f $(STATS) "compdbg"]\r
-!message *** Doing compdbg\r
-TCL_COMPILE_DEBUG   = 1\r
-!else\r
-TCL_COMPILE_DEBUG   = 0\r
-!endif\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Decode the checks requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(CHECKS)" == "" || [nmakehlp -f "$(CHECKS)" "none"]\r
-TCL_NO_DEPRECATED          = 0\r
-WARNINGS                   = -W3\r
-!else\r
-!if [nmakehlp -f $(CHECKS) "nodep"]\r
-!message *** Doing nodep check\r
-TCL_NO_DEPRECATED          = 1\r
-!else\r
-TCL_NO_DEPRECATED          = 0\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "fullwarn"]\r
-!message *** Doing full warnings check\r
-WARNINGS                   = -W4\r
-!if [nmakehlp -l -warn:3]\r
-LINKERFLAGS                = $(LINKERFLAGS) -warn:3\r
-!endif\r
-!else\r
-WARNINGS                   = -W3\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]\r
-!message *** Doing 64bit portability warnings\r
-WARNINGS                   = $(WARNINGS) -Wp64\r
-!endif\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Set our defines now armed with our options.\r
-#----------------------------------------------------------\r
-\r
-OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS\r
-\r
-!if $(TCL_MEM_DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG\r
-!endif\r
-!if $(TCL_COMPILE_DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS\r
-!endif\r
-!if $(TCL_THREADS)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1\r
-!if $(USE_THREAD_ALLOC)\r
-OPTDEFINES     = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1\r
-!endif\r
-!if $(USE_THREAD_STORAGE)\r
-OPTDEFINES     = $(OPTDEFINES) -DUSE_THREAD_STORAGE=1\r
-!endif\r
-!endif\r
-!if $(STATIC_BUILD)\r
-OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD\r
-!endif\r
-!if $(TCL_NO_DEPRECATED)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED\r
-!endif\r
-\r
-!if $(DEBUG)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DEBUG\r
-!elseif $(OPTIMIZING)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED\r
-!endif\r
-!if $(PROFILE)\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED\r
-!endif\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Get common info used when building extensions.\r
-#----------------------------------------------------------\r
-\r
-!if "$(PROJECT)" != "tcl"\r
-\r
-# If INSTALLDIR set to tcl root dir then reset to the lib dir.\r
-!if exist("$(_INSTALLDIR)\include\tcl.h")\r
-_INSTALLDIR=$(_INSTALLDIR)\lib\r
-!endif\r
-\r
-!if !defined(TCLDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCLDIR                = $(_INSTALLDIR)\..\r
-_TCL_H          = $(_INSTALLDIR)\..\include\tcl.h\r
-TCLDIR          = $(_INSTALLDIR)\..\r
-!else\r
-MSG=^\r
-Failed to find tcl.h.  Set the TCLDIR macro.\r
-!error $(MSG)\r
-!endif\r
-!else\r
-_TCLDIR        = $(TCLDIR:/=\)\r
-!if exist("$(_TCLDIR)\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCL_H          = $(_TCLDIR)\include\tcl.h\r
-!elseif exist("$(_TCLDIR)\generic\tcl.h")\r
-TCLINSTALL     = 0\r
-_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
-!else\r
-MSG =^\r
-Failed to find tcl.h.  The TCLDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-\r
-!if [echo REM = This file is generated from rules.vc > version.vc]\r
-!endif\r
-!if exist("$(_TCL_H)")\r
-!if [echo TCL_DOTVERSION = \>> version.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_VERSION >> version.vc]\r
-!endif\r
-!endif\r
-!include version.vc\r
-TCL_VERSION    = $(TCL_DOTVERSION:.=)\r
-\r
-!if $(TCLINSTALL)\r
-TCLSH          = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH           = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\lib\r
-TCL_INCLUDES    = -I"$(_TCLDIR)\include"\r
-!else\r
-TCLSH          = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH          = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\library\r
-TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"\r
-!endif\r
-\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Optionally check for Tk info for building extensions.\r
-#----------------------------------------------------------\r
-\r
-!ifdef PROJECT_REQUIRES_TK\r
-!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"\r
-\r
-!if !defined(TKDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_INSTALLDIR)\..\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
-!elseif exist("$(_TCLDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_TCLDIR)\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
-!endif\r
-!else\r
-_TKDIR = $(TKDIR:/=\)\r
-!if exist("$(_TKDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-!elseif exist("$(_TKDIR)\generic\tk.h")\r
-TKINSTALL      = 0\r
-_TK_H          = $(_TKDIR)\generic\tk.h\r
-!else\r
-MSG =^\r
-Failed to find tk.h. The TKDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
-\r
-!if defined(TKDIR)\r
-TK_DOTVERSION = 8.4\r
-!if exist("$(_TK_H)")\r
-!if [echo TK_DOTVERSION = \>> version.vc] \\r
-   && [nmakehlp -V "$(_TK_H)" TK_VERSION >> version.vc]\r
-!endif\r
-!endif\r
-!include version.vc\r
-TK_VERSION = $(TK_DOTVERSION:.=)\r
-\r
-!if $(TKINSTALL)\r
-WISH           = "$(_TKDIR)\bin\wish$(TK_VERSION)$(SUFX).exe"\r
-!if !exist($(WISH)) && $(TCL_THREADS)\r
-WISH           = "$(_TKDIR)\bin\wish$(TK_VERSION)t$(SUFX).exe"\r
-!endif\r
-TKSTUBLIB      = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"\r
-TKIMPLIB       = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"\r
-TK_INCLUDES     = -I"$(_TKDIR)\include"\r
-TK_LIBRARY     = $(_TKDIR)\lib\r
-!else\r
-WISH           = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(WISH)) && $(TCL_THREADS)\r
-WISH           = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)t$(SUFX).exe"\r
-!endif\r
-TKSTUBLIB      = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"\r
-TKIMPLIB       = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"\r
-TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"\r
-TK_LIBRARY     = $(_TKDIR)\library\r
-!endif\r
-\r
-!endif\r
-!endif\r
-!endif\r
-\r
-\r
-#----------------------------------------------------------\r
-# Setup the fully qualified OUT_DIR path as OUT_DIR_PATH\r
-#----------------------------------------------------------\r
-!if [echo OUT_DIR_PATH = \>> version.vc] \\r
-    && [nmakehlp -Q "$(OUT_DIR)" >> version.vc]\r
-!endif\r
-!include version.vc\r
-\r
-\r
-#----------------------------------------------------------\r
-# Display stats being used.\r
-#----------------------------------------------------------\r
-\r
-!message *** Intermediate directory will be '$(TMP_DIR)'\r
-!message *** Output directory will be '$(OUT_DIR)'\r
-!message *** Suffix for binaries will be '$(SUFX)'\r
-!message *** Optional defines are '$(OPTDEFINES)'\r
-!message *** Compiler version $(VCVER). Target machine is $(MACHINE)\r
-!message *** Compiler options '$(COMPILERFLAGS) $(OPTIMIZATIONS) $(DEBUGFLAGS) $(WARNINGS)'\r
-!message *** Link options '$(LINKERFLAGS)'\r
-\r
-!endif\r
similarity index 99%
rename from pkgs/thread2.8.1/Makefile.in
rename to pkgs/thread2.8.2/Makefile.in
index a64c38b..27cbe63 100644 (file)
@@ -332,6 +332,7 @@ dist: dist-clean
        cp $(srcdir)/win/README.txt $(srcdir)/win/CONFIG $(srcdir)/win/thread.rc \
                $(srcdir)/win/threadWin.c $(srcdir)/win/makefile.vc \
                $(srcdir)/win/nmakehlp.c $(srcdir)/win/pkg.vc \
+               $(srcdir)/win/targets.vc $(srcdir)/win/rules-ext.vc \
                $(srcdir)/win/rules.vc   $(srcdir)/win/thread_win.dsw \
                $(srcdir)/win/thread_win.dsp $(DIST_DIR)/win/
 
similarity index 99%
rename from pkgs/thread2.8.1/configure
rename to pkgs/thread2.8.2/configure
index f66f1fd..e5a32e6 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for thread 2.8.1.
+# Generated by GNU Autoconf 2.69 for thread 2.8.2.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='thread'
 PACKAGE_TARNAME='thread'
-PACKAGE_VERSION='2.8.1'
-PACKAGE_STRING='thread 2.8.1'
+PACKAGE_VERSION='2.8.2'
+PACKAGE_STRING='thread 2.8.2'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1298,7 +1298,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures thread 2.8.1 to adapt to many kinds of systems.
+\`configure' configures thread 2.8.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1359,7 +1359,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of thread 2.8.1:";;
+     short | recursive ) echo "Configuration of thread 2.8.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1367,7 +1367,7 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-threads        build with threads
+  --enable-threads        build with threads (default: on)
   --enable-shared         build and link with shared libraries (default: on)
   --enable-stubs          build and link with stub libraries. Always true for
                           shared builds (default: on)
@@ -1464,7 +1464,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-thread configure 2.8.1
+thread configure 2.8.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1829,7 +1829,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by thread $as_me 2.8.1, which was
+It was created by thread $as_me 2.8.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -5167,16 +5167,6 @@ $as_echo "#define NO_ERRNO_H 1" >>confdefs.h
 fi
 
 
-    ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
-if test "x$ac_cv_header_float_h" = xyes; then :
-
-else
-
-$as_echo "#define NO_FLOAT_H 1" >>confdefs.h
-
-fi
-
-
     ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default"
 if test "x$ac_cv_header_values_h" = xyes; then :
 
@@ -7196,7 +7186,7 @@ fi
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5
 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; }
 if ${ac_cv_lib_network_inet_ntoa+:} false; then :
@@ -7423,7 +7413,7 @@ fi
            CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
 
            # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            if test $doRpath = yes; then :
 
@@ -7506,7 +7496,7 @@ fi
                SHLIB_CFLAGS="-fpic"
                ;;
            esac
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            if test $doRpath = yes; then :
 
@@ -7531,7 +7521,7 @@ fi
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            LDFLAGS="$LDFLAGS -export-dynamic"
            if test $doRpath = yes; then :
@@ -9533,7 +9523,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by thread $as_me 2.8.1, which was
+This file was extended by thread $as_me 2.8.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -9586,7 +9576,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-thread config.status 2.8.1
+thread config.status 2.8.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
similarity index 99%
rename from pkgs/thread2.8.1/configure.ac
rename to pkgs/thread2.8.2/configure.ac
index af648ba..8c598f9 100755 (executable)
@@ -17,7 +17,7 @@ dnl   to configure the system for the local environment.
 # so you can encode the package version directly into the source files.
 #-----------------------------------------------------------------------
 
-AC_INIT([thread], [2.8.1])
+AC_INIT([thread], [2.8.2])
 
 #--------------------------------------------------------------------
 # Call TEA_INIT as the first TEA_ macro to set up initial vars.
similarity index 99%
rename from pkgs/thread2.8.1/doc/html/ttrace.html
rename to pkgs/thread2.8.2/doc/html/ttrace.html
index 2af648a..c4271b8 100644 (file)
@@ -152,7 +152,7 @@ America Online.</p>
 with the Tcl threading extension:</p>
 <pre class="doctools_example">
     % package require Ttrace
-    2.8.1
+    2.8.2
     % set t1 [thread::create {package require Ttrace; thread::wait}]
     tid0x1802800
     % ttrace::eval {proc test args {return test-[thread::id]}}
similarity index 99%
rename from pkgs/thread2.8.1/doc/ttrace.man
rename to pkgs/thread2.8.2/doc/ttrace.man
index 05c6d43..244b16a 100644 (file)
@@ -21,7 +21,7 @@ with the Tcl threading extension:
 [example {
 
     % package require Ttrace
-    2.8.1
+    2.8.2
 
     % set t1 [thread::create {package require Ttrace; thread::wait}]
     tid0x1802800
similarity index 99%
rename from pkgs/thread2.8.1/generic/tclXkeylist.c
rename to pkgs/thread2.8.2/generic/tclXkeylist.c
index 6137e69..56722e6 100644 (file)
@@ -28,6 +28,7 @@
 #include "tclThreadInt.h"
 #include "threadSvCmd.h"
 #include "tclXkeylist.h"
+#include <stdarg.h>
 
 #ifdef STATIC_BUILD
 #if TCL_MAJOR_VERSION >= 9
similarity index 99%
rename from pkgs/thread2.8.1/generic/threadCmd.c
rename to pkgs/thread2.8.2/generic/threadCmd.c
index b77aebf..6ce5c2c 100644 (file)
@@ -27,7 +27,7 @@
  * files built as part of that shell. Example: basekits.
  */
 #ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "2.8.1"
+#define PACKAGE_VERSION "2.8.2"
 #endif
 
 /*
similarity index 98%
rename from pkgs/thread2.8.1/generic/threadSvCmd.c
rename to pkgs/thread2.8.2/generic/threadSvCmd.c
index 02857c0..a54f3b1 100644 (file)
@@ -47,6 +47,7 @@ static const Tcl_ObjType* booleanObjTypePtr;
 static const Tcl_ObjType* byteArrayObjTypePtr;
 static const Tcl_ObjType* doubleObjTypePtr;
 static const Tcl_ObjType* intObjTypePtr;
+static const Tcl_ObjType* wideIntObjTypePtr;
 static const Tcl_ObjType* stringObjTypePtr;
 
 /*
@@ -116,7 +117,7 @@ static Array* LockArray(Tcl_Interp*, const char*, int);
 static int ReleaseContainer(Tcl_Interp*, Container*, int);
 static int DeleteContainer(Container*);
 static int FlushArray(Array*);
-static int DeleteArray(Array*);
+static int DeleteArray(Tcl_Interp *, Array*);
 
 static void SvAllocateContainers(Bucket*);
 static void SvRegisterStdCommands(void);
@@ -836,20 +837,37 @@ CreateArray(
  */
 
 static int
-DeleteArray(Array *arrayPtr)
+UnbindArray(Tcl_Interp *interp, Array *arrayPtr)
 {
-    if (FlushArray(arrayPtr) == -1) {
-        return TCL_ERROR;
+    PsStore *psPtr = arrayPtr->psPtr;
+    if (arrayPtr->bindAddr) {
+        ckfree(arrayPtr->bindAddr);
+        arrayPtr->bindAddr = NULL;
     }
-    if (arrayPtr->psPtr) {
-        PsStore *psPtr = arrayPtr->psPtr;
+    if (psPtr) {
         if (psPtr->psClose(psPtr->psHandle) == -1) {
+            if (interp) {
+                const char *err = psPtr->psError(psPtr->psHandle);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(err, -1));
+            }
             return TCL_ERROR;
         }
         ckfree((char*)arrayPtr->psPtr), arrayPtr->psPtr = NULL;
+        arrayPtr->psPtr = NULL;
     }
-    if (arrayPtr->bindAddr) {
-        ckfree(arrayPtr->bindAddr);
+    return TCL_OK;
+}
+
+static int
+DeleteArray(Tcl_Interp *interp, Array *arrayPtr)
+{
+    if (FlushArray(arrayPtr) == -1) {
+        return TCL_ERROR;
+    }
+    if (arrayPtr->psPtr) {
+        if (UnbindArray(interp, arrayPtr) != TCL_OK) {
+            return TCL_ERROR;
+        };
     }
     if (arrayPtr->entryPtr) {
         Tcl_DeleteHashEntry(arrayPtr->entryPtr);
@@ -996,6 +1014,7 @@ Sv_DuplicateObj(objPtr)
                 || objPtr->typePtr == byteArrayObjTypePtr  \
                 || objPtr->typePtr == doubleObjTypePtr     \
                 || objPtr->typePtr == intObjTypePtr        \
+                || objPtr->typePtr == wideIntObjTypePtr    \
                 || objPtr->typePtr == stringObjTypePtr) {
                /*
                 * Cover all "safe" obj types (see header comment)
@@ -1381,20 +1400,15 @@ SvArrayObjCmd(
         }
 
     } else if (index == AUNBIND) {
-        if (arrayPtr && arrayPtr->psPtr) {
-            PsStore *psPtr = arrayPtr->psPtr;
-            if (psPtr->psClose(psPtr->psHandle) == -1) {
-                const char *err = psPtr->psError(psPtr->psHandle);
-                Tcl_SetObjResult(interp, Tcl_NewStringObj(err, -1));
-                ret = TCL_ERROR;
-                goto cmdExit;
-            }
-            ckfree((char*)arrayPtr->psPtr), arrayPtr->psPtr = NULL;
-        } else {
+        if (!arrayPtr || !arrayPtr->psPtr) {
             Tcl_AppendResult(interp, "shared variable is not bound", NULL);
             ret = TCL_ERROR;
             goto cmdExit;
         }
+        if (UnbindArray(interp, arrayPtr) != TCL_OK) {
+            ret = TCL_ERROR;
+            goto cmdExit;
+        }
     }
 
  cmdExit:
@@ -1446,7 +1460,7 @@ SvUnsetObjCmd(
     }
     if (objc == 2) {
         UnlockArray(arrayPtr);
-        if (DeleteArray(arrayPtr) != TCL_OK) {
+        if (DeleteArray(interp, arrayPtr) != TCL_OK) {
             return TCL_ERROR;
         }
     } else {
@@ -2237,6 +2251,10 @@ Sv_Init (interp)
     intObjTypePtr       = obj->typePtr;
     Tcl_DecrRefCount(obj);
 
+    obj = Tcl_NewWideIntObj(((Tcl_WideInt)1)<<35);
+    wideIntObjTypePtr       = obj->typePtr;
+    Tcl_DecrRefCount(obj);
+
     /*
      * Plug-in registered commands in current interpreter
      */
@@ -2352,7 +2370,10 @@ SvFinalize (ClientData clientData)
                 while (hashPtr != NULL) {
                     Array *arrayPtr = (Array*)Tcl_GetHashValue(hashPtr);
                     UnlockArray(arrayPtr);
-                    DeleteArray(arrayPtr);
+                    /* unbind array before delete (avoid flush of persistent storage) */
+                    UnbindArray(NULL, arrayPtr);
+                    /* flush, delete etc. */
+                    DeleteArray(NULL, arrayPtr);
                     hashPtr = Tcl_NextHashEntry(&search);
                 }
                 if (bucketPtr->lock) {
similarity index 99%
rename from pkgs/thread2.8.1/lib/ttrace.tcl
rename to pkgs/thread2.8.2/lib/ttrace.tcl
index a6363f5..16173f1 100644 (file)
@@ -73,7 +73,7 @@ namespace eval ttrace {
     }
 
     # Keep in sync with the Thread package
-    package provide Ttrace 2.8.1
+    package provide Ttrace 2.8.2
 
     # Package variables
     variable resolvers ""     ; # List of registered resolvers
diff --git a/pkgs/thread2.8.2/tclconfig/tcl.m4 b/pkgs/thread2.8.2/tclconfig/tcl.m4
new file mode 100644 (file)
index 0000000..e8234a2
--- /dev/null
@@ -0,0 +1,4335 @@
+# tcl.m4 --
+#
+#      This file provides a set of autoconf macros to help TEA-enable
+#      a Tcl extension.
+#
+# Copyright (c) 1999-2000 Ajuba Solutions.
+# Copyright (c) 2002-2005 ActiveState Corporation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+AC_PREREQ(2.57)
+
+dnl TEA extensions pass us the version of TEA they think they
+dnl are compatible with (must be set in TEA_INIT below)
+dnl TEA_VERSION="3.10"
+
+# Possible values for key variables defined:
+#
+# TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem')
+# TEA_PLATFORM        - windows unix
+# TEA_TK_EXTENSION    - True if this is a Tk extension
+#
+
+#------------------------------------------------------------------------
+# TEA_PATH_TCLCONFIG --
+#
+#      Locate the tclConfig.sh file and perform a sanity check on
+#      the Tcl compile flags
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-tcl=...
+#
+#      Defines the following vars:
+#              TCL_BIN_DIR     Full path to the directory containing
+#                              the tclConfig.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_TCLCONFIG], [
+    dnl TEA specific: Make sure we are initialized
+    AC_REQUIRE([TEA_INIT])
+    #
+    # Ok, lets find the tcl configuration
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-tcl
+    #
+
+    if test x"${no_tcl}" = x ; then
+       # we reset no_tcl in case something fails here
+       no_tcl=true
+       AC_ARG_WITH(tcl,
+           AC_HELP_STRING([--with-tcl],
+               [directory containing tcl configuration (tclConfig.sh)]),
+           with_tclconfig="${withval}")
+       AC_MSG_CHECKING([for Tcl configuration])
+       AC_CACHE_VAL(ac_cv_c_tclconfig,[
+
+           # First check to see if --with-tcl was specified.
+           if test x"${with_tclconfig}" != x ; then
+               case "${with_tclconfig}" in
+                   */tclConfig.sh )
+                       if test -f "${with_tclconfig}"; then
+                           AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself])
+                           with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`"
+                       fi ;;
+               esac
+               if test -f "${with_tclconfig}/tclConfig.sh" ; then
+                   ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`"
+               else
+                   AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
+               fi
+           fi
+
+           # then check for a private Tcl installation
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in \
+                       ../tcl \
+                       `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../tcl \
+                       `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../../tcl \
+                       `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # on Darwin, check in Framework installation locations
+           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
+               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
+                       `ls -d /Library/Frameworks 2>/dev/null` \
+                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
+                       `ls -d /System/Library/Frameworks 2>/dev/null` \
+                       ; do
+                   if test -f "$i/Tcl.framework/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # TEA specific: on Windows, check in common installation locations
+           if test "${TEA_PLATFORM}" = "windows" \
+               -a x"${ac_cv_c_tclconfig}" = x ; then
+               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
+                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few common install locations
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in `ls -d ${libdir} 2>/dev/null` \
+                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
+                       `ls -d ${prefix}/lib 2>/dev/null` \
+                       `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/pkg/lib 2>/dev/null` \
+                       `ls -d /usr/lib 2>/dev/null` \
+                       `ls -d /usr/lib64 2>/dev/null` \
+                       `ls -d /usr/lib/tcl8.6 2>/dev/null` \
+                       `ls -d /usr/lib/tcl8.5 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few other private locations
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in \
+                       ${srcdir}/../tcl \
+                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+       ])
+
+       if test x"${ac_cv_c_tclconfig}" = x ; then
+           TCL_BIN_DIR="# no Tcl configs found"
+           AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh])
+       else
+           no_tcl=
+           TCL_BIN_DIR="${ac_cv_c_tclconfig}"
+           AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_PATH_TKCONFIG --
+#
+#      Locate the tkConfig.sh file
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-tk=...
+#
+#      Defines the following vars:
+#              TK_BIN_DIR      Full path to the directory containing
+#                              the tkConfig.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_TKCONFIG], [
+    #
+    # Ok, lets find the tk configuration
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-tk
+    #
+
+    if test x"${no_tk}" = x ; then
+       # we reset no_tk in case something fails here
+       no_tk=true
+       AC_ARG_WITH(tk,
+           AC_HELP_STRING([--with-tk],
+               [directory containing tk configuration (tkConfig.sh)]),
+           with_tkconfig="${withval}")
+       AC_MSG_CHECKING([for Tk configuration])
+       AC_CACHE_VAL(ac_cv_c_tkconfig,[
+
+           # First check to see if --with-tkconfig was specified.
+           if test x"${with_tkconfig}" != x ; then
+               case "${with_tkconfig}" in
+                   */tkConfig.sh )
+                       if test -f "${with_tkconfig}"; then
+                           AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself])
+                           with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`"
+                       fi ;;
+               esac
+               if test -f "${with_tkconfig}/tkConfig.sh" ; then
+                   ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`"
+               else
+                   AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
+               fi
+           fi
+
+           # then check for a private Tk library
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in \
+                       ../tk \
+                       `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../tk \
+                       `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../../tk \
+                       `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # on Darwin, check in Framework installation locations
+           if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then
+               for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
+                       `ls -d /Library/Frameworks 2>/dev/null` \
+                       `ls -d /Network/Library/Frameworks 2>/dev/null` \
+                       `ls -d /System/Library/Frameworks 2>/dev/null` \
+                       ; do
+                   if test -f "$i/Tk.framework/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few common install locations
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in `ls -d ${libdir} 2>/dev/null` \
+                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
+                       `ls -d ${prefix}/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/lib 2>/dev/null` \
+                       `ls -d /usr/lib64 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # TEA specific: on Windows, check in common installation locations
+           if test "${TEA_PLATFORM}" = "windows" \
+               -a x"${ac_cv_c_tkconfig}" = x ; then
+               for i in `ls -d C:/Tcl/lib 2>/dev/null` \
+                       `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
+                       ; do
+                   if test -f "$i/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i; pwd)`"
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few other private locations
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in \
+                       ${srcdir}/../tk \
+                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test "${TEA_PLATFORM}" = "windows" \
+                           -a -f "$i/win/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
+                       break
+                   fi
+                   if test -f "$i/unix/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig="`(cd $i/unix; pwd)`"
+                       break
+                   fi
+               done
+           fi
+       ])
+
+       if test x"${ac_cv_c_tkconfig}" = x ; then
+           TK_BIN_DIR="# no Tk configs found"
+           AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh])
+       else
+           no_tk=
+           TK_BIN_DIR="${ac_cv_c_tkconfig}"
+           AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_TCLCONFIG --
+#
+#      Load the tclConfig.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              TCL_BIN_DIR
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TCL_BIN_DIR
+#              TCL_SRC_DIR
+#              TCL_LIB_FILE
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LOAD_TCLCONFIG], [
+    AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh])
+
+    if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
+        AC_MSG_RESULT([loading])
+       . "${TCL_BIN_DIR}/tclConfig.sh"
+    else
+        AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh])
+    fi
+
+    # eval is required to do the TCL_DBGX substitution
+    eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
+    eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
+
+    # If the TCL_BIN_DIR is the build directory (not the install directory),
+    # then set the common variable name to the value of the build variables.
+    # For example, the variable TCL_LIB_SPEC will be set to the value
+    # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
+    # instead of TCL_BUILD_LIB_SPEC since it will work with both an
+    # installed and uninstalled version of Tcl.
+    if test -f "${TCL_BIN_DIR}/Makefile" ; then
+        TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}"
+        TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}"
+        TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}"
+    elif test "`uname -s`" = "Darwin"; then
+       # If Tcl was built as a framework, attempt to use the libraries
+       # from the framework at the given location so that linking works
+       # against Tcl.framework installed in an arbitrary location.
+       case ${TCL_DEFS} in
+           *TCL_FRAMEWORK*)
+               if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
+                   for i in "`cd "${TCL_BIN_DIR}"; pwd`" \
+                            "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do
+                       if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then
+                           TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}"
+                           break
+                       fi
+                   done
+               fi
+               if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then
+                   TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}"
+                   TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"
+               fi
+               ;;
+       esac
+    fi
+
+    # eval is required to do the TCL_DBGX substitution
+    eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
+    eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
+    eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
+    eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
+
+    AC_SUBST(TCL_VERSION)
+    AC_SUBST(TCL_PATCH_LEVEL)
+    AC_SUBST(TCL_BIN_DIR)
+    AC_SUBST(TCL_SRC_DIR)
+
+    AC_SUBST(TCL_LIB_FILE)
+    AC_SUBST(TCL_LIB_FLAG)
+    AC_SUBST(TCL_LIB_SPEC)
+
+    AC_SUBST(TCL_STUB_LIB_FILE)
+    AC_SUBST(TCL_STUB_LIB_FLAG)
+    AC_SUBST(TCL_STUB_LIB_SPEC)
+
+    AC_MSG_CHECKING([platform])
+    hold_cc=$CC; CC="$TCL_CC"
+    AC_TRY_COMPILE(,[
+           #ifdef _WIN32
+               #error win32
+           #endif
+       ], [
+           TEA_PLATFORM="unix"
+           CYGPATH=echo
+       ], [
+           TEA_PLATFORM="windows"
+           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)   ]
+    )
+    CC=$hold_cc
+    AC_MSG_RESULT($TEA_PLATFORM)
+
+    # The BUILD_$pkg is to define the correct extern storage class
+    # handling when making this package
+    AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [],
+           [Building extension source?])
+    # Do this here as we have fully defined TEA_PLATFORM now
+    if test "${TEA_PLATFORM}" = "windows" ; then
+       EXEEXT=".exe"
+       CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp"
+    fi
+
+    # TEA specific:
+    AC_SUBST(CLEANFILES)
+    AC_SUBST(TCL_LIBS)
+    AC_SUBST(TCL_DEFS)
+    AC_SUBST(TCL_EXTRA_CFLAGS)
+    AC_SUBST(TCL_LD_FLAGS)
+    AC_SUBST(TCL_SHLIB_LD_LIBS)
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_TKCONFIG --
+#
+#      Load the tkConfig.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              TK_BIN_DIR
+#
+# Results:
+#
+#      Sets the following vars that should be in tkConfig.sh:
+#              TK_BIN_DIR
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LOAD_TKCONFIG], [
+    AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh])
+
+    if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then
+        AC_MSG_RESULT([loading])
+       . "${TK_BIN_DIR}/tkConfig.sh"
+    else
+        AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh])
+    fi
+
+    # eval is required to do the TK_DBGX substitution
+    eval "TK_LIB_FILE=\"${TK_LIB_FILE}\""
+    eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\""
+
+    # If the TK_BIN_DIR is the build directory (not the install directory),
+    # then set the common variable name to the value of the build variables.
+    # For example, the variable TK_LIB_SPEC will be set to the value
+    # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC
+    # instead of TK_BUILD_LIB_SPEC since it will work with both an
+    # installed and uninstalled version of Tcl.
+    if test -f "${TK_BIN_DIR}/Makefile" ; then
+        TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}"
+        TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}"
+        TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}"
+    elif test "`uname -s`" = "Darwin"; then
+       # If Tk was built as a framework, attempt to use the libraries
+       # from the framework at the given location so that linking works
+       # against Tk.framework installed in an arbitrary location.
+       case ${TK_DEFS} in
+           *TK_FRAMEWORK*)
+               if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then
+                   for i in "`cd "${TK_BIN_DIR}"; pwd`" \
+                            "`cd "${TK_BIN_DIR}"/../..; pwd`"; do
+                       if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then
+                           TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}"
+                           break
+                       fi
+                   done
+               fi
+               if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then
+                   TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}"  | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}"
+                   TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"
+               fi
+               ;;
+       esac
+    fi
+
+    # eval is required to do the TK_DBGX substitution
+    eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\""
+    eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\""
+    eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\""
+    eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\""
+
+    # TEA specific: Ensure windowingsystem is defined
+    if test "${TEA_PLATFORM}" = "unix" ; then
+       case ${TK_DEFS} in
+           *MAC_OSX_TK*)
+               AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?])
+               TEA_WINDOWINGSYSTEM="aqua"
+               ;;
+           *)
+               TEA_WINDOWINGSYSTEM="x11"
+               ;;
+       esac
+    elif test "${TEA_PLATFORM}" = "windows" ; then
+       TEA_WINDOWINGSYSTEM="win32"
+    fi
+
+    AC_SUBST(TK_VERSION)
+    AC_SUBST(TK_BIN_DIR)
+    AC_SUBST(TK_SRC_DIR)
+
+    AC_SUBST(TK_LIB_FILE)
+    AC_SUBST(TK_LIB_FLAG)
+    AC_SUBST(TK_LIB_SPEC)
+
+    AC_SUBST(TK_STUB_LIB_FILE)
+    AC_SUBST(TK_STUB_LIB_FLAG)
+    AC_SUBST(TK_STUB_LIB_SPEC)
+
+    # TEA specific:
+    AC_SUBST(TK_LIBS)
+    AC_SUBST(TK_XINCLUDES)
+])
+
+#------------------------------------------------------------------------
+# TEA_PROG_TCLSH
+#      Determine the fully qualified path name of the tclsh executable
+#      in the Tcl build directory or the tclsh installed in a bin
+#      directory. This macro will correctly determine the name
+#      of the tclsh executable even if tclsh has not yet been
+#      built in the build directory. The tclsh found is always
+#      associated with a tclConfig.sh file. This tclsh should be used
+#      only for running extension test cases. It should never be
+#      or generation of files (like pkgIndex.tcl) at build time.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              TCLSH_PROG
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PROG_TCLSH], [
+    AC_MSG_CHECKING([for tclsh])
+    if test -f "${TCL_BIN_DIR}/Makefile" ; then
+        # tclConfig.sh is in Tcl build directory
+        if test "${TEA_PLATFORM}" = "windows"; then
+          if test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
+          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}s${EXEEXT}"
+          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}t${EXEEXT}"
+          elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}" ; then
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}st${EXEEXT}"
+          fi
+        else
+            TCLSH_PROG="${TCL_BIN_DIR}/tclsh"
+        fi
+    else
+        # tclConfig.sh is in install location
+        if test "${TEA_PLATFORM}" = "windows"; then
+            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}"
+        else
+            TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}"
+        fi
+        list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \
+              `ls -d ${TCL_BIN_DIR}/..     2>/dev/null` \
+              `ls -d ${TCL_PREFIX}/bin     2>/dev/null`"
+        for i in $list ; do
+            if test -f "$i/${TCLSH_PROG}" ; then
+                REAL_TCL_BIN_DIR="`cd "$i"; pwd`/"
+                break
+            fi
+        done
+        TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}"
+    fi
+    AC_MSG_RESULT([${TCLSH_PROG}])
+    AC_SUBST(TCLSH_PROG)
+])
+
+#------------------------------------------------------------------------
+# TEA_PROG_WISH
+#      Determine the fully qualified path name of the wish executable
+#      in the Tk build directory or the wish installed in a bin
+#      directory. This macro will correctly determine the name
+#      of the wish executable even if wish has not yet been
+#      built in the build directory. The wish found is always
+#      associated with a tkConfig.sh file. This wish should be used
+#      only for running extension test cases. It should never be
+#      or generation of files (like pkgIndex.tcl) at build time.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              WISH_PROG
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PROG_WISH], [
+    AC_MSG_CHECKING([for wish])
+    if test -f "${TK_BIN_DIR}/Makefile" ; then
+        # tkConfig.sh is in Tk build directory
+        if test "${TEA_PLATFORM}" = "windows"; then
+          if test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
+          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}s${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}$s{EXEEXT}"
+          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}t${EXEEXT}"
+          elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}" ; then
+            WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}st${EXEEXT}"
+          fi
+        else
+            WISH_PROG="${TK_BIN_DIR}/wish"
+        fi
+    else
+        # tkConfig.sh is in install location
+        if test "${TEA_PLATFORM}" = "windows"; then
+            WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}"
+        else
+            WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}"
+        fi
+        list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \
+              `ls -d ${TK_BIN_DIR}/..     2>/dev/null` \
+              `ls -d ${TK_PREFIX}/bin     2>/dev/null`"
+        for i in $list ; do
+            if test -f "$i/${WISH_PROG}" ; then
+                REAL_TK_BIN_DIR="`cd "$i"; pwd`/"
+                break
+            fi
+        done
+        WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}"
+    fi
+    AC_MSG_RESULT([${WISH_PROG}])
+    AC_SUBST(WISH_PROG)
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_SHARED --
+#
+#      Allows the building of shared libraries
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-shared=yes|no
+#              --enable-stubs=yes|no
+#
+#      Defines the following vars:
+#              STATIC_BUILD    Used for building import/export libraries
+#                              on Windows.
+#
+#      Sets the following vars:
+#              SHARED_BUILD    Value of 1 or 0
+#               STUBS_BUILD     Value if 1 or 0
+#               USE_TCL_STUBS   Value true: if SHARED_BUILD or --enable-stubs
+#               USE_TCLOO_STUBS Value true: if SHARED_BUILD or --enable-stubs
+#               USE_TK_STUBS    Value true: if SHARED_BUILD or --enable-stubs
+#                                AND TEA_WINDOWING_SYSTEM != ""
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ENABLE_SHARED], [
+    AC_MSG_CHECKING([how to build libraries])
+    AC_ARG_ENABLE(shared,
+       AC_HELP_STRING([--enable-shared],
+           [build and link with shared libraries (default: on)]),
+       [shared_ok=$enableval], [shared_ok=yes])
+
+    if test "${enable_shared+set}" = set; then
+       enableval="$enable_shared"
+       shared_ok=$enableval
+    else
+       shared_ok=yes
+    fi
+
+    AC_ARG_ENABLE(stubs,
+       AC_HELP_STRING([--enable-stubs],
+           [build and link with stub libraries. Always true for shared builds (default: on)]),
+       [stubs_ok=$enableval], [stubs_ok=yes])
+
+    if test "${enable_stubs+set}" = set; then
+       enableval="$enable_stubs"
+       stubs_ok=$enableval
+    else
+       stubs_ok=yes
+    fi
+
+    # Stubs are always enabled for shared builds
+    if test "$shared_ok" = "yes" ; then
+       AC_MSG_RESULT([shared])
+       SHARED_BUILD=1
+        STUBS_BUILD=1
+    else
+       AC_MSG_RESULT([static])
+       SHARED_BUILD=0
+       AC_DEFINE(STATIC_BUILD, 1, [This a static build])
+        if test "$stubs_ok" = "yes" ; then
+          STUBS_BUILD=1
+        else
+          STUBS_BUILD=0
+        fi
+    fi
+    if test "${STUBS_BUILD}" = "1" ; then
+      AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs])
+      AC_DEFINE(USE_TCLOO_STUBS, 1, [Use TclOO stubs])
+      if test "${TEA_WINDOWINGSYSTEM}" != ""; then
+        AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs])
+      fi
+    fi
+
+    AC_SUBST(SHARED_BUILD)
+    AC_SUBST(STUBS_BUILD)
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_THREADS --
+#
+#      Specify if thread support should be enabled.  If "yes" is specified
+#      as an arg (optional), threads are enabled by default, "no" means
+#      threads are disabled.  "yes" is the default.
+#
+#      TCL_THREADS is checked so that if you are compiling an extension
+#      against a threaded core, your extension must be compiled threaded
+#      as well.
+#
+#      Note that it is legal to have a thread enabled extension run in a
+#      threaded or non-threaded Tcl core, but a non-threaded extension may
+#      only run in a non-threaded Tcl core.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-threads
+#
+#      Sets the following vars:
+#              THREADS_LIBS    Thread library(s)
+#
+#      Defines the following vars:
+#              TCL_THREADS
+#              _REENTRANT
+#              _THREAD_SAFE
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_ENABLE_THREADS], [
+    AC_ARG_ENABLE(threads,
+       AC_HELP_STRING([--enable-threads],
+           [build with threads (default: on)]),
+       [tcl_ok=$enableval], [tcl_ok=yes])
+
+    if test "${enable_threads+set}" = set; then
+       enableval="$enable_threads"
+       tcl_ok=$enableval
+    else
+       tcl_ok=yes
+    fi
+
+    if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
+       TCL_THREADS=1
+
+       if test "${TEA_PLATFORM}" != "windows" ; then
+           # We are always OK on Windows, so check what this platform wants:
+
+           # USE_THREAD_ALLOC tells us to try the special thread-based
+           # allocator that significantly reduces lock contention
+           AC_DEFINE(USE_THREAD_ALLOC, 1,
+               [Do we want to use the threaded memory allocator?])
+           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
+           if test "`uname -s`" = "SunOS" ; then
+               AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
+                       [Do we really want to follow the standard? Yes we do!])
+           fi
+           AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?])
+           AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
+           if test "$tcl_ok" = "no"; then
+               # Check a little harder for __pthread_mutex_init in the same
+               # library, as some systems hide it there until pthread.h is
+               # defined.  We could alternatively do an AC_TRY_COMPILE with
+               # pthread.h, but that will work with libpthread really doesn't
+               # exist, like AIX 4.2.  [Bug: 4359]
+               AC_CHECK_LIB(pthread, __pthread_mutex_init,
+                   tcl_ok=yes, tcl_ok=no)
+           fi
+
+           if test "$tcl_ok" = "yes"; then
+               # The space is needed
+               THREADS_LIBS=" -lpthread"
+           else
+               AC_CHECK_LIB(pthreads, pthread_mutex_init,
+                   tcl_ok=yes, tcl_ok=no)
+               if test "$tcl_ok" = "yes"; then
+                   # The space is needed
+                   THREADS_LIBS=" -lpthreads"
+               else
+                   AC_CHECK_LIB(c, pthread_mutex_init,
+                       tcl_ok=yes, tcl_ok=no)
+                   if test "$tcl_ok" = "no"; then
+                       AC_CHECK_LIB(c_r, pthread_mutex_init,
+                           tcl_ok=yes, tcl_ok=no)
+                       if test "$tcl_ok" = "yes"; then
+                           # The space is needed
+                           THREADS_LIBS=" -pthread"
+                       else
+                           TCL_THREADS=0
+                           AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled])
+                       fi
+                   fi
+               fi
+           fi
+       fi
+    else
+       TCL_THREADS=0
+    fi
+    # Do checking message here to not mess up interleaved configure output
+    AC_MSG_CHECKING([for building with threads])
+    if test "${TCL_THREADS}" = 1; then
+       AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?])
+       AC_MSG_RESULT([yes (default)])
+    else
+       AC_MSG_RESULT([no])
+    fi
+    # TCL_THREADS sanity checking.  See if our request for building with
+    # threads is the same as the way Tcl was built.  If not, warn the user.
+    case ${TCL_DEFS} in
+       *THREADS=1*)
+           if test "${TCL_THREADS}" = "0"; then
+               AC_MSG_WARN([
+    Building ${PACKAGE_NAME} without threads enabled, but building against Tcl
+    that IS thread-enabled.  It is recommended to use --enable-threads.])
+           fi
+           ;;
+       *)
+           if test "${TCL_THREADS}" = "1"; then
+               AC_MSG_WARN([
+    --enable-threads requested, but building against a Tcl that is NOT
+    thread-enabled.  This is an OK configuration that will also run in
+    a thread-enabled core.])
+           fi
+           ;;
+    esac
+    AC_SUBST(TCL_THREADS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_SYMBOLS --
+#
+#      Specify if debugging symbols should be used.
+#      Memory (TCL_MEM_DEBUG) debugging can also be enabled.
+#
+# Arguments:
+#      none
+#
+#      TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives
+#      the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted.
+#      Requires the following vars to be set in the Makefile:
+#              CFLAGS_DEFAULT
+#              LDFLAGS_DEFAULT
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-symbols
+#
+#      Defines the following vars:
+#              CFLAGS_DEFAULT  Sets to $(CFLAGS_DEBUG) if true
+#                              Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false
+#              LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
+#                              Sets to $(LDFLAGS_OPTIMIZE) if false
+#              DBGX            Formerly used as debug library extension;
+#                              always blank now.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_ENABLE_SYMBOLS], [
+    dnl TEA specific: Make sure we are initialized
+    AC_REQUIRE([TEA_CONFIG_CFLAGS])
+    AC_MSG_CHECKING([for build with symbols])
+    AC_ARG_ENABLE(symbols,
+       AC_HELP_STRING([--enable-symbols],
+           [build with debugging symbols (default: off)]),
+       [tcl_ok=$enableval], [tcl_ok=no])
+    DBGX=""
+    if test "$tcl_ok" = "no"; then
+       CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG"
+       LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
+       AC_MSG_RESULT([no])
+    else
+       CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
+       LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
+       if test "$tcl_ok" = "yes"; then
+           AC_MSG_RESULT([yes (standard debugging)])
+       fi
+    fi
+    # TEA specific:
+    if test "${TEA_PLATFORM}" != "windows" ; then
+       LDFLAGS_DEFAULT="${LDFLAGS}"
+    fi
+    AC_SUBST(CFLAGS_DEFAULT)
+    AC_SUBST(LDFLAGS_DEFAULT)
+    AC_SUBST(TCL_DBGX)
+
+    if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
+       AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?])
+    fi
+
+    if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
+       if test "$tcl_ok" = "all"; then
+           AC_MSG_RESULT([enabled symbols mem debugging])
+       else
+           AC_MSG_RESULT([enabled $tcl_ok debugging])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_ENABLE_LANGINFO --
+#
+#      Allows use of modern nl_langinfo check for better l10n.
+#      This is only relevant for Unix.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-langinfo=yes|no (default is yes)
+#
+#      Defines the following vars:
+#              HAVE_LANGINFO   Triggers use of nl_langinfo if defined.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_ENABLE_LANGINFO], [
+    AC_ARG_ENABLE(langinfo,
+       AC_HELP_STRING([--enable-langinfo],
+           [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]),
+       [langinfo_ok=$enableval], [langinfo_ok=yes])
+
+    HAVE_LANGINFO=0
+    if test "$langinfo_ok" = "yes"; then
+       AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no])
+    fi
+    AC_MSG_CHECKING([whether to use nl_langinfo])
+    if test "$langinfo_ok" = "yes"; then
+       AC_CACHE_VAL(tcl_cv_langinfo_h, [
+           AC_TRY_COMPILE([#include <langinfo.h>], [nl_langinfo(CODESET);],
+                   [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])])
+       AC_MSG_RESULT([$tcl_cv_langinfo_h])
+       if test $tcl_cv_langinfo_h = yes; then
+           AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?])
+       fi
+    else
+       AC_MSG_RESULT([$langinfo_ok])
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_CONFIG_SYSTEM
+#
+#      Determine what the system is (some things cannot be easily checked
+#      on a feature-driven basis, alas). This can usually be done via the
+#      "uname" command.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Defines the following var:
+#
+#      system -        System/platform/version identification code.
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_CONFIG_SYSTEM], [
+    AC_CACHE_CHECK([system version], tcl_cv_sys_version, [
+       # TEA specific:
+       if test "${TEA_PLATFORM}" = "windows" ; then
+           tcl_cv_sys_version=windows
+       else
+           tcl_cv_sys_version=`uname -s`-`uname -r`
+           if test "$?" -ne 0 ; then
+               AC_MSG_WARN([can't find uname command])
+               tcl_cv_sys_version=unknown
+           else
+               if test "`uname -s`" = "AIX" ; then
+                   tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
+               fi
+           fi
+       fi
+    ])
+    system=$tcl_cv_sys_version
+])
+
+#--------------------------------------------------------------------
+# TEA_CONFIG_CFLAGS
+#
+#      Try to determine the proper flags to pass to the compiler
+#      for building shared libraries and other such nonsense.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines and substitutes the following vars:
+#
+#      DL_OBJS, DL_LIBS - removed for TEA, only needed by core.
+#       LDFLAGS -      Flags to pass to the compiler when linking object
+#                       files into an executable application binary such
+#                       as tclsh.
+#       LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
+#                       that tell the run-time dynamic linker where to look
+#                       for shared libraries such as libtcl.so.  Depends on
+#                       the variable LIB_RUNTIME_DIR in the Makefile. Could
+#                       be the same as CC_SEARCH_FLAGS if ${CC} is used to link.
+#       CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib",
+#                       that tell the run-time dynamic linker where to look
+#                       for shared libraries such as libtcl.so.  Depends on
+#                       the variable LIB_RUNTIME_DIR in the Makefile.
+#       SHLIB_CFLAGS -  Flags to pass to cc when compiling the components
+#                       of a shared library (may request position-independent
+#                       code, among other things).
+#       SHLIB_LD -      Base command to use for combining object files
+#                       into a shared library.
+#       SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
+#                       creating shared libraries.  This symbol typically
+#                       goes at the end of the "ld" commands that build
+#                       shared libraries. The value of the symbol defaults to
+#                       "${LIBS}" if all of the dependent libraries should
+#                       be specified when creating a shared library.  If
+#                       dependent libraries should not be specified (as on
+#                       SunOS 4.x, where they cause the link to fail, or in
+#                       general if Tcl and Tk aren't themselves shared
+#                       libraries), then this symbol has an empty string
+#                       as its value.
+#       SHLIB_SUFFIX -  Suffix to use for the names of dynamically loadable
+#                       extensions.  An empty string means we don't know how
+#                       to use shared libraries on this platform.
+#       LIB_SUFFIX -    Specifies everything that comes after the "libfoo"
+#                       in a static or shared library name, using the $PACKAGE_VERSION variable
+#                       to put the version in the right place.  This is used
+#                       by platforms that need non-standard library names.
+#                       Examples:  ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs
+#                       to have a version after the .so, and ${PACKAGE_VERSION}.a
+#                       on AIX, since a shared library needs to have
+#                       a .a extension whereas shared objects for loadable
+#                       extensions have a .so extension.  Defaults to
+#                       ${PACKAGE_VERSION}${SHLIB_SUFFIX}.
+#      CFLAGS_DEBUG -
+#                      Flags used when running the compiler in debug mode
+#      CFLAGS_OPTIMIZE -
+#                      Flags used when running the compiler in optimize mode
+#      CFLAGS -        Additional CFLAGS added as necessary (usually 64-bit)
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_CONFIG_CFLAGS], [
+    dnl TEA specific: Make sure we are initialized
+    AC_REQUIRE([TEA_INIT])
+
+    # Step 0.a: Enable 64 bit support?
+
+    AC_MSG_CHECKING([if 64bit support is requested])
+    AC_ARG_ENABLE(64bit,
+       AC_HELP_STRING([--enable-64bit],
+           [enable 64bit support (default: off)]),
+       [do64bit=$enableval], [do64bit=no])
+    AC_MSG_RESULT([$do64bit])
+
+    # Step 0.b: Enable Solaris 64 bit VIS support?
+
+    AC_MSG_CHECKING([if 64bit Sparc VIS support is requested])
+    AC_ARG_ENABLE(64bit-vis,
+       AC_HELP_STRING([--enable-64bit-vis],
+           [enable 64bit Sparc VIS support (default: off)]),
+       [do64bitVIS=$enableval], [do64bitVIS=no])
+    AC_MSG_RESULT([$do64bitVIS])
+    # Force 64bit on with VIS
+    AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes])
+
+    # Step 0.c: Check if visibility support is available. Do this here so
+    # that platform specific alternatives can be used below if this fails.
+
+    AC_CACHE_CHECK([if compiler supports visibility "hidden"],
+       tcl_cv_cc_visibility_hidden, [
+       hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror"
+       AC_TRY_LINK([
+           extern __attribute__((__visibility__("hidden"))) void f(void);
+           void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes,
+           tcl_cv_cc_visibility_hidden=no)
+       CFLAGS=$hold_cflags])
+    AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [
+       AC_DEFINE(MODULE_SCOPE,
+           [extern __attribute__((__visibility__("hidden")))],
+           [Compiler support for module scope symbols])
+       AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols])
+    ])
+
+    # Step 0.d: Disable -rpath support?
+
+    AC_MSG_CHECKING([if rpath support is requested])
+    AC_ARG_ENABLE(rpath,
+       AC_HELP_STRING([--disable-rpath],
+           [disable rpath support (default: on)]),
+       [doRpath=$enableval], [doRpath=yes])
+    AC_MSG_RESULT([$doRpath])
+
+    # TEA specific: Cross-compiling options for Windows/CE builds?
+
+    AS_IF([test "${TEA_PLATFORM}" = windows], [
+       AC_MSG_CHECKING([if Windows/CE build is requested])
+       AC_ARG_ENABLE(wince,
+           AC_HELP_STRING([--enable-wince],
+               [enable Win/CE support (where applicable)]),
+           [doWince=$enableval], [doWince=no])
+       AC_MSG_RESULT([$doWince])
+    ])
+
+    # Set the variable "system" to hold the name and version number
+    # for the system.
+
+    TEA_CONFIG_SYSTEM
+
+    # Require ranlib early so we can override it in special cases below.
+
+    AC_REQUIRE([AC_PROG_RANLIB])
+
+    # Set configuration options based on system name and version.
+    # This is similar to Tcl's unix/tcl.m4 except that we've added a
+    # "windows" case and removed some core-only vars.
+
+    do64bit_ok=no
+    # default to '{$LIBS}' and set to "" on per-platform necessary basis
+    SHLIB_LD_LIBS='${LIBS}'
+    # When ld needs options to work in 64-bit mode, put them in
+    # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load]
+    # is disabled by the user. [Bug 1016796]
+    LDFLAGS_ARCH=""
+    UNSHARED_LIB_SUFFIX=""
+    # TEA specific: use PACKAGE_VERSION instead of VERSION
+    TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`'
+    ECHO_VERSION='`echo ${PACKAGE_VERSION}`'
+    TCL_LIB_VERSIONS_OK=ok
+    CFLAGS_DEBUG=-g
+    AS_IF([test "$GCC" = yes], [
+       CFLAGS_OPTIMIZE=-O2
+       CFLAGS_WARNING="-Wall"
+    ], [
+       CFLAGS_OPTIMIZE=-O
+       CFLAGS_WARNING=""
+    ])
+    AC_CHECK_TOOL(AR, ar)
+    STLIB_LD='${AR} cr'
+    LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
+    AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION=""],[SHLIB_VERSION=".$SHLIB_VERSION"])
+    case $system in
+       # TEA specific:
+       windows)
+           # This is a 2-stage check to make sure we have the 64-bit SDK
+           # We have to know where the SDK is installed.
+           # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs
+           # MACHINE is IX86 for LINK, but this is used by the manifest,
+           # which requires x86|amd64|ia64.
+           MACHINE="X86"
+           if test "$do64bit" != "no" ; then
+               if test "x${MSSDK}x" = "xx" ; then
+                   MSSDK="C:/Progra~1/Microsoft Platform SDK"
+               fi
+               MSSDK=`echo "$MSSDK" | sed -e  's!\\\!/!g'`
+               PATH64=""
+               case "$do64bit" in
+                   amd64|x64|yes)
+                       MACHINE="AMD64" ; # default to AMD64 64-bit build
+                       PATH64="${MSSDK}/Bin/Win64/x86/AMD64"
+                       ;;
+                   ia64)
+                       MACHINE="IA64"
+                       PATH64="${MSSDK}/Bin/Win64"
+                       ;;
+               esac
+               if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then
+                   AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode])
+                   AC_MSG_WARN([Ensure latest Platform SDK is installed])
+                   do64bit="no"
+               else
+                   AC_MSG_RESULT([   Using 64-bit $MACHINE mode])
+                   do64bit_ok="yes"
+               fi
+           fi
+
+           if test "$doWince" != "no" ; then
+               if test "$do64bit" != "no" ; then
+                   AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible])
+               fi
+               if test "$GCC" = "yes" ; then
+                   AC_MSG_ERROR([Windows/CE and GCC builds incompatible])
+               fi
+               TEA_PATH_CELIB
+               # Set defaults for common evc4/PPC2003 setup
+               # Currently Tcl requires 300+, possibly 420+ for sockets
+               CEVERSION=420;          # could be 211 300 301 400 420 ...
+               TARGETCPU=ARMV4;        # could be ARMV4 ARM MIPS SH3 X86 ...
+               ARCH=ARM;               # could be ARM MIPS X86EM ...
+               PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
+               if test "$doWince" != "yes"; then
+                   # If !yes then the user specified something
+                   # Reset ARCH to allow user to skip specifying it
+                   ARCH=
+                   eval `echo $doWince | awk -F, '{ \
+           if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \
+           if ([$]1 < 400)   { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
+           if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \
+           if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \
+           if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \
+                   }'`
+                   if test "x${ARCH}" = "x" ; then
+                       ARCH=$TARGETCPU;
+                   fi
+               fi
+               OSVERSION=WCE$CEVERSION;
+               if test "x${WCEROOT}" = "x" ; then
+                       WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
+                   if test ! -d "${WCEROOT}" ; then
+                       WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
+                   fi
+               fi
+               if test "x${SDKROOT}" = "x" ; then
+                   SDKROOT="C:/Program Files/Windows CE Tools"
+                   if test ! -d "${SDKROOT}" ; then
+                       SDKROOT="C:/Windows CE Tools"
+                   fi
+               fi
+               WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
+               SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
+               if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \
+                   -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
+                   AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]])
+                   doWince="no"
+               else
+                   # We could PATH_NOSPACE these, but that's not important,
+                   # as long as we quote them when used.
+                   CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
+                   if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
+                       CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
+                   fi
+                   CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
+               fi
+           fi
+
+           if test "$GCC" != "yes" ; then
+               if test "${SHARED_BUILD}" = "0" ; then
+                   runtime=-MT
+               else
+                   runtime=-MD
+               fi
+               case "x`echo \${VisualStudioVersion}`" in
+                   x1[[4-9]]*)
+                       lflags="${lflags} -nodefaultlib:libucrt.lib"
+                       TEA_ADD_LIBS([ucrt.lib])
+                   ;;
+                   *)
+                   ;;
+               esac
+
+                if test "$do64bit" != "no" ; then
+                   # All this magic is necessary for the Win64 SDK RC1 - hobbs
+                   CC="\"${PATH64}/cl.exe\""
+                   CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\""
+                   RC="\"${MSSDK}/bin/rc.exe\""
+                   lflags="${lflags} -nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\""
+                   LINKBIN="\"${PATH64}/link.exe\""
+                   CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d"
+                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
+                   # Avoid 'unresolved external symbol __security_cookie'
+                   # errors, c.f. http://support.microsoft.com/?id=894573
+                   TEA_ADD_LIBS([bufferoverflowU.lib])
+               elif test "$doWince" != "no" ; then
+                   CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
+                   if test "${TARGETCPU}" = "X86"; then
+                       CC="\"${CEBINROOT}/cl.exe\""
+                   else
+                       CC="\"${CEBINROOT}/cl${ARCH}.exe\""
+                   fi
+                   CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
+                   RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
+                   arch=`echo ${ARCH} | awk '{print tolower([$]0)}'`
+                   defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS"
+                   if test "${SHARED_BUILD}" = "1" ; then
+                       # Static CE builds require static celib as well
+                       defs="${defs} _DLL"
+                   fi
+                   for i in $defs ; do
+                       AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i)
+                   done
+                   AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version])
+                   AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version])
+                   CFLAGS_DEBUG="-nologo -Zi -Od"
+                   CFLAGS_OPTIMIZE="-nologo -Ox"
+                   lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
+                   lflags="${lflags} -MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
+                   LINKBIN="\"${CEBINROOT}/link.exe\""
+                   AC_SUBST(CELIB_DIR)
+               else
+                   RC="rc"
+                   lflags="${lflags} -nologo"
+                   LINKBIN="link"
+                   CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d"
+                   CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}"
+               fi
+           fi
+
+           if test "$GCC" = "yes"; then
+               # mingw gcc mode
+               AC_CHECK_TOOL(RC, windres)
+               CFLAGS_DEBUG="-g"
+               CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
+               SHLIB_LD='${CC} -shared'
+               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
+               LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}"
+               LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}"
+
+               AC_CACHE_CHECK(for cross-compile version of gcc,
+                       ac_cv_cross,
+                       AC_TRY_COMPILE([
+                           #ifdef _WIN32
+                               #error cross-compiler
+                           #endif
+                       ], [],
+                       ac_cv_cross=yes,
+                       ac_cv_cross=no)
+                     )
+                     if test "$ac_cv_cross" = "yes"; then
+                       case "$do64bit" in
+                           amd64|x64|yes)
+                               CC="x86_64-w64-mingw32-gcc"
+                               LD="x86_64-w64-mingw32-ld"
+                               AR="x86_64-w64-mingw32-ar"
+                               RANLIB="x86_64-w64-mingw32-ranlib"
+                               RC="x86_64-w64-mingw32-windres"
+                           ;;
+                           *)
+                               CC="i686-w64-mingw32-gcc"
+                               LD="i686-w64-mingw32-ld"
+                               AR="i686-w64-mingw32-ar"
+                               RANLIB="i686-w64-mingw32-ranlib"
+                               RC="i686-w64-mingw32-windres"
+                           ;;
+                       esac
+               fi
+
+           else
+               SHLIB_LD="${LINKBIN} -dll ${lflags}"
+               # link -lib only works when -lib is the first arg
+               STLIB_LD="${LINKBIN} -lib ${lflags}"
+               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib'
+               PATHTYPE=-w
+               # For information on what debugtype is most useful, see:
+               # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
+               # and also
+               # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx
+               # This essentially turns it all on.
+               LDFLAGS_DEBUG="-debug -debugtype:cv"
+               LDFLAGS_OPTIMIZE="-release"
+               if test "$doWince" != "no" ; then
+                   LDFLAGS_CONSOLE="-link ${lflags}"
+                   LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
+               else
+                   LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
+                   LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
+               fi
+           fi
+
+           SHLIB_SUFFIX=".dll"
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll'
+
+           TCL_LIB_VERSIONS_OK=nodots
+           ;;
+       AIX-*)
+           AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [
+               # AIX requires the _r compiler when gcc isn't being used
+               case "${CC}" in
+                   *_r|*_r\ *)
+                       # ok ...
+                       ;;
+                   *)
+                       # Make sure only first arg gets _r
+                       CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'`
+                       ;;
+               esac
+               AC_MSG_RESULT([Using $CC for compiling with threads])
+           ])
+           LIBS="$LIBS -lc"
+           SHLIB_CFLAGS=""
+           SHLIB_SUFFIX=".so"
+
+           LD_LIBRARY_PATH_VAR="LIBPATH"
+
+           # Check to enable 64-bit flags for compiler/linker
+           AS_IF([test "$do64bit" = yes], [
+               AS_IF([test "$GCC" = yes], [
+                   AC_MSG_WARN([64bit mode not supported with GCC on $system])
+               ], [
+                   do64bit_ok=yes
+                   CFLAGS="$CFLAGS -q64"
+                   LDFLAGS_ARCH="-q64"
+                   RANLIB="${RANLIB} -X64"
+                   AR="${AR} -X64"
+                   SHLIB_LD_FLAGS="-b64"
+               ])
+           ])
+
+           AS_IF([test "`uname -m`" = ia64], [
+               # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
+               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
+               AS_IF([test "$GCC" = yes], [
+                   CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               ], [
+                   CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
+               ])
+               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
+           ], [
+               AS_IF([test "$GCC" = yes], [
+                   SHLIB_LD='${CC} -shared -Wl,-bexpall'
+               ], [
+                   SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry"
+                   LDFLAGS="$LDFLAGS -brtl"
+               ])
+               SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}"
+               CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ])
+           ;;
+       BeOS*)
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD='${CC} -nostart'
+           SHLIB_SUFFIX=".so"
+
+           #-----------------------------------------------------------
+           # Check for inet_ntoa in -lbind, for BeOS (which also needs
+           # -lsocket, even if the network functions are in -lnet which
+           # is always linked to, for compatibility.
+           #-----------------------------------------------------------
+           AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"])
+           ;;
+       BSD/OS-4.*)
+           SHLIB_CFLAGS="-export-dynamic -fPIC"
+           SHLIB_LD='${CC} -shared'
+           SHLIB_SUFFIX=".so"
+           LDFLAGS="$LDFLAGS -export-dynamic"
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       CYGWIN_*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD='${CC} -shared'
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$[@].a"
+           SHLIB_SUFFIX=".dll"
+           EXEEXT=".exe"
+           do64bit_ok=yes
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       Haiku*)
+           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_SUFFIX=".so"
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
+           AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
+           ;;
+       HP-UX-*.11.*)
+           # Use updated header definitions where possible
+           AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?])
+           # TEA specific: Needed by Tcl, but not most extensions
+           #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?])
+           #LIBS="$LIBS -lxnet"               # Use the XOPEN network library
+
+           AS_IF([test "`uname -m`" = ia64], [
+               SHLIB_SUFFIX=".so"
+               # Use newer C++ library for C++ extensions
+               #if test "$GCC" != "yes" ; then
+               #   CPPFLAGS="-AA"
+               #fi
+           ], [
+               SHLIB_SUFFIX=".sl"
+           ])
+           AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
+           AS_IF([test "$tcl_ok" = yes], [
+               LDFLAGS="$LDFLAGS -Wl,-E"
+               CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
+               LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
+               LD_LIBRARY_PATH_VAR="SHLIB_PATH"
+           ])
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_LD='${CC} -shared'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ], [
+               CFLAGS="$CFLAGS -z"
+               # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
+               #CFLAGS="$CFLAGS +DAportable"
+               SHLIB_CFLAGS="+z"
+               SHLIB_LD="ld -b"
+           ])
+
+           # Check to enable 64-bit flags for compiler/linker
+           AS_IF([test "$do64bit" = "yes"], [
+               AS_IF([test "$GCC" = yes], [
+                   case `${CC} -dumpmachine` in
+                       hppa64*)
+                           # 64-bit gcc in use.  Fix flags for GNU ld.
+                           do64bit_ok=yes
+                           SHLIB_LD='${CC} -shared'
+                           AS_IF([test $doRpath = yes], [
+                               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+                           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+                           ;;
+                       *)
+                           AC_MSG_WARN([64bit mode not supported with GCC on $system])
+                           ;;
+                   esac
+               ], [
+                   do64bit_ok=yes
+                   CFLAGS="$CFLAGS +DD64"
+                   LDFLAGS_ARCH="+DD64"
+               ])
+           ]) ;;
+       IRIX-6.*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD="ld -n32 -shared -rdata_shared"
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
+           AS_IF([test "$GCC" = yes], [
+               CFLAGS="$CFLAGS -mabi=n32"
+               LDFLAGS="$LDFLAGS -mabi=n32"
+           ], [
+               case $system in
+                   IRIX-6.3)
+                       # Use to build 6.2 compatible binaries on 6.3.
+                       CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
+                       ;;
+                   *)
+                       CFLAGS="$CFLAGS -n32"
+                       ;;
+               esac
+               LDFLAGS="$LDFLAGS -n32"
+           ])
+           ;;
+       IRIX64-6.*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD="ld -n32 -shared -rdata_shared"
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
+
+           # Check to enable 64-bit flags for compiler/linker
+
+           AS_IF([test "$do64bit" = yes], [
+               AS_IF([test "$GCC" = yes], [
+                   AC_MSG_WARN([64bit mode not supported by gcc])
+               ], [
+                   do64bit_ok=yes
+                   SHLIB_LD="ld -64 -shared -rdata_shared"
+                   CFLAGS="$CFLAGS -64"
+                   LDFLAGS_ARCH="-64"
+               ])
+           ])
+           ;;
+       Linux*|GNU*|NetBSD-Debian)
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_SUFFIX=".so"
+
+           # TEA specific:
+           CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
+
+           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared'
+           LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"])
+           AS_IF([test $do64bit = yes], [
+               AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [
+                   hold_cflags=$CFLAGS
+                   CFLAGS="$CFLAGS -m64"
+                   AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no)
+                   CFLAGS=$hold_cflags])
+               AS_IF([test $tcl_cv_cc_m64 = yes], [
+                   CFLAGS="$CFLAGS -m64"
+                   do64bit_ok=yes
+               ])
+          ])
+
+           # The combo of gcc + glibc has a bug related to inlining of
+           # functions like strtod(). The -fno-builtin flag should address
+           # this problem but it does not work. The -fno-inline flag is kind
+           # of overkill but it works. Disable inlining only when one of the
+           # files in compat/*.c is being linked in.
+
+           AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"])
+           ;;
+       Lynx*)
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_SUFFIX=".so"
+           CFLAGS_OPTIMIZE=-02
+           SHLIB_LD='${CC} -shared'
+           LD_FLAGS="-Wl,--export-dynamic"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           ;;
+       OpenBSD-*)
+           arch=`arch -s`
+           case "$arch" in
+           alpha|sparc64)
+               SHLIB_CFLAGS="-fPIC"
+               ;;
+           *)
+               SHLIB_CFLAGS="-fpic"
+               ;;
+           esac
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}'
+           LDFLAGS="-Wl,-export-dynamic"
+           CFLAGS_OPTIMIZE="-O2"
+           AS_IF([test "${TCL_THREADS}" = "1"], [
+               # On OpenBSD:   Compile with -pthread
+               #               Don't link with -lpthread
+               LIBS=`echo $LIBS | sed s/-lpthread//`
+               CFLAGS="$CFLAGS -pthread"
+           ])
+           # OpenBSD doesn't do version numbers with dots.
+           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
+           TCL_LIB_VERSIONS_OK=nodots
+           ;;
+       NetBSD-*)
+           # NetBSD has ELF and can use 'cc -shared' to build shared libs
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
+           SHLIB_SUFFIX=".so"
+           LDFLAGS="$LDFLAGS -export-dynamic"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           AS_IF([test "${TCL_THREADS}" = "1"], [
+               # The -pthread needs to go in the CFLAGS, not LIBS
+               LIBS=`echo $LIBS | sed s/-pthread//`
+               CFLAGS="$CFLAGS -pthread"
+               LDFLAGS="$LDFLAGS -pthread"
+           ])
+           ;;
+       FreeBSD-*)
+           # This configuration from FreeBSD Ports.
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD="${CC} -shared"
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$[@]"
+           SHLIB_SUFFIX=".so"
+           LDFLAGS=""
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'])
+           AS_IF([test "${TCL_THREADS}" = "1"], [
+               # The -pthread needs to go in the LDFLAGS, not LIBS
+               LIBS=`echo $LIBS | sed s/-pthread//`
+               CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+               LDFLAGS="$LDFLAGS $PTHREAD_LIBS"])
+           case $system in
+           FreeBSD-3.*)
+               # Version numbers are dot-stripped by system policy.
+               TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .`
+               UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'
+               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1'
+               TCL_LIB_VERSIONS_OK=nodots
+               ;;
+           esac
+           ;;
+       Darwin-*)
+           CFLAGS_OPTIMIZE="-Os"
+           SHLIB_CFLAGS="-fno-common"
+           # To avoid discrepancies between what headers configure sees during
+           # preprocessing tests and compiling tests, move any -isysroot and
+           # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
+           CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
+               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
+               if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`"
+           CFLAGS="`echo " ${CFLAGS}" | \
+               awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
+               if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`"
+           AS_IF([test $do64bit = yes], [
+               case `arch` in
+                   ppc)
+                       AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag],
+                               tcl_cv_cc_arch_ppc64, [
+                           hold_cflags=$CFLAGS
+                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
+                           AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes,
+                                   tcl_cv_cc_arch_ppc64=no)
+                           CFLAGS=$hold_cflags])
+                       AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [
+                           CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
+                           do64bit_ok=yes
+                       ]);;
+                   i386)
+                       AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag],
+                               tcl_cv_cc_arch_x86_64, [
+                           hold_cflags=$CFLAGS
+                           CFLAGS="$CFLAGS -arch x86_64"
+                           AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes,
+                                   tcl_cv_cc_arch_x86_64=no)
+                           CFLAGS=$hold_cflags])
+                       AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [
+                           CFLAGS="$CFLAGS -arch x86_64"
+                           do64bit_ok=yes
+                       ]);;
+                   *)
+                       AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);;
+               esac
+           ], [
+               # Check for combined 32-bit and 64-bit fat build
+               AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \
+                   && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [
+                   fat_32_64=yes])
+           ])
+           # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
+           SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}'
+           AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [
+               hold_ldflags=$LDFLAGS
+               LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
+               AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no)
+               LDFLAGS=$hold_ldflags])
+           AS_IF([test $tcl_cv_ld_single_module = yes], [
+               SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
+           ])
+           # TEA specific: link shlib with current and compatibility version flags
+           vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d`
+           SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}"
+           SHLIB_SUFFIX=".dylib"
+           # Don't use -prebind when building for Mac OS X 10.4 or later only:
+           AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \
+               "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [
+               LDFLAGS="$LDFLAGS -prebind"])
+           LDFLAGS="$LDFLAGS -headerpad_max_install_names"
+           AC_CACHE_CHECK([if ld accepts -search_paths_first flag],
+                   tcl_cv_ld_search_paths_first, [
+               hold_ldflags=$LDFLAGS
+               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
+               AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes,
+                       tcl_cv_ld_search_paths_first=no)
+               LDFLAGS=$hold_ldflags])
+           AS_IF([test $tcl_cv_ld_search_paths_first = yes], [
+               LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
+           ])
+           AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
+               AC_DEFINE(MODULE_SCOPE, [__private_extern__],
+                   [Compiler support for module scope symbols])
+               tcl_cv_cc_visibility_hidden=yes
+           ])
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
+           # TEA specific: for combined 32 & 64 bit fat builds of Tk
+           # extensions, verify that 64-bit build is possible.
+           AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [
+               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [
+                   AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
+                       done
+                       CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
+                       LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
+                       AC_TRY_LINK([#include <X11/Xlib.h>], [XrmInitialize();],
+                           tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no)
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval $v'="$hold_'$v'"'
+                       done])
+               ])
+               AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [
+                   AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
+                       done
+                       CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}"
+                       LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}"
+                       AC_TRY_LINK([#include <tk.h>], [Tk_InitStubs(NULL, "", 0);],
+                           tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no)
+                       for v in CFLAGS CPPFLAGS LDFLAGS; do
+                           eval $v'="$hold_'$v'"'
+                       done])
+               ])
+               # remove 64-bit arch flags from CFLAGS et al. if configuration
+               # does not support 64-bit.
+               AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [
+                   AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags])
+                   for v in CFLAGS CPPFLAGS LDFLAGS; do
+                       eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"'
+                   done])
+           ])
+           ;;
+       OS/390-*)
+           CFLAGS_OPTIMIZE=""          # Optimizer is buggy
+           AC_DEFINE(_OE_SOCKETS, 1,   # needed in sys/socket.h
+               [Should OS/390 do the right thing with sockets?])
+           ;;
+       OSF1-V*)
+           # Digital OSF/1
+           SHLIB_CFLAGS=""
+           AS_IF([test "$SHARED_BUILD" = 1], [
+               SHLIB_LD='ld -shared -expect_unresolved "*"'
+           ], [
+               SHLIB_LD='ld -non_shared -expect_unresolved "*"'
+           ])
+           SHLIB_SUFFIX=".so"
+           AS_IF([test $doRpath = yes], [
+               CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'])
+           AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [
+               CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"])
+           # see pthread_intro(3) for pthread support on osf1, k.furukawa
+           AS_IF([test "${TCL_THREADS}" = 1], [
+               CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
+               CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
+               LIBS=`echo $LIBS | sed s/-lpthreads//`
+               AS_IF([test "$GCC" = yes], [
+                   LIBS="$LIBS -lpthread -lmach -lexc"
+               ], [
+                   CFLAGS="$CFLAGS -pthread"
+                   LDFLAGS="$LDFLAGS -pthread"
+               ])
+           ])
+           ;;
+       QNX-6*)
+           # QNX RTP
+           # This may work for all QNX, but it was only reported for v6.
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD="ld -Bshareable -x"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       SCO_SV-3.2*)
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_CFLAGS="-fPIC -melf"
+               LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
+           ], [
+               SHLIB_CFLAGS="-Kpic -belf"
+               LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
+           ])
+           SHLIB_LD="ld -G"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       SunOS-5.[[0-6]])
+           # Careful to not let 5.10+ fall into this case
+
+           # Note: If _REENTRANT isn't defined, then Solaris
+           # won't define thread-safe library routines.
+
+           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
+           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
+               [Do we really want to follow the standard? Yes we do!])
+
+           SHLIB_CFLAGS="-KPIC"
+           SHLIB_SUFFIX=".so"
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_LD='${CC} -shared'
+               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ], [
+               SHLIB_LD="/usr/ccs/bin/ld -G -z text"
+               CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+           ])
+           ;;
+       SunOS-5*)
+           # Note: If _REENTRANT isn't defined, then Solaris
+           # won't define thread-safe library routines.
+
+           AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?])
+           AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1,
+               [Do we really want to follow the standard? Yes we do!])
+
+           SHLIB_CFLAGS="-KPIC"
+
+           # Check to enable 64-bit flags for compiler/linker
+           AS_IF([test "$do64bit" = yes], [
+               arch=`isainfo`
+               AS_IF([test "$arch" = "sparcv9 sparc"], [
+                   AS_IF([test "$GCC" = yes], [
+                       AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [
+                           AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system])
+                       ], [
+                           do64bit_ok=yes
+                           CFLAGS="$CFLAGS -m64 -mcpu=v9"
+                           LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
+                           SHLIB_CFLAGS="-fPIC"
+                       ])
+                   ], [
+                       do64bit_ok=yes
+                       AS_IF([test "$do64bitVIS" = yes], [
+                           CFLAGS="$CFLAGS -xarch=v9a"
+                           LDFLAGS_ARCH="-xarch=v9a"
+                       ], [
+                           CFLAGS="$CFLAGS -xarch=v9"
+                           LDFLAGS_ARCH="-xarch=v9"
+                       ])
+                       # Solaris 64 uses this as well
+                       #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
+                   ])
+               ], [AS_IF([test "$arch" = "amd64 i386"], [
+                   AS_IF([test "$GCC" = yes], [
+                       case $system in
+                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
+                               do64bit_ok=yes
+                               CFLAGS="$CFLAGS -m64"
+                               LDFLAGS="$LDFLAGS -m64";;
+                           *)
+                               AC_MSG_WARN([64bit mode not supported with GCC on $system]);;
+                       esac
+                   ], [
+                       do64bit_ok=yes
+                       case $system in
+                           SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
+                               CFLAGS="$CFLAGS -m64"
+                               LDFLAGS="$LDFLAGS -m64";;
+                           *)
+                               CFLAGS="$CFLAGS -xarch=amd64"
+                               LDFLAGS="$LDFLAGS -xarch=amd64";;
+                       esac
+                   ])
+               ], [AC_MSG_WARN([64bit mode not supported for $arch])])])
+           ])
+
+           SHLIB_SUFFIX=".so"
+           AS_IF([test "$GCC" = yes], [
+               SHLIB_LD='${CC} -shared'
+               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
+               AS_IF([test "$do64bit_ok" = yes], [
+                   AS_IF([test "$arch" = "sparcv9 sparc"], [
+                       # We need to specify -static-libgcc or we need to
+                       # add the path to the sparv9 libgcc.
+                       # JH: static-libgcc is necessary for core Tcl, but may
+                       # not be necessary for extensions.
+                       SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
+                       # for finding sparcv9 libgcc, get the regular libgcc
+                       # path, remove so name and append 'sparcv9'
+                       #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
+                       #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
+                   ], [AS_IF([test "$arch" = "amd64 i386"], [
+                       # JH: static-libgcc is necessary for core Tcl, but may
+                       # not be necessary for extensions.
+                       SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
+                   ])])
+               ])
+           ], [
+               case $system in
+                   SunOS-5.[[1-9]][[0-9]]*)
+                       # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS
+                       SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';;
+                   *)
+                       SHLIB_LD='/usr/ccs/bin/ld -G -z text';;
+               esac
+               CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
+           ])
+           ;;
+       UNIX_SV* | UnixWare-5*)
+           SHLIB_CFLAGS="-KPIC"
+           SHLIB_LD='${CC} -G'
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
+           # that don't grok the -Bexport option.  Test that it does.
+           AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [
+               hold_ldflags=$LDFLAGS
+               LDFLAGS="$LDFLAGS -Wl,-Bexport"
+               AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no)
+               LDFLAGS=$hold_ldflags])
+           AS_IF([test $tcl_cv_ld_Bexport = yes], [
+               LDFLAGS="$LDFLAGS -Wl,-Bexport"
+           ])
+           CC_SEARCH_FLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+    esac
+
+    AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [
+       AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform])
+    ])
+
+dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so
+dnl # until the end of configure, as configure's compile and link tests use
+dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's
+dnl # preprocessing tests use only CPPFLAGS.
+    AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""])
+
+    # Add in the arch flags late to ensure it wasn't removed.
+    # Not necessary in TEA, but this is aligned with core
+    LDFLAGS="$LDFLAGS $LDFLAGS_ARCH"
+
+    # If we're running gcc, then change the C flags for compiling shared
+    # libraries to the right flags for gcc, instead of those for the
+    # standard manufacturer compiler.
+
+    AS_IF([test "$GCC" = yes], [
+       case $system in
+           AIX-*) ;;
+           BSD/OS*) ;;
+           CYGWIN_*|MINGW32_*) ;;
+           IRIX*) ;;
+           NetBSD-*|FreeBSD-*|OpenBSD-*) ;;
+           Darwin-*) ;;
+           SCO_SV-3.2*) ;;
+           windows) ;;
+           *) SHLIB_CFLAGS="-fPIC" ;;
+       esac])
+
+    AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [
+       AC_DEFINE(MODULE_SCOPE, [extern],
+           [No Compiler support for module scope symbols])
+    ])
+
+    AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [
+    # TEA specific: use PACKAGE_VERSION instead of VERSION
+    SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}'])
+    AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [
+    # TEA specific: use PACKAGE_VERSION instead of VERSION
+    UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a'])
+
+    if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then
+       AC_CACHE_CHECK(for SEH support in compiler,
+           tcl_cv_seh,
+       AC_TRY_RUN([
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#undef WIN32_LEAN_AND_MEAN
+
+           int main(int argc, char** argv) {
+               int a, b = 0;
+               __try {
+                   a = 666 / b;
+               }
+               __except (EXCEPTION_EXECUTE_HANDLER) {
+                   return 0;
+               }
+               return 1;
+           }
+       ],
+           tcl_cv_seh=yes,
+           tcl_cv_seh=no,
+           tcl_cv_seh=no)
+       )
+       if test "$tcl_cv_seh" = "no" ; then
+           AC_DEFINE(HAVE_NO_SEH, 1,
+                   [Defined when mingw does not support SEH])
+       fi
+
+       #
+       # Check to see if the excpt.h include file provided contains the
+       # definition for EXCEPTION_DISPOSITION; if not, which is the case
+       # with Cygwin's version as of 2002-04-10, define it to be int,
+       # sufficient for getting the current code to work.
+       #
+       AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files,
+           tcl_cv_eh_disposition,
+           AC_TRY_COMPILE([
+#          define WIN32_LEAN_AND_MEAN
+#          include <windows.h>
+#          undef WIN32_LEAN_AND_MEAN
+           ],[
+               EXCEPTION_DISPOSITION x;
+           ],
+               tcl_cv_eh_disposition=yes,
+               tcl_cv_eh_disposition=no)
+       )
+       if test "$tcl_cv_eh_disposition" = "no" ; then
+       AC_DEFINE(EXCEPTION_DISPOSITION, int,
+               [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION])
+       fi
+
+       # Check to see if winnt.h defines CHAR, SHORT, and LONG
+       # even if VOID has already been #defined. The win32api
+       # used by mingw and cygwin is known to do this.
+
+       AC_CACHE_CHECK(for winnt.h that ignores VOID define,
+           tcl_cv_winnt_ignore_void,
+           AC_TRY_COMPILE([
+#define VOID void
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#undef WIN32_LEAN_AND_MEAN
+           ], [
+               CHAR c;
+               SHORT s;
+               LONG l;
+           ],
+        tcl_cv_winnt_ignore_void=yes,
+        tcl_cv_winnt_ignore_void=no)
+       )
+       if test "$tcl_cv_winnt_ignore_void" = "yes" ; then
+           AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1,
+                   [Defined when cygwin/mingw ignores VOID define in winnt.h])
+       fi
+    fi
+
+       # See if the compiler supports casting to a union type.
+       # This is used to stop gcc from printing a compiler
+       # warning when initializing a union member.
+
+       AC_CACHE_CHECK(for cast to union support,
+           tcl_cv_cast_to_union,
+           AC_TRY_COMPILE([],
+           [
+                 union foo { int i; double d; };
+                 union foo f = (union foo) (int) 0;
+           ],
+           tcl_cv_cast_to_union=yes,
+           tcl_cv_cast_to_union=no)
+       )
+       if test "$tcl_cv_cast_to_union" = "yes"; then
+           AC_DEFINE(HAVE_CAST_TO_UNION, 1,
+                   [Defined when compiler supports casting to union type.])
+       fi
+
+    AC_SUBST(CFLAGS_DEBUG)
+    AC_SUBST(CFLAGS_OPTIMIZE)
+    AC_SUBST(CFLAGS_WARNING)
+
+    AC_SUBST(STLIB_LD)
+    AC_SUBST(SHLIB_LD)
+
+    AC_SUBST(SHLIB_LD_LIBS)
+    AC_SUBST(SHLIB_CFLAGS)
+
+    AC_SUBST(LD_LIBRARY_PATH_VAR)
+
+    # These must be called after we do the basic CFLAGS checks and
+    # verify any possible 64-bit or similar switches are necessary
+    TEA_TCL_EARLY_FLAGS
+    TEA_TCL_64BIT_FLAGS
+])
+
+#--------------------------------------------------------------------
+# TEA_SERIAL_PORT
+#
+#      Determine which interface to use to talk to the serial port.
+#      Note that #include lines must begin in leftmost column for
+#      some compilers to recognize them as preprocessor directives,
+#      and some build environments have stdin not pointing at a
+#      pseudo-terminal (usually /dev/null instead.)
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines only one of the following vars:
+#              HAVE_SYS_MODEM_H
+#              USE_TERMIOS
+#              USE_TERMIO
+#              USE_SGTTY
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_SERIAL_PORT], [
+    AC_CHECK_HEADERS(sys/modem.h)
+    AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [
+    AC_TRY_RUN([
+#include <termios.h>
+
+int main() {
+    struct termios t;
+    if (tcgetattr(0, &t) == 0) {
+       cfsetospeed(&t, 0);
+       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    if test $tcl_cv_api_serial = no ; then
+       AC_TRY_RUN([
+#include <termio.h>
+
+int main() {
+    struct termio t;
+    if (ioctl(0, TCGETA, &t) == 0) {
+       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no ; then
+       AC_TRY_RUN([
+#include <sgtty.h>
+
+int main() {
+    struct sgttyb t;
+    if (ioctl(0, TIOCGETP, &t) == 0) {
+       t.sg_ospeed = 0;
+       t.sg_flags |= ODDP | EVENP | RAW;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no ; then
+       AC_TRY_RUN([
+#include <termios.h>
+#include <errno.h>
+
+int main() {
+    struct termios t;
+    if (tcgetattr(0, &t) == 0
+       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+       cfsetospeed(&t, 0);
+       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no; then
+       AC_TRY_RUN([
+#include <termio.h>
+#include <errno.h>
+
+int main() {
+    struct termio t;
+    if (ioctl(0, TCGETA, &t) == 0
+       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+    }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
+    fi
+    if test $tcl_cv_api_serial = no; then
+       AC_TRY_RUN([
+#include <sgtty.h>
+#include <errno.h>
+
+int main() {
+    struct sgttyb t;
+    if (ioctl(0, TIOCGETP, &t) == 0
+       || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
+       t.sg_ospeed = 0;
+       t.sg_flags |= ODDP | EVENP | RAW;
+       return 0;
+    }
+    return 1;
+}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none)
+    fi])
+    case $tcl_cv_api_serial in
+       termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);;
+       termio)  AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);;
+       sgtty)   AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);;
+    esac
+])
+
+#--------------------------------------------------------------------
+# TEA_MISSING_POSIX_HEADERS
+#
+#      Supply substitutes for missing POSIX header files.  Special
+#      notes:
+#          - stdlib.h doesn't define strtol, strtoul, or
+#            strtod in some versions of SunOS
+#          - some versions of string.h don't declare procedures such
+#            as strstr
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines some of the following vars:
+#              NO_DIRENT_H
+#              NO_ERRNO_H
+#              NO_VALUES_H
+#              HAVE_LIMITS_H or NO_LIMITS_H
+#              NO_STDLIB_H
+#              NO_STRING_H
+#              NO_SYS_WAIT_H
+#              NO_DLFCN_H
+#              HAVE_SYS_PARAM_H
+#
+#              HAVE_STRING_H ?
+#
+# tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and
+# CHECK on limits.h
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [
+    AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [
+    AC_TRY_LINK([#include <sys/types.h>
+#include <dirent.h>], [
+#ifndef _POSIX_SOURCE
+#   ifdef __Lynx__
+       /*
+        * Generate compilation error to make the test fail:  Lynx headers
+        * are only valid if really in the POSIX environment.
+        */
+
+       missing_procedure();
+#   endif
+#endif
+DIR *d;
+struct dirent *entryPtr;
+char *p;
+d = opendir("foobar");
+entryPtr = readdir(d);
+p = entryPtr->d_name;
+closedir(d);
+], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)])
+
+    if test $tcl_cv_dirent_h = no; then
+       AC_DEFINE(NO_DIRENT_H, 1, [Do we have <dirent.h>?])
+    fi
+
+    # TEA specific:
+    AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have <errno.h>?])])
+    AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have <values.h>?])])
+    AC_CHECK_HEADER(limits.h,
+       [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have <limits.h>?])],
+       [AC_DEFINE(NO_LIMITS_H, 1, [Do we have <limits.h>?])])
+    AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
+    AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
+    if test $tcl_ok = 0; then
+       AC_DEFINE(NO_STDLIB_H, 1, [Do we have <stdlib.h>?])
+    fi
+    AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
+    AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
+
+    # See also memmove check below for a place where NO_STRING_H can be
+    # set and why.
+
+    if test $tcl_ok = 0; then
+       AC_DEFINE(NO_STRING_H, 1, [Do we have <string.h>?])
+    fi
+
+    AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have <sys/wait.h>?])])
+    AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have <dlfcn.h>?])])
+
+    # OS/390 lacks sys/param.h (and doesn't need it, by chance).
+    AC_HAVE_HEADERS(sys/param.h)
+])
+
+#--------------------------------------------------------------------
+# TEA_PATH_X
+#
+#      Locate the X11 header files and the X11 library archive.  Try
+#      the ac_path_x macro first, but if it doesn't find the X stuff
+#      (e.g. because there's no xmkmf program) then check through
+#      a list of possible directories.  Under some conditions the
+#      autoconf macro will return an include directory that contains
+#      no include files, so double-check its result just to be safe.
+#
+#      This should be called after TEA_CONFIG_CFLAGS as setting the
+#      LIBS line can confuse some configure macro magic.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Sets the following vars:
+#              XINCLUDES
+#              XLIBSW
+#              PKG_LIBS (appends to)
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_X], [
+    if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then
+       TEA_PATH_UNIX_X
+    fi
+])
+
+AC_DEFUN([TEA_PATH_UNIX_X], [
+    AC_PATH_X
+    not_really_there=""
+    if test "$no_x" = ""; then
+       if test "$x_includes" = ""; then
+           AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes")
+       else
+           if test ! -r $x_includes/X11/Xlib.h; then
+               not_really_there="yes"
+           fi
+       fi
+    fi
+    if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
+       AC_MSG_CHECKING([for X11 header files])
+       found_xincludes="no"
+       AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no")
+       if test "$found_xincludes" = "no"; then
+           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"
+           for i in $dirs ; do
+               if test -r $i/X11/Xlib.h; then
+                   AC_MSG_RESULT([$i])
+                   XINCLUDES=" -I$i"
+                   found_xincludes="yes"
+                   break
+               fi
+           done
+       fi
+    else
+       if test "$x_includes" != ""; then
+           XINCLUDES="-I$x_includes"
+           found_xincludes="yes"
+       fi
+    fi
+    if test "$found_xincludes" = "no"; then
+       AC_MSG_RESULT([couldn't find any!])
+    fi
+
+    if test "$no_x" = yes; then
+       AC_MSG_CHECKING([for X11 libraries])
+       XLIBSW=nope
+       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"
+       for i in $dirs ; do
+           if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then
+               AC_MSG_RESULT([$i])
+               XLIBSW="-L$i -lX11"
+               x_libraries="$i"
+               break
+           fi
+       done
+    else
+       if test "$x_libraries" = ""; then
+           XLIBSW=-lX11
+       else
+           XLIBSW="-L$x_libraries -lX11"
+       fi
+    fi
+    if test "$XLIBSW" = nope ; then
+       AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
+    fi
+    if test "$XLIBSW" = nope ; then
+       AC_MSG_RESULT([could not find any!  Using -lX11.])
+       XLIBSW=-lX11
+    fi
+    # TEA specific:
+    if test x"${XLIBSW}" != x ; then
+       PKG_LIBS="${PKG_LIBS} ${XLIBSW}"
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_BLOCKING_STYLE
+#
+#      The statements below check for systems where POSIX-style
+#      non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
+#      On these systems (mostly older ones), use the old BSD-style
+#      FIONBIO approach instead.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines some of the following vars:
+#              HAVE_SYS_IOCTL_H
+#              HAVE_SYS_FILIO_H
+#              USE_FIONBIO
+#              O_NONBLOCK
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_BLOCKING_STYLE], [
+    AC_CHECK_HEADERS(sys/ioctl.h)
+    AC_CHECK_HEADERS(sys/filio.h)
+    TEA_CONFIG_SYSTEM
+    AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
+    case $system in
+       OSF*)
+           AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?])
+           AC_MSG_RESULT([FIONBIO])
+           ;;
+       *)
+           AC_MSG_RESULT([O_NONBLOCK])
+           ;;
+    esac
+])
+
+#--------------------------------------------------------------------
+# TEA_TIME_HANDLER
+#
+#      Checks how the system deals with time.h, what time structures
+#      are used on the system, and what fields the structures have.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines some of the following vars:
+#              USE_DELTA_FOR_TZ
+#              HAVE_TM_GMTOFF
+#              HAVE_TM_TZADJ
+#              HAVE_TIMEZONE_VAR
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TIME_HANDLER], [
+    AC_CHECK_HEADERS(sys/time.h)
+    AC_HEADER_TIME
+    AC_STRUCT_TIMEZONE
+
+    AC_CHECK_FUNCS(gmtime_r localtime_r)
+
+    AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [
+       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
+           tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)])
+    if test $tcl_cv_member_tm_tzadj = yes ; then
+       AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?])
+    fi
+
+    AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [
+       AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
+           tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)])
+    if test $tcl_cv_member_tm_gmtoff = yes ; then
+       AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?])
+    fi
+
+    #
+    # Its important to include time.h in this check, as some systems
+    # (like convex) have timezone functions, etc.
+    #
+    AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [
+       AC_TRY_COMPILE([#include <time.h>],
+           [extern long timezone;
+           timezone += 1;
+           exit (0);],
+           tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)])
+    if test $tcl_cv_timezone_long = yes ; then
+       AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
+    else
+       #
+       # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
+       #
+       AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [
+           AC_TRY_COMPILE([#include <time.h>],
+               [extern time_t timezone;
+               timezone += 1;
+               exit (0);],
+               tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)])
+       if test $tcl_cv_timezone_time = yes ; then
+           AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])
+       fi
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_BUGGY_STRTOD
+#
+#      Under Solaris 2.4, strtod returns the wrong value for the
+#      terminating character under some conditions.  Check for this
+#      and if the problem exists use a substitute procedure
+#      "fixstrtod" (provided by Tcl) that corrects the error.
+#      Also, on Compaq's Tru64 Unix 5.0,
+#      strtod(" ") returns 0.0 instead of a failure to convert.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Might defines some of the following vars:
+#              strtod (=fixstrtod)
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_BUGGY_STRTOD], [
+    AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0)
+    if test "$tcl_strtod" = 1; then
+       AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[
+           AC_TRY_RUN([
+               extern double strtod();
+               int main() {
+                   char *infString="Inf", *nanString="NaN", *spaceString=" ";
+                   char *term;
+                   double value;
+                   value = strtod(infString, &term);
+                   if ((term != infString) && (term[-1] == 0)) {
+                       exit(1);
+                   }
+                   value = strtod(nanString, &term);
+                   if ((term != nanString) && (term[-1] == 0)) {
+                       exit(1);
+                   }
+                   value = strtod(spaceString, &term);
+                   if (term == (spaceString+1)) {
+                       exit(1);
+                   }
+                   exit(0);
+               }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy,
+                   tcl_cv_strtod_buggy=buggy)])
+       if test "$tcl_cv_strtod_buggy" = buggy; then
+           AC_LIBOBJ([fixstrtod])
+           USE_COMPAT=1
+           AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?])
+       fi
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_TCL_LINK_LIBS
+#
+#      Search for the libraries needed to link the Tcl shell.
+#      Things like the math library (-lm) and socket stuff (-lsocket vs.
+#      -lnsl) are dealt with here.
+#
+# Arguments:
+#      Requires the following vars to be set in the Makefile:
+#              DL_LIBS (not in TEA, only needed in core)
+#              LIBS
+#              MATH_LIBS
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TCL_LIBS
+#              MATH_LIBS
+#
+#      Might append to the following vars:
+#              LIBS
+#
+#      Might define the following vars:
+#              HAVE_NET_ERRNO_H
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TCL_LINK_LIBS], [
+    #--------------------------------------------------------------------
+    # On a few very rare systems, all of the libm.a stuff is
+    # already in libc.a.  Set compiler flags accordingly.
+    # Also, Linux requires the "ieee" library for math to work
+    # right (and it must appear before "-lm").
+    #--------------------------------------------------------------------
+
+    AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
+    AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
+
+    #--------------------------------------------------------------------
+    # Interactive UNIX requires -linet instead of -lsocket, plus it
+    # needs net/errno.h to define the socket-related error codes.
+    #--------------------------------------------------------------------
+
+    AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
+    AC_CHECK_HEADER(net/errno.h, [
+       AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have <net/errno.h>?])])
+
+    #--------------------------------------------------------------------
+    #  Check for the existence of the -lsocket and -lnsl libraries.
+    #  The order here is important, so that they end up in the right
+    #  order in the command line generated by make.  Here are some
+    #  special considerations:
+    #  1. Use "connect" and "accept" to check for -lsocket, and
+    #     "gethostbyname" to check for -lnsl.
+    #  2. Use each function name only once:  can't redo a check because
+    #     autoconf caches the results of the last check and won't redo it.
+    #  3. Use -lnsl and -lsocket only if they supply procedures that
+    #     aren't already present in the normal libraries.  This is because
+    #     IRIX 5.2 has libraries, but they aren't needed and they're
+    #     bogus:  they goof up name resolution if used.
+    #  4. On some SVR4 systems, can't use -lsocket without -lnsl too.
+    #     To get around this problem, check for both libraries together
+    #     if -lsocket doesn't work by itself.
+    #--------------------------------------------------------------------
+
+    tcl_checkBoth=0
+    AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
+    if test "$tcl_checkSocket" = 1; then
+       AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt,
+           LIBS="$LIBS -lsocket", tcl_checkBoth=1)])
+    fi
+    if test "$tcl_checkBoth" = 1; then
+       tk_oldLibs=$LIBS
+       LIBS="$LIBS -lsocket -lnsl"
+       AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs])
+    fi
+    AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname,
+           [LIBS="$LIBS -lnsl"])])
+
+    # TEA specific: Don't perform the eval of the libraries here because
+    # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS
+
+    TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
+    AC_SUBST(TCL_LIBS)
+    AC_SUBST(MATH_LIBS)
+])
+
+#--------------------------------------------------------------------
+# TEA_TCL_EARLY_FLAGS
+#
+#      Check for what flags are needed to be passed so the correct OS
+#      features are available.
+#
+# Arguments:
+#      None
+#
+# Results:
+#
+#      Might define the following vars:
+#              _ISOC99_SOURCE
+#              _LARGEFILE64_SOURCE
+#              _LARGEFILE_SOURCE64
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TCL_EARLY_FLAG],[
+    AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]),
+       AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no,
+           AC_TRY_COMPILE([[#define ]$1[ 1
+]$2], $3,
+               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes,
+               [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no)))
+    if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then
+       AC_DEFINE($1, 1, [Add the ]$1[ flag when building])
+       tcl_flags="$tcl_flags $1"
+    fi
+])
+
+AC_DEFUN([TEA_TCL_EARLY_FLAGS],[
+    AC_MSG_CHECKING([for required early compiler flags])
+    tcl_flags=""
+    TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include <stdlib.h>],
+       [char *p = (char *)strtoll; char *q = (char *)strtoull;])
+    TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include <sys/stat.h>],
+       [struct stat64 buf; int i = stat64("/", &buf);])
+    TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include <sys/stat.h>],
+       [char *p = (char *)open64;])
+    if test "x${tcl_flags}" = "x" ; then
+       AC_MSG_RESULT([none])
+    else
+       AC_MSG_RESULT([${tcl_flags}])
+    fi
+])
+
+#--------------------------------------------------------------------
+# TEA_TCL_64BIT_FLAGS
+#
+#      Check for what is defined in the way of 64-bit features.
+#
+# Arguments:
+#      None
+#
+# Results:
+#
+#      Might define the following vars:
+#              TCL_WIDE_INT_IS_LONG
+#              TCL_WIDE_INT_TYPE
+#              HAVE_STRUCT_DIRENT64
+#              HAVE_STRUCT_STAT64
+#              HAVE_TYPE_OFF64_T
+#--------------------------------------------------------------------
+
+AC_DEFUN([TEA_TCL_64BIT_FLAGS], [
+    AC_MSG_CHECKING([for 64-bit integer type])
+    AC_CACHE_VAL(tcl_cv_type_64bit,[
+       tcl_cv_type_64bit=none
+       # See if the compiler knows natively about __int64
+       AC_TRY_COMPILE(,[__int64 value = (__int64) 0;],
+           tcl_type_64bit=__int64, tcl_type_64bit="long long")
+       # See if we should use long anyway  Note that we substitute in the
+       # type that is our current guess for a 64-bit type inside this check
+       # program, so it should be modified only carefully...
+        AC_TRY_COMPILE(,[switch (0) {
+            case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ;
+        }],tcl_cv_type_64bit=${tcl_type_64bit})])
+    if test "${tcl_cv_type_64bit}" = none ; then
+       AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?])
+       AC_MSG_RESULT([using long])
+    elif test "${tcl_cv_type_64bit}" = "__int64" \
+               -a "${TEA_PLATFORM}" = "windows" ; then
+       # TEA specific: We actually want to use the default tcl.h checks in
+       # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER*
+       AC_MSG_RESULT([using Tcl header defaults])
+    else
+       AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit},
+           [What type should be used to define wide integers?])
+       AC_MSG_RESULT([${tcl_cv_type_64bit}])
+
+       # Now check for auxiliary declarations
+       AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[
+           AC_TRY_COMPILE([#include <sys/types.h>
+#include <dirent.h>],[struct dirent64 p;],
+               tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)])
+       if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
+           AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?])
+       fi
+
+       AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[
+           AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p;
+],
+               tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)])
+       if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
+           AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in <sys/stat.h>?])
+       fi
+
+       AC_CHECK_FUNCS(open64 lseek64)
+       AC_MSG_CHECKING([for off64_t])
+       AC_CACHE_VAL(tcl_cv_type_off64_t,[
+           AC_TRY_COMPILE([#include <sys/types.h>],[off64_t offset;
+],
+               tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)])
+       dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the
+       dnl functions lseek64 and open64 are defined.
+       if test "x${tcl_cv_type_off64_t}" = "xyes" && \
+               test "x${ac_cv_func_lseek64}" = "xyes" && \
+               test "x${ac_cv_func_open64}" = "xyes" ; then
+           AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in <sys/types.h>?])
+           AC_MSG_RESULT([yes])
+       else
+           AC_MSG_RESULT([no])
+       fi
+    fi
+])
+
+##
+## Here ends the standard Tcl configuration bits and starts the
+## TEA specific functions
+##
+
+#------------------------------------------------------------------------
+# TEA_INIT --
+#
+#      Init various Tcl Extension Architecture (TEA) variables.
+#      This should be the first called TEA_* macro.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              CYGPATH
+#              EXEEXT
+#      Defines only:
+#              TEA_VERSION
+#              TEA_INITED
+#              TEA_PLATFORM (windows or unix)
+#
+# "cygpath" is used on windows to generate native path names for include
+# files. These variables should only be used with the compiler and linker
+# since they generate native path names.
+#
+# EXEEXT
+#      Select the executable extension based on the host type.  This
+#      is a lightweight replacement for AC_EXEEXT that doesn't require
+#      a compiler.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_INIT], [
+    # TEA extensions pass this us the version of TEA they think they
+    # are compatible with.
+    TEA_VERSION="3.10"
+
+    AC_MSG_CHECKING([for correct TEA configuration])
+    if test x"${PACKAGE_NAME}" = x ; then
+       AC_MSG_ERROR([
+The PACKAGE_NAME variable must be defined by your TEA configure.ac])
+    fi
+    if test x"$1" = x ; then
+       AC_MSG_ERROR([
+TEA version not specified.])
+    elif test "$1" != "${TEA_VERSION}" ; then
+       AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"])
+    else
+       AC_MSG_RESULT([ok (TEA ${TEA_VERSION})])
+    fi
+
+    # If the user did not set CFLAGS, set it now to keep macros
+    # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2".
+    if test "${CFLAGS+set}" != "set" ; then
+       CFLAGS=""
+    fi
+
+    case "`uname -s`" in
+       *win32*|*WIN32*|*MINGW32_*)
+           AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)
+           EXEEXT=".exe"
+           TEA_PLATFORM="windows"
+           ;;
+       *CYGWIN_*)
+           EXEEXT=".exe"
+           # CYGPATH and TEA_PLATFORM are determined later in LOAD_TCLCONFIG
+           ;;
+       *)
+           CYGPATH=echo
+           # Maybe we are cross-compiling....
+           case ${host_alias} in
+               *mingw32*)
+               EXEEXT=".exe"
+               TEA_PLATFORM="windows"
+               ;;
+           *)
+               EXEEXT=""
+               TEA_PLATFORM="unix"
+               ;;
+           esac
+           ;;
+    esac
+
+    # Check if exec_prefix is set. If not use fall back to prefix.
+    # Note when adjusted, so that TEA_PREFIX can correct for this.
+    # This is needed for recursive configures, since autoconf propagates
+    # $prefix, but not $exec_prefix (doh!).
+    if test x$exec_prefix = xNONE ; then
+       exec_prefix_default=yes
+       exec_prefix=$prefix
+    fi
+
+    AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}])
+
+    AC_SUBST(EXEEXT)
+    AC_SUBST(CYGPATH)
+
+    # This package name must be replaced statically for AC_SUBST to work
+    AC_SUBST(PKG_LIB_FILE)
+    # Substitute STUB_LIB_FILE in case package creates a stub library too.
+    AC_SUBST(PKG_STUB_LIB_FILE)
+
+    # We AC_SUBST these here to ensure they are subst'ed,
+    # in case the user doesn't call TEA_ADD_...
+    AC_SUBST(PKG_STUB_SOURCES)
+    AC_SUBST(PKG_STUB_OBJECTS)
+    AC_SUBST(PKG_TCL_SOURCES)
+    AC_SUBST(PKG_HEADERS)
+    AC_SUBST(PKG_INCLUDES)
+    AC_SUBST(PKG_LIBS)
+    AC_SUBST(PKG_CFLAGS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_SOURCES --
+#
+#      Specify one or more source files.  Users should check for
+#      the right platform before adding to their list.
+#      It is not important to specify the directory, as long as it is
+#      in the generic, win or unix subdirectory of $(srcdir).
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_SOURCES
+#              PKG_OBJECTS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_SOURCES], [
+    vars="$@"
+    for i in $vars; do
+       case $i in
+           [\$]*)
+               # allow $-var names
+               PKG_SOURCES="$PKG_SOURCES $i"
+               PKG_OBJECTS="$PKG_OBJECTS $i"
+               ;;
+           *)
+               # check for existence - allows for generic/win/unix VPATH
+               # To add more dirs here (like 'src'), you have to update VPATH
+               # in Makefile.in as well
+               if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
+                   -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
+                   -a ! -f "${srcdir}/macosx/$i" \
+                   ; then
+                   AC_MSG_ERROR([could not find source file '$i'])
+               fi
+               PKG_SOURCES="$PKG_SOURCES $i"
+               # this assumes it is in a VPATH dir
+               i=`basename $i`
+               # handle user calling this before or after TEA_SETUP_COMPILER
+               if test x"${OBJEXT}" != x ; then
+                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
+               else
+                   j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
+               fi
+               PKG_OBJECTS="$PKG_OBJECTS $j"
+               ;;
+       esac
+    done
+    AC_SUBST(PKG_SOURCES)
+    AC_SUBST(PKG_OBJECTS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_STUB_SOURCES --
+#
+#      Specify one or more source files.  Users should check for
+#      the right platform before adding to their list.
+#      It is not important to specify the directory, as long as it is
+#      in the generic, win or unix subdirectory of $(srcdir).
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_STUB_SOURCES
+#              PKG_STUB_OBJECTS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_STUB_SOURCES], [
+    vars="$@"
+    for i in $vars; do
+       # check for existence - allows for generic/win/unix VPATH
+       if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
+           -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
+           -a ! -f "${srcdir}/macosx/$i" \
+           ; then
+           AC_MSG_ERROR([could not find stub source file '$i'])
+       fi
+       PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i"
+       # this assumes it is in a VPATH dir
+       i=`basename $i`
+       # handle user calling this before or after TEA_SETUP_COMPILER
+       if test x"${OBJEXT}" != x ; then
+           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}"
+       else
+           j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}"
+       fi
+       PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j"
+    done
+    AC_SUBST(PKG_STUB_SOURCES)
+    AC_SUBST(PKG_STUB_OBJECTS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_TCL_SOURCES --
+#
+#      Specify one or more Tcl source files.  These should be platform
+#      independent runtime files.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_TCL_SOURCES
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_TCL_SOURCES], [
+    vars="$@"
+    for i in $vars; do
+       # check for existence, be strict because it is installed
+       if test ! -f "${srcdir}/$i" ; then
+           AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i'])
+       fi
+       PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i"
+    done
+    AC_SUBST(PKG_TCL_SOURCES)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_HEADERS --
+#
+#      Specify one or more source headers.  Users should check for
+#      the right platform before adding to their list.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_HEADERS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_HEADERS], [
+    vars="$@"
+    for i in $vars; do
+       # check for existence, be strict because it is installed
+       if test ! -f "${srcdir}/$i" ; then
+           AC_MSG_ERROR([could not find header file '${srcdir}/$i'])
+       fi
+       PKG_HEADERS="$PKG_HEADERS $i"
+    done
+    AC_SUBST(PKG_HEADERS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_INCLUDES --
+#
+#      Specify one or more include dirs.  Users should check for
+#      the right platform before adding to their list.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_INCLUDES
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_INCLUDES], [
+    vars="$@"
+    for i in $vars; do
+       PKG_INCLUDES="$PKG_INCLUDES $i"
+    done
+    AC_SUBST(PKG_INCLUDES)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_LIBS --
+#
+#      Specify one or more libraries.  Users should check for
+#      the right platform before adding to their list.  For Windows,
+#      libraries provided in "foo.lib" format will be converted to
+#      "-lfoo" when using GCC (mingw).
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_LIBS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_LIBS], [
+    vars="$@"
+    for i in $vars; do
+       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
+           # Convert foo.lib to -lfoo for GCC.  No-op if not *.lib
+           i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'`
+       fi
+       PKG_LIBS="$PKG_LIBS $i"
+    done
+    AC_SUBST(PKG_LIBS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_CFLAGS --
+#
+#      Specify one or more CFLAGS.  Users should check for
+#      the right platform before adding to their list.
+#
+# Arguments:
+#      one or more file names
+#
+# Results:
+#
+#      Defines and substs the following vars:
+#              PKG_CFLAGS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_CFLAGS], [
+    PKG_CFLAGS="$PKG_CFLAGS $@"
+    AC_SUBST(PKG_CFLAGS)
+])
+
+#------------------------------------------------------------------------
+# TEA_ADD_CLEANFILES --
+#
+#      Specify one or more CLEANFILES.
+#
+# Arguments:
+#      one or more file names to clean target
+#
+# Results:
+#
+#      Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ADD_CLEANFILES], [
+    CLEANFILES="$CLEANFILES $@"
+])
+
+#------------------------------------------------------------------------
+# TEA_PREFIX --
+#
+#      Handle the --prefix=... option by defaulting to what Tcl gave
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      If --prefix or --exec-prefix was not specified, $prefix and
+#      $exec_prefix will be set to the values given to Tcl when it was
+#      configured.
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_PREFIX], [
+    if test "${prefix}" = "NONE"; then
+       prefix_default=yes
+       if test x"${TCL_PREFIX}" != x; then
+           AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}])
+           prefix=${TCL_PREFIX}
+       else
+           AC_MSG_NOTICE([--prefix defaulting to /usr/local])
+           prefix=/usr/local
+       fi
+    fi
+    if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \
+       -o x"${exec_prefix_default}" = x"yes" ; then
+       if test x"${TCL_EXEC_PREFIX}" != x; then
+           AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}])
+           exec_prefix=${TCL_EXEC_PREFIX}
+       else
+           AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}])
+           exec_prefix=$prefix
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_SETUP_COMPILER_CC --
+#
+#      Do compiler checks the way we want.  This is just a replacement
+#      for AC_PROG_CC in TEA configure.ac files to make them cleaner.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Sets up CC var and other standard bits we need to make executables.
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_SETUP_COMPILER_CC], [
+    # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE)
+    # in this macro, they need to go into TEA_SETUP_COMPILER instead.
+
+    AC_PROG_CC
+    AC_PROG_CPP
+
+    INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c'
+    INSTALL_DATA_DIR='${INSTALL} -d -m 755'
+    INSTALL_DATA='${INSTALL} -m 644'
+    INSTALL_PROGRAM='${INSTALL}'
+    INSTALL_SCRIPT='${INSTALL}'
+    INSTALL_LIBRARY='${INSTALL_DATA}'
+
+    AC_SUBST(INSTALL)
+    AC_SUBST(INSTALL_DATA_DIR)
+    AC_SUBST(INSTALL_DATA)
+    AC_SUBST(INSTALL_PROGRAM)
+    AC_SUBST(INSTALL_SCRIPT)
+    AC_SUBST(INSTALL_LIBRARY)
+
+    #--------------------------------------------------------------------
+    # Checks to see if the make program sets the $MAKE variable.
+    #--------------------------------------------------------------------
+
+    AC_PROG_MAKE_SET
+
+    #--------------------------------------------------------------------
+    # Find ranlib
+    #--------------------------------------------------------------------
+
+    AC_CHECK_TOOL(RANLIB, ranlib)
+
+    #--------------------------------------------------------------------
+    # Determines the correct binary file extension (.o, .obj, .exe etc.)
+    #--------------------------------------------------------------------
+
+    AC_OBJEXT
+    AC_EXEEXT
+])
+
+#------------------------------------------------------------------------
+# TEA_SETUP_COMPILER --
+#
+#      Do compiler checks that use the compiler.  This must go after
+#      TEA_SETUP_COMPILER_CC, which does the actual compiler check.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Sets up CC var and other standard bits we need to make executables.
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_SETUP_COMPILER], [
+    # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here.
+    AC_REQUIRE([TEA_SETUP_COMPILER_CC])
+
+    #------------------------------------------------------------------------
+    # If we're using GCC, see if the compiler understands -pipe. If so, use it.
+    # It makes compiling go faster.  (This is only a performance feature.)
+    #------------------------------------------------------------------------
+
+    if test -z "$no_pipe" -a -n "$GCC"; then
+       AC_CACHE_CHECK([if the compiler understands -pipe],
+           tcl_cv_cc_pipe, [
+           hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe"
+           AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no)
+           CFLAGS=$hold_cflags])
+       if test $tcl_cv_cc_pipe = yes; then
+           CFLAGS="$CFLAGS -pipe"
+       fi
+    fi
+
+    #--------------------------------------------------------------------
+    # Common compiler flag setup
+    #--------------------------------------------------------------------
+
+    AC_C_BIGENDIAN
+    if test "${TEA_PLATFORM}" = "unix" ; then
+       TEA_TCL_LINK_LIBS
+       TEA_MISSING_POSIX_HEADERS
+       # Let the user call this, because if it triggers, they will
+       # need a compat/strtod.c that is correct.  Users can also
+       # use Tcl_GetDouble(FromObj) instead.
+       #TEA_BUGGY_STRTOD
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_MAKE_LIB --
+#
+#      Generate a line that can be used to build a shared/unshared library
+#      in a platform independent manner.
+#
+# Arguments:
+#      none
+#
+#      Requires:
+#
+# Results:
+#
+#      Defines the following vars:
+#      CFLAGS -        Done late here to note disturb other AC macros
+#       MAKE_LIB -      Command to execute to build the Tcl library;
+#                       differs depending on whether or not Tcl is being
+#                       compiled as a shared library.
+#      MAKE_SHARED_LIB Makefile rule for building a shared library
+#      MAKE_STATIC_LIB Makefile rule for building a static library
+#      MAKE_STUB_LIB   Makefile rule for building a stub library
+#      VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL
+#      VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_MAKE_LIB], [
+    if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then
+       MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)"
+       MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)"
+       AC_EGREP_CPP([manifest needed], [
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+print("manifest needed")
+#endif
+       ], [
+       # Could do a CHECK_PROG for mt, but should always be with MSVC8+
+       VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi"
+       VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi"
+       MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}"
+       TEA_ADD_CLEANFILES([*.manifest])
+       ])
+       MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)"
+    else
+       MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)"
+       MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}"
+       MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)"
+    fi
+
+    if test "${SHARED_BUILD}" = "1" ; then
+       MAKE_LIB="${MAKE_SHARED_LIB} "
+    else
+       MAKE_LIB="${MAKE_STATIC_LIB} "
+    fi
+
+    #--------------------------------------------------------------------
+    # Shared libraries and static libraries have different names.
+    # Use the double eval to make sure any variables in the suffix is
+    # substituted. (@@@ Might not be necessary anymore)
+    #--------------------------------------------------------------------
+
+    if test "${TEA_PLATFORM}" = "windows" ; then
+       if test "${SHARED_BUILD}" = "1" ; then
+           # We force the unresolved linking of symbols that are really in
+           # the private libraries of Tcl and Tk.
+           if test x"${TK_BIN_DIR}" != x ; then
+               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\""
+           fi
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\""
+           if test "$GCC" = "yes"; then
+               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc"
+           fi
+           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
+       else
+           eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
+           if test "$GCC" = "yes"; then
+               PKG_LIB_FILE=lib${PKG_LIB_FILE}
+           fi
+       fi
+       # Some packages build their own stubs libraries
+       eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
+       if test "$GCC" = "yes"; then
+           PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE}
+       fi
+       # These aren't needed on Windows (either MSVC or gcc)
+       RANLIB=:
+       RANLIB_STUB=:
+    else
+       RANLIB_STUB="${RANLIB}"
+       if test "${SHARED_BUILD}" = "1" ; then
+           SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}"
+           if test x"${TK_BIN_DIR}" != x ; then
+               SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}"
+           fi
+           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}"
+           RANLIB=:
+       else
+           eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}"
+       fi
+       # Some packages build their own stubs libraries
+       eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}"
+    fi
+
+    # These are escaped so that only CFLAGS is picked up at configure time.
+    # The other values will be substituted at make time.
+    CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}"
+    if test "${SHARED_BUILD}" = "1" ; then
+       CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}"
+    fi
+
+    AC_SUBST(MAKE_LIB)
+    AC_SUBST(MAKE_SHARED_LIB)
+    AC_SUBST(MAKE_STATIC_LIB)
+    AC_SUBST(MAKE_STUB_LIB)
+    AC_SUBST(RANLIB_STUB)
+    AC_SUBST(VC_MANIFEST_EMBED_DLL)
+    AC_SUBST(VC_MANIFEST_EMBED_EXE)
+])
+
+#------------------------------------------------------------------------
+# TEA_LIB_SPEC --
+#
+#      Compute the name of an existing object library located in libdir
+#      from the given base name and produce the appropriate linker flags.
+#
+# Arguments:
+#      basename        The base name of the library without version
+#                      numbers, extensions, or "lib" prefixes.
+#      extra_dir       Extra directory in which to search for the
+#                      library.  This location is used first, then
+#                      $prefix/$exec-prefix, then some defaults.
+#
+# Requires:
+#      TEA_INIT and TEA_PREFIX must be called first.
+#
+# Results:
+#
+#      Defines the following vars:
+#              ${basename}_LIB_NAME    The computed library name.
+#              ${basename}_LIB_SPEC    The computed linker flags.
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LIB_SPEC], [
+    AC_MSG_CHECKING([for $1 library])
+
+    # Look in exec-prefix for the library (defined by TEA_PREFIX).
+
+    tea_lib_name_dir="${exec_prefix}/lib"
+
+    # Or in a user-specified location.
+
+    if test x"$2" != x ; then
+       tea_extra_lib_dir=$2
+    else
+       tea_extra_lib_dir=NONE
+    fi
+
+    for i in \
+           `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \
+           `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \
+           `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do
+       if test -f "$i" ; then
+           tea_lib_name_dir=`dirname $i`
+           $1_LIB_NAME=`basename $i`
+           $1_LIB_PATH_NAME=$i
+           break
+       fi
+    done
+
+    if test "${TEA_PLATFORM}" = "windows"; then
+       $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\"
+    else
+       # Strip off the leading "lib" and trailing ".a" or ".so"
+
+       tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'`
+       $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}"
+    fi
+
+    if test "x${$1_LIB_NAME}" = x ; then
+       AC_MSG_ERROR([not found])
+    else
+       AC_MSG_RESULT([${$1_LIB_SPEC}])
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_PRIVATE_TCL_HEADERS --
+#
+#      Locate the private Tcl include files
+#
+# Arguments:
+#
+#      Requires:
+#              TCL_SRC_DIR     Assumes that TEA_LOAD_TCLCONFIG has
+#                              already been called.
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TCL_TOP_DIR_NATIVE
+#              TCL_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [
+    # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh}
+    AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS])
+    AC_MSG_CHECKING([for Tcl private include files])
+
+    TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}`
+    TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\"
+
+    # Check to see if tcl<Plat>Port.h isn't already with the public headers
+    # Don't look for tclInt.h because that resides with tcl.h in the core
+    # sources, but the <plat>Port headers are in a different directory
+    if test "${TEA_PLATFORM}" = "windows" -a \
+       -f "${ac_cv_c_tclh}/tclWinPort.h"; then
+       result="private headers found with public headers"
+    elif test "${TEA_PLATFORM}" = "unix" -a \
+       -f "${ac_cv_c_tclh}/tclUnixPort.h"; then
+       result="private headers found with public headers"
+    else
+       TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\"
+       if test "${TEA_PLATFORM}" = "windows"; then
+           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\"
+       else
+           TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\"
+       fi
+       # Overwrite the previous TCL_INCLUDES as this should capture both
+       # public and private headers in the same set.
+       # We want to ensure these are substituted so as not to require
+       # any *_NATIVE vars be defined in the Makefile
+       TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}"
+       if test "`uname -s`" = "Darwin"; then
+            # If Tcl was built as a framework, attempt to use
+            # the framework's Headers and PrivateHeaders directories
+            case ${TCL_DEFS} in
+               *TCL_FRAMEWORK*)
+                   if test -d "${TCL_BIN_DIR}/Headers" -a \
+                           -d "${TCL_BIN_DIR}/PrivateHeaders"; then
+                       TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"
+                   else
+                       TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
+                   fi
+                   ;;
+           esac
+           result="Using ${TCL_INCLUDES}"
+       else
+           if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then
+               AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}])
+           fi
+           result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}"
+       fi
+    fi
+
+    AC_SUBST(TCL_TOP_DIR_NATIVE)
+
+    AC_SUBST(TCL_INCLUDES)
+    AC_MSG_RESULT([${result}])
+])
+
+#------------------------------------------------------------------------
+# TEA_PUBLIC_TCL_HEADERS --
+#
+#      Locate the installed public Tcl header files
+#
+# Arguments:
+#      None.
+#
+# Requires:
+#      CYGPATH must be set
+#
+# Results:
+#
+#      Adds a --with-tclinclude switch to configure.
+#      Result is cached.
+#
+#      Substitutes the following vars:
+#              TCL_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [
+    AC_MSG_CHECKING([for Tcl public headers])
+
+    AC_ARG_WITH(tclinclude, [  --with-tclinclude       directory containing the public Tcl header files], with_tclinclude=${withval})
+
+    AC_CACHE_VAL(ac_cv_c_tclh, [
+       # Use the value from --with-tclinclude, if it was given
+
+       if test x"${with_tclinclude}" != x ; then
+           if test -f "${with_tclinclude}/tcl.h" ; then
+               ac_cv_c_tclh=${with_tclinclude}
+           else
+               AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h])
+           fi
+       else
+           list=""
+           if test "`uname -s`" = "Darwin"; then
+               # If Tcl was built as a framework, attempt to use
+               # the framework's Headers directory
+               case ${TCL_DEFS} in
+                   *TCL_FRAMEWORK*)
+                       list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`"
+                       ;;
+               esac
+           fi
+
+           # Look in the source dir only if Tcl is not installed,
+           # and in that situation, look there before installed locations.
+           if test -f "${TCL_BIN_DIR}/Makefile" ; then
+               list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`"
+           fi
+
+           # Check order: pkg --prefix location, Tcl's --prefix location,
+           # relative to directory of tclConfig.sh.
+
+           eval "temp_includedir=${includedir}"
+           list="$list \
+               `ls -d ${temp_includedir}        2>/dev/null` \
+               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
+               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
+           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
+               list="$list /usr/local/include /usr/include"
+               if test x"${TCL_INCLUDE_SPEC}" != x ; then
+                   d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'`
+                   list="$list `ls -d ${d} 2>/dev/null`"
+               fi
+           fi
+           for i in $list ; do
+               if test -f "$i/tcl.h" ; then
+                   ac_cv_c_tclh=$i
+                   break
+               fi
+           done
+       fi
+    ])
+
+    # Print a message based on how we determined the include path
+
+    if test x"${ac_cv_c_tclh}" = x ; then
+       AC_MSG_ERROR([tcl.h not found.  Please specify its location with --with-tclinclude])
+    else
+       AC_MSG_RESULT([${ac_cv_c_tclh}])
+    fi
+
+    # Convert to a native path and substitute into the output files.
+
+    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
+
+    TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
+
+    AC_SUBST(TCL_INCLUDES)
+])
+
+#------------------------------------------------------------------------
+# TEA_PRIVATE_TK_HEADERS --
+#
+#      Locate the private Tk include files
+#
+# Arguments:
+#
+#      Requires:
+#              TK_SRC_DIR      Assumes that TEA_LOAD_TKCONFIG has
+#                               already been called.
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              TK_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [
+    # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh}
+    AC_REQUIRE([TEA_PUBLIC_TK_HEADERS])
+    AC_MSG_CHECKING([for Tk private include files])
+
+    TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}`
+    TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\"
+
+    # Check to see if tk<Plat>Port.h isn't already with the public headers
+    # Don't look for tkInt.h because that resides with tk.h in the core
+    # sources, but the <plat>Port headers are in a different directory
+    if test "${TEA_PLATFORM}" = "windows" -a \
+       -f "${ac_cv_c_tkh}/tkWinPort.h"; then
+       result="private headers found with public headers"
+    elif test "${TEA_PLATFORM}" = "unix" -a \
+       -f "${ac_cv_c_tkh}/tkUnixPort.h"; then
+       result="private headers found with public headers"
+    else
+       TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\"
+       TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\"
+       if test "${TEA_PLATFORM}" = "windows"; then
+           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\"
+       else
+           TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\"
+       fi
+       # Overwrite the previous TK_INCLUDES as this should capture both
+       # public and private headers in the same set.
+       # We want to ensure these are substituted so as not to require
+       # any *_NATIVE vars be defined in the Makefile
+       TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}"
+       # Detect and add ttk subdir
+       if test -d "${TK_SRC_DIR}/generic/ttk"; then
+          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\""
+       fi
+       if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
+          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\""
+       fi
+       if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then
+          TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\""
+       fi
+       if test "`uname -s`" = "Darwin"; then
+           # If Tk was built as a framework, attempt to use
+           # the framework's Headers and PrivateHeaders directories
+           case ${TK_DEFS} in
+               *TK_FRAMEWORK*)
+                       if test -d "${TK_BIN_DIR}/Headers" -a \
+                               -d "${TK_BIN_DIR}/PrivateHeaders"; then
+                           TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}"
+                       else
+                           TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
+                       fi
+                       ;;
+           esac
+           result="Using ${TK_INCLUDES}"
+       else
+           if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then
+              AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}])
+           fi
+           result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}"
+       fi
+    fi
+
+    AC_SUBST(TK_TOP_DIR_NATIVE)
+    AC_SUBST(TK_XLIB_DIR_NATIVE)
+
+    AC_SUBST(TK_INCLUDES)
+    AC_MSG_RESULT([${result}])
+])
+
+#------------------------------------------------------------------------
+# TEA_PUBLIC_TK_HEADERS --
+#
+#      Locate the installed public Tk header files
+#
+# Arguments:
+#      None.
+#
+# Requires:
+#      CYGPATH must be set
+#
+# Results:
+#
+#      Adds a --with-tkinclude switch to configure.
+#      Result is cached.
+#
+#      Substitutes the following vars:
+#              TK_INCLUDES
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [
+    AC_MSG_CHECKING([for Tk public headers])
+
+    AC_ARG_WITH(tkinclude, [  --with-tkinclude        directory containing the public Tk header files], with_tkinclude=${withval})
+
+    AC_CACHE_VAL(ac_cv_c_tkh, [
+       # Use the value from --with-tkinclude, if it was given
+
+       if test x"${with_tkinclude}" != x ; then
+           if test -f "${with_tkinclude}/tk.h" ; then
+               ac_cv_c_tkh=${with_tkinclude}
+           else
+               AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h])
+           fi
+       else
+           list=""
+           if test "`uname -s`" = "Darwin"; then
+               # If Tk was built as a framework, attempt to use
+               # the framework's Headers directory.
+               case ${TK_DEFS} in
+                   *TK_FRAMEWORK*)
+                       list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`"
+                       ;;
+               esac
+           fi
+
+           # Look in the source dir only if Tk is not installed,
+           # and in that situation, look there before installed locations.
+           if test -f "${TK_BIN_DIR}/Makefile" ; then
+               list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`"
+           fi
+
+           # Check order: pkg --prefix location, Tk's --prefix location,
+           # relative to directory of tkConfig.sh, Tcl's --prefix location,
+           # relative to directory of tclConfig.sh.
+
+           eval "temp_includedir=${includedir}"
+           list="$list \
+               `ls -d ${temp_includedir}        2>/dev/null` \
+               `ls -d ${TK_PREFIX}/include      2>/dev/null` \
+               `ls -d ${TK_BIN_DIR}/../include  2>/dev/null` \
+               `ls -d ${TCL_PREFIX}/include     2>/dev/null` \
+               `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`"
+           if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then
+               list="$list /usr/local/include /usr/include"
+               if test x"${TK_INCLUDE_SPEC}" != x ; then
+                   d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'`
+                   list="$list `ls -d ${d} 2>/dev/null`"
+               fi
+           fi
+           for i in $list ; do
+               if test -f "$i/tk.h" ; then
+                   ac_cv_c_tkh=$i
+                   break
+               fi
+           done
+       fi
+    ])
+
+    # Print a message based on how we determined the include path
+
+    if test x"${ac_cv_c_tkh}" = x ; then
+       AC_MSG_ERROR([tk.h not found.  Please specify its location with --with-tkinclude])
+    else
+       AC_MSG_RESULT([${ac_cv_c_tkh}])
+    fi
+
+    # Convert to a native path and substitute into the output files.
+
+    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}`
+
+    TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
+
+    AC_SUBST(TK_INCLUDES)
+
+    if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then
+       # On Windows and Aqua, we need the X compat headers
+       AC_MSG_CHECKING([for X11 header files])
+       if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then
+           INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`"
+           TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
+           AC_SUBST(TK_XINCLUDES)
+       fi
+       AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}])
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_PATH_CONFIG --
+#
+#      Locate the ${1}Config.sh file and perform a sanity check on
+#      the ${1} compile flags.  These are used by packages like
+#      [incr Tk] that load *Config.sh files from more than Tcl and Tk.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-$1=...
+#
+#      Defines the following vars:
+#              $1_BIN_DIR      Full path to the directory containing
+#                              the $1Config.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_CONFIG], [
+    #
+    # Ok, lets find the $1 configuration
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-$1
+    #
+
+    if test x"${no_$1}" = x ; then
+       # we reset no_$1 in case something fails here
+       no_$1=true
+       AC_ARG_WITH($1, [  --with-$1              directory containing $1 configuration ($1Config.sh)], with_$1config=${withval})
+       AC_MSG_CHECKING([for $1 configuration])
+       AC_CACHE_VAL(ac_cv_c_$1config,[
+
+           # First check to see if --with-$1 was specified.
+           if test x"${with_$1config}" != x ; then
+               case ${with_$1config} in
+                   */$1Config.sh )
+                       if test -f ${with_$1config}; then
+                           AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself])
+                           with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'`
+                       fi;;
+               esac
+               if test -f "${with_$1config}/$1Config.sh" ; then
+                   ac_cv_c_$1config=`(cd ${with_$1config}; pwd)`
+               else
+                   AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh])
+               fi
+           fi
+
+           # then check for a private $1 installation
+           if test x"${ac_cv_c_$1config}" = x ; then
+               for i in \
+                       ../$1 \
+                       `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ../../$1 \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ../../../$1 \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ${srcdir}/../$1 \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \
+                       `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \
+                       ; do
+                   if test -f "$i/$1Config.sh" ; then
+                       ac_cv_c_$1config=`(cd $i; pwd)`
+                       break
+                   fi
+                   if test -f "$i/unix/$1Config.sh" ; then
+                       ac_cv_c_$1config=`(cd $i/unix; pwd)`
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few common install locations
+           if test x"${ac_cv_c_$1config}" = x ; then
+               for i in `ls -d ${libdir} 2>/dev/null` \
+                       `ls -d ${exec_prefix}/lib 2>/dev/null` \
+                       `ls -d ${prefix}/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` \
+                       `ls -d /usr/contrib/lib 2>/dev/null` \
+                       `ls -d /usr/lib 2>/dev/null` \
+                       `ls -d /usr/lib64 2>/dev/null` \
+                       ; do
+                   if test -f "$i/$1Config.sh" ; then
+                       ac_cv_c_$1config=`(cd $i; pwd)`
+                       break
+                   fi
+               done
+           fi
+       ])
+
+       if test x"${ac_cv_c_$1config}" = x ; then
+           $1_BIN_DIR="# no $1 configs found"
+           AC_MSG_WARN([Cannot find $1 configuration definitions])
+           exit 0
+       else
+           no_$1=
+           $1_BIN_DIR=${ac_cv_c_$1config}
+           AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh])
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_CONFIG --
+#
+#      Load the $1Config.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              $1_BIN_DIR
+#
+# Results:
+#
+#      Substitutes the following vars:
+#              $1_SRC_DIR
+#              $1_LIB_FILE
+#              $1_LIB_SPEC
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_LOAD_CONFIG], [
+    AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh])
+
+    if test -f "${$1_BIN_DIR}/$1Config.sh" ; then
+        AC_MSG_RESULT([loading])
+       . "${$1_BIN_DIR}/$1Config.sh"
+    else
+        AC_MSG_RESULT([file not found])
+    fi
+
+    #
+    # If the $1_BIN_DIR is the build directory (not the install directory),
+    # then set the common variable name to the value of the build variables.
+    # For example, the variable $1_LIB_SPEC will be set to the value
+    # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC
+    # instead of $1_BUILD_LIB_SPEC since it will work with both an
+    # installed and uninstalled version of Tcl.
+    #
+
+    if test -f "${$1_BIN_DIR}/Makefile" ; then
+       AC_MSG_WARN([Found Makefile - using build library specs for $1])
+        $1_LIB_SPEC=${$1_BUILD_LIB_SPEC}
+        $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC}
+        $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH}
+        $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC}
+        $1_LIBRARY_PATH=${$1_LIBRARY_PATH}
+    fi
+
+    AC_SUBST($1_VERSION)
+    AC_SUBST($1_BIN_DIR)
+    AC_SUBST($1_SRC_DIR)
+
+    AC_SUBST($1_LIB_FILE)
+    AC_SUBST($1_LIB_SPEC)
+
+    AC_SUBST($1_STUB_LIB_FILE)
+    AC_SUBST($1_STUB_LIB_SPEC)
+    AC_SUBST($1_STUB_LIB_PATH)
+
+    # Allow the caller to prevent this auto-check by specifying any 2nd arg
+    AS_IF([test "x$2" = x], [
+       # Check both upper and lower-case variants
+       # If a dev wanted non-stubs libs, this function could take an option
+       # to not use _STUB in the paths below
+       AS_IF([test "x${$1_STUB_LIB_SPEC}" = x],
+           [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)],
+           [TEA_LOAD_CONFIG_LIB($1_STUB)])
+    ])
+])
+
+#------------------------------------------------------------------------
+# TEA_LOAD_CONFIG_LIB --
+#
+#      Helper function to load correct library from another extension's
+#      ${PACKAGE}Config.sh.
+#
+# Results:
+#      Adds to LIBS the appropriate extension library
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_LOAD_CONFIG_LIB], [
+    AC_MSG_CHECKING([For $1 library for LIBS])
+    # This simplifies the use of stub libraries by automatically adding
+    # the stub lib to your path.  Normally this would add to SHLIB_LD_LIBS,
+    # but this is called before CONFIG_CFLAGS.  More importantly, this adds
+    # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD.
+    if test "x${$1_LIB_SPEC}" != "x" ; then
+       if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then
+           TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"])
+           AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}])
+       else
+           TEA_ADD_LIBS([${$1_LIB_SPEC}])
+           AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}])
+       fi
+    else
+       AC_MSG_RESULT([file not found])
+    fi
+])
+
+#------------------------------------------------------------------------
+# TEA_EXPORT_CONFIG --
+#
+#      Define the data to insert into the ${PACKAGE}Config.sh file
+#
+# Arguments:
+#
+#      Requires the following vars to be set:
+#              $1
+#
+# Results:
+#      Substitutes the following vars:
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_EXPORT_CONFIG], [
+    #--------------------------------------------------------------------
+    # These are for $1Config.sh
+    #--------------------------------------------------------------------
+
+    # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib)
+    eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}"
+    if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
+       eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}"
+       eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}"
+    else
+       eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
+       eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}"
+    fi
+    $1_BUILD_LIB_SPEC="-L`$CYGPATH $(pwd)` ${$1_LIB_FLAG}"
+    $1_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${$1_LIB_FLAG}"
+    $1_BUILD_STUB_LIB_SPEC="-L`$CYGPATH $(pwd)` [$]{$1_STUB_LIB_FLAG}"
+    $1_STUB_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` [$]{$1_STUB_LIB_FLAG}"
+    $1_BUILD_STUB_LIB_PATH="`$CYGPATH $(pwd)`/[$]{PKG_STUB_LIB_FILE}"
+    $1_STUB_LIB_PATH="`$CYGPATH ${pkglibdir}`/[$]{PKG_STUB_LIB_FILE}"
+
+    AC_SUBST($1_BUILD_LIB_SPEC)
+    AC_SUBST($1_LIB_SPEC)
+    AC_SUBST($1_BUILD_STUB_LIB_SPEC)
+    AC_SUBST($1_STUB_LIB_SPEC)
+    AC_SUBST($1_BUILD_STUB_LIB_PATH)
+    AC_SUBST($1_STUB_LIB_PATH)
+
+    AC_SUBST(MAJOR_VERSION)
+    AC_SUBST(MINOR_VERSION)
+    AC_SUBST(PATCHLEVEL)
+])
+
+
+#------------------------------------------------------------------------
+# TEA_PATH_CELIB --
+#
+#      Locate Keuchel's celib emulation layer for targeting Win/CE
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-celib=...
+#
+#      Defines the following vars:
+#              CELIB_DIR       Full path to the directory containing
+#                              the include and platform lib files
+#------------------------------------------------------------------------
+
+AC_DEFUN([TEA_PATH_CELIB], [
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-celib
+
+    if test x"${no_celib}" = x ; then
+       # we reset no_celib in case something fails here
+       no_celib=true
+       AC_ARG_WITH(celib,[  --with-celib=DIR        use Windows/CE support library from DIR], with_celibconfig=${withval})
+       AC_MSG_CHECKING([for Windows/CE celib directory])
+       AC_CACHE_VAL(ac_cv_c_celibconfig,[
+           # First check to see if --with-celibconfig was specified.
+           if test x"${with_celibconfig}" != x ; then
+               if test -d "${with_celibconfig}/inc" ; then
+                   ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)`
+               else
+                   AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory])
+               fi
+           fi
+
+           # then check for a celib library
+           if test x"${ac_cv_c_celibconfig}" = x ; then
+               for i in \
+                       ../celib-palm-3.0 \
+                       ../celib \
+                       ../../celib-palm-3.0 \
+                       ../../celib \
+                       `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \
+                       ${srcdir}/../celib-palm-3.0 \
+                       ${srcdir}/../celib \
+                       `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \
+                       ; do
+                   if test -d "$i/inc" ; then
+                       ac_cv_c_celibconfig=`(cd $i; pwd)`
+                       break
+                   fi
+               done
+           fi
+       ])
+       if test x"${ac_cv_c_celibconfig}" = x ; then
+           AC_MSG_ERROR([Cannot find celib support library directory])
+       else
+           no_celib=
+           CELIB_DIR=${ac_cv_c_celibconfig}
+           CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
+           AC_MSG_RESULT([found $CELIB_DIR])
+       fi
+    fi
+])
+
+###
+# Tip 430 - ZipFS Modifications
+###
+#------------------------------------------------------------------------
+# SC_ZIPFS_SUPPORT
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              TCL_ZIP_FILE
+#              TCL_ZIPFS_SUPPORT
+#              TCL_ZIPFS_FLAG
+#              ZIP_PROG
+#------------------------------------------------------------------------
+
+#------------------------------------------------------------------------
+# SC_PROG_ZIP
+#      Locate a zip encoder installed on the system path, or none.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      Substitutes the following vars:
+#              ZIP_PROG
+#       ZIP_PROG_OPTIONS
+#       ZIP_PROG_VFSSEARCH
+#       ZIP_INSTALL_OBJS
+#------------------------------------------------------------------------
+AC_DEFUN([TEA_ZIPFS_SUPPORT], [
+    AC_MSG_CHECKING([for zipfs support])
+    ZIP_PROG=""
+    ZIP_PROG_OPTIONS=""
+    ZIP_PROG_VFSSEARCH=""
+    INSTALL_MSGS=""
+    # If our native tclsh processes the "install" command line option
+    # we can use it to mint zip files
+    AS_IF([$TCLSH_PROG install],[
+      ZIP_PROG=${TCLSH_PROG}
+      ZIP_PROG_OPTIONS="install mkzip"
+      ZIP_PROG_VFSSEARCH="."
+      AC_MSG_RESULT([Can use Native Tclsh for Zip encoding])
+    ])
+    if test "x$ZIP_PROG" = "x" ; then
+        AC_CACHE_VAL(ac_cv_path_zip, [
+        search_path=`echo ${PATH} | sed -e 's/:/ /g'`
+        for dir in $search_path ; do
+            for j in `ls -r $dir/zip 2> /dev/null` \
+                `ls -r $dir/zip 2> /dev/null` ; do
+            if test x"$ac_cv_path_zip" = x ; then
+                if test -f "$j" ; then
+                ac_cv_path_zip=$j
+                break
+                fi
+            fi
+            done
+        done
+        ])
+        if test -f "$ac_cv_path_zip" ; then
+            ZIP_PROG="$ac_cv_path_zip "
+            AC_MSG_RESULT([$ZIP_PROG])
+            ZIP_PROG_OPTIONS="-rq"
+            ZIP_PROG_VFSSEARCH="."
+            AC_MSG_RESULT([Found INFO Zip in environment])
+            # Use standard arguments for zip
+        fi
+    fi
+    if test "x$ZIP_PROG" = "x" ; then
+           # It is not an error if an installed version of Zip can't be located.
+        ZIP_PROG=""
+        ZIP_PROG_OPTIONS=""
+        ZIP_PROG_VFSSEARCH=""
+        TCL_ZIPFS_SUPPORT=0
+        TCL_ZIPFS_FLAG=
+    else
+        # ZIPFS Support
+       eval "TCL_ZIP_FILE=\"${TCL_ZIP_FILE}\""
+       if test ${TCL_ZIP_FILE} = "" ; then
+          TCL_ZIPFS_SUPPORT=0
+          TCL_ZIPFS_FLAG=
+          INSTALL_LIBRARIES=install-libraries
+          INSTALL_MSGS=install-msgs
+       else
+           if test ${SHARED_BUILD} = 1 ; then
+              TCL_ZIPFS_SUPPORT=1
+              INSTALL_LIBRARIES=install-libraries-zipfs-shared
+           else
+              TCL_ZIPFS_SUPPORT=2
+              INSTALL_LIBRARIES=install-libraries-zipfs-static
+           fi
+          TCL_ZIPFS_FLAG=-DTCL_ZIPFS_SUPPORT
+       fi
+    fi
+
+    AC_SUBST(TCL_ZIP_FILE)
+    AC_SUBST(TCL_ZIPFS_SUPPORT)
+    AC_SUBST(TCL_ZIPFS_FLAG)
+    AC_SUBST(ZIP_PROG)
+    AC_SUBST(ZIP_PROG_OPTIONS)
+    AC_SUBST(ZIP_PROG_VFSSEARCH)
+    AC_SUBST(INSTALL_LIBRARIES)
+    AC_SUBST(INSTALL_MSGS)
+])
+
+# Local Variables:
+# mode: autoconf
+# End:
similarity index 80%
rename from pkgs/thread2.8.1/win/README.txt
rename to pkgs/thread2.8.2/win/README.txt
index b46689b..91cce56 100644 (file)
@@ -33,16 +33,21 @@ from Micro$oft.
 
 To build the extension invoke the following command:
 
-    nmake -f makefile.vc TCLDIR=<path>
+    nmake -f makefile.vc INSTALLDIR=<path-to-installed-tcl>
 
-You would need to give the <path> of the Tcl distribution where
-tcl.h and other needed Tcl files are located.
-Please look into the makefile.vc file for more information.
+INSTALLDIR is the path of the Tcl distribution where
+tcl.h and other needed Tcl files are installed.
+To build against a Tcl source build instead,
+
+    nmake -f makefile.vc TCLDIR=<path-to-tcl-sources>
+
+Please look into the makefile.vc file for more options etc.
 
 Alternatively, you can open the extension workspace and project files
 (thread_win.dsw and thread_win.dsp) from within the MSVC++ and press
 the F7 key to build the extension under the control of the MSVC IDE.
-
+NOTE: it is likely that the .dsw and .dsp files are out of date. At
+least Visual Studio 2017 was not able to open those files.
 
 II. Building optional support libraries
 =======================================
diff --git a/pkgs/thread2.8.2/win/makefile.vc b/pkgs/thread2.8.2/win/makefile.vc
new file mode 100644 (file)
index 0000000..a2c8615
--- /dev/null
@@ -0,0 +1,63 @@
+#------------------------------------------------------------- -*- makefile -*-\r
+#\r
+# Makefile for thread extension\r
+#\r
+# Basic build, test and install\r
+#   nmake /f makefile.vc INSTALLDIR=c:\tcl\r
+#   nmake /f makefile.vc INSTALLDIR=c:\tcl test\r
+#   nmake /f makefile.vc INSTALLDIR=c:\tcl install\r
+#\r
+# For other build options (debug, static etc.),\r
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for\r
+# detailed documentation.\r
+#\r
+# In addition to the command line macros described there the following\r
+# may also be defined.\r
+#  ADDOPTDEFINES - addition compiler options\r
+#  ADDLINKOPTS - addition link options\r
+# E.g.\r
+#   nmake -nologo -f makefile.vc TCLDIR=%TCLDIR% ... ADDOPTDEFINES="-I%LMDBDIR%" ADDLINKOPTS="%LMDBDIR%\Release\lmdb.lib"\r
+# \r
+# See the file "license.terms" for information on usage and redistribution\r
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
+#\r
+#------------------------------------------------------------------------------\r
+\r
+PROJECT = thread\r
+RCFILE = thread.rc\r
+DOCDIR          = $(ROOT)\doc\html\r
+\r
+PRJ_DEFINES = -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS\r
+PRJ_DEFINES = $(PRJ_DEFINES) -DTCL_TIP143 -DTCL_TIP285 $(ADDOPTDEFINES)\r
+PRJ_LIBS = $(ADDLINKOPTS)\r
+\r
+!include "rules-ext.vc"\r
+\r
+PRJ_OBJS = \\r
+       $(TMP_DIR)\threadNs.obj \\r
+       $(TMP_DIR)\threadCmd.obj \\r
+       $(TMP_DIR)\threadSvCmd.obj \\r
+       $(TMP_DIR)\threadSpCmd.obj \\r
+       $(TMP_DIR)\threadPoolCmd.obj \\r
+       $(TMP_DIR)\psGdbm.obj \\r
+       $(TMP_DIR)\psLmdb.obj \\r
+       $(TMP_DIR)\threadSvListCmd.obj \\r
+       $(TMP_DIR)\threadSvKeylistCmd.obj \\r
+       $(TMP_DIR)\tclXkeylist.obj \\r
+       $(TMP_DIR)\threadWin.obj\r
+\r
+!include "$(_RULESDIR)\targets.vc"\r
+\r
+install:    default-install-docs-html\r
+pkgindex:   default-pkgindex-tea\r
+\r
+# Explicit dependency rules\r
+$(GENERICDIR)\psGdbm.c: $(GENERICDIR)\psGdbm.h\r
+$(GENERICDIR)\psLmdb.c: $(GENERICDIR)\psLmdb.h\r
+$(GENERICDIR)\threadCmd.c : $(GENERICDIR)\tclThreadInt.h\r
+$(GENERICDIR)\threadSpCmd.c : $(GENERICDIR)\tclThreadInt.h\r
+$(GENERICDIR)\threadSvCmd.c : $(GENERICDIR)\tclThreadInt.h\r
+$(GENERICDIR)\threadPoolCmd.c : $(GENERICDIR)\tclThreadInt.h\r
+$(GENERICDIR)\threadSvListCmd.c : $(GENERICDIR)\tclThreadInt.h\r
+$(GENERICDIR)\threadSvKeylistCmd.c : $(GENERICDIR)\tclThreadInt.h\r
+\r
diff --git a/pkgs/thread2.8.2/win/nmakehlp.c b/pkgs/thread2.8.2/win/nmakehlp.c
new file mode 100644 (file)
index 0000000..025bb99
--- /dev/null
@@ -0,0 +1,814 @@
+/*
+ * ----------------------------------------------------------------------------
+ * nmakehlp.c --
+ *
+ *     This is used to fix limitations within nmake and the environment.
+ *
+ * Copyright (c) 2002 by David Gravereaux.
+ * Copyright (c) 2006 by Pat Thoyts
+ *
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ * ----------------------------------------------------------------------------
+ */
+
+#define _CRT_SECURE_NO_DEPRECATE
+#include <windows.h>
+#define NO_SHLWAPI_GDI
+#define NO_SHLWAPI_STREAM
+#define NO_SHLWAPI_REG
+#include <shlwapi.h>
+#pragma comment (lib, "user32.lib")
+#pragma comment (lib, "kernel32.lib")
+#pragma comment (lib, "shlwapi.lib")
+#include <stdio.h>
+#include <math.h>
+
+/*
+ * This library is required for x64 builds with _some_ versions of MSVC
+ */
+#if defined(_M_IA64) || defined(_M_AMD64)
+#if _MSC_VER >= 1400 && _MSC_VER < 1500
+#pragma comment(lib, "bufferoverflowU")
+#endif
+#endif
+
+/* ISO hack for dumb VC++ */
+#ifdef _MSC_VER
+#define   snprintf     _snprintf
+#endif
+
+
+/* protos */
+
+static int CheckForCompilerFeature(const char *option);
+static int CheckForLinkerFeature(const char **options, int count);
+static int IsIn(const char *string, const char *substring);
+static int SubstituteFile(const char *substs, const char *filename);
+static int QualifyPath(const char *path);
+static int LocateDependency(const char *keyfile);
+static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
+static DWORD WINAPI ReadFromPipe(LPVOID args);
+
+/* globals */
+
+#define CHUNK  25
+#define STATICBUFFERSIZE    1000
+typedef struct {
+    HANDLE pipe;
+    char buffer[STATICBUFFERSIZE];
+} pipeinfo;
+
+pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'};
+pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'};
+\f
+/*
+ * exitcodes: 0 == no, 1 == yes, 2 == error
+ */
+
+int
+main(
+    int argc,
+    char *argv[])
+{
+    char msg[300];
+    DWORD dwWritten;
+    int chars;
+    char *s;
+
+    /*
+     * Make sure children (cl.exe and link.exe) are kept quiet.
+     */
+
+    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
+
+    /*
+     * Make sure the compiler and linker aren't effected by the outside world.
+     */
+
+    SetEnvironmentVariable("CL", "");
+    SetEnvironmentVariable("LINK", "");
+
+    if (argc > 1 && *argv[1] == '-') {
+       switch (*(argv[1]+1)) {
+       case 'c':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -c <compiler option>\n"
+                       "Tests for whether cl.exe supports an option\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return CheckForCompilerFeature(argv[2]);
+       case 'l':
+           if (argc < 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -l <linker option> ?<mandatory option> ...?\n"
+                       "Tests for whether link.exe supports an option\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return CheckForLinkerFeature(&argv[2], argc-2);
+       case 'f':
+           if (argc == 2) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -f <string> <substring>\n"
+                       "Find a substring within another\n"
+                       "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           } else if (argc == 3) {
+               /*
+                * If the string is blank, there is no match.
+                */
+
+               return 0;
+           } else {
+               return IsIn(argv[2], argv[3]);
+           }
+       case 's':
+           if (argc == 2) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                       "usage: %s -s <substitutions file> <file>\n"
+                       "Perform a set of string map type substutitions on a file\n"
+                       "exitcodes: 0\n",
+                       argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                       &dwWritten, NULL);
+               return 2;
+           }
+           return SubstituteFile(argv[2], argv[3]);
+       case 'V':
+           if (argc != 4) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -V filename matchstring\n"
+                   "Extract a version from a file:\n"
+                   "eg: pkgIndex.tcl \"package ifneeded http\"",
+                   argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 0;
+           }
+           s = GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0');
+           if (s && *s) {
+               printf("%s\n", s);
+               return 0;
+           } else
+               return 1; /* Version not found. Return non-0 exit code */
+
+       case 'Q':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -Q path\n"
+                   "Emit the fully qualified path\n"
+                   "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return QualifyPath(argv[2]);
+
+       case 'L':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -L keypath\n"
+                   "Emit the fully qualified path of directory containing keypath\n"
+                   "exitcodes: 0 == success, 1 == not found, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return LocateDependency(argv[2]);
+       }
+    }
+    chars = snprintf(msg, sizeof(msg) - 1,
+           "usage: %s -c|-f|-l|-Q|-s|-V ...\n"
+           "This is a little helper app to equalize shell differences between WinNT and\n"
+           "Win9x and get nmake.exe to accomplish its job.\n",
+           argv[0]);
+    WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
+    return 2;
+}
+\f
+static int
+CheckForCompilerFeature(
+    const char *option)
+{
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;
+    SECURITY_ATTRIBUTES sa;
+    DWORD threadID;
+    char msg[300];
+    BOOL ok;
+    HANDLE hProcess, h, pipeThreads[2];
+    char cmdline[100];
+
+    hProcess = GetCurrentProcess();
+
+    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
+    ZeroMemory(&si, sizeof(STARTUPINFO));
+    si.cb = sizeof(STARTUPINFO);
+    si.dwFlags   = STARTF_USESTDHANDLES;
+    si.hStdInput = INVALID_HANDLE_VALUE;
+
+    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
+    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+    sa.lpSecurityDescriptor = NULL;
+    sa.bInheritHandle = FALSE;
+
+    /*
+     * Create a non-inheritible pipe.
+     */
+
+    CreatePipe(&Out.pipe, &h, &sa, 0);
+
+    /*
+     * Dupe the write side, make it inheritible, and close the original.
+     */
+
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Same as above, but for the error side.
+     */
+
+    CreatePipe(&Err.pipe, &h, &sa, 0);
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Base command line.
+     */
+
+    lstrcpy(cmdline, "cl.exe -nologo -c -TC -Zs -X -Fp.\\_junk.pch ");
+
+    /*
+     * Append our option for testing
+     */
+
+    lstrcat(cmdline, option);
+
+    /*
+     * Filename to compile, which exists, but is nothing and empty.
+     */
+
+    lstrcat(cmdline, " .\\nul");
+
+    ok = CreateProcess(
+           NULL,           /* Module name. */
+           cmdline,        /* Command line. */
+           NULL,           /* Process handle not inheritable. */
+           NULL,           /* Thread handle not inheritable. */
+           TRUE,           /* yes, inherit handles. */
+           DETACHED_PROCESS, /* No console for you. */
+           NULL,           /* Use parent's environment block. */
+           NULL,           /* Use parent's starting directory. */
+           &si,            /* Pointer to STARTUPINFO structure. */
+           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
+
+    if (!ok) {
+       DWORD err = GetLastError();
+       int chars = snprintf(msg, sizeof(msg) - 1,
+               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
+
+       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
+               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
+               (300-chars), 0);
+       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
+       return 2;
+    }
+
+    /*
+     * Close our references to the write handles that have now been inherited.
+     */
+
+    CloseHandle(si.hStdOutput);
+    CloseHandle(si.hStdError);
+
+    WaitForInputIdle(pi.hProcess, 5000);
+    CloseHandle(pi.hThread);
+
+    /*
+     * Start the pipe reader threads.
+     */
+
+    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
+    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
+
+    /*
+     * Block waiting for the process to end.
+     */
+
+    WaitForSingleObject(pi.hProcess, INFINITE);
+    CloseHandle(pi.hProcess);
+
+    /*
+     * Wait for our pipe to get done reading, should it be a little slow.
+     */
+
+    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
+    CloseHandle(pipeThreads[0]);
+    CloseHandle(pipeThreads[1]);
+
+    /*
+     * Look for the commandline warning code in both streams.
+     *  - in MSVC 6 & 7 we get D4002, in MSVC 8 we get D9002.
+     */
+
+    return !(strstr(Out.buffer, "D4002") != NULL
+             || strstr(Err.buffer, "D4002") != NULL
+             || strstr(Out.buffer, "D9002") != NULL
+             || strstr(Err.buffer, "D9002") != NULL
+             || strstr(Out.buffer, "D2021") != NULL
+             || strstr(Err.buffer, "D2021") != NULL);
+}
+\f
+static int
+CheckForLinkerFeature(
+    const char **options,
+    int count)
+{
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;
+    SECURITY_ATTRIBUTES sa;
+    DWORD threadID;
+    char msg[300];
+    BOOL ok;
+    HANDLE hProcess, h, pipeThreads[2];
+    int i;
+    char cmdline[255];
+
+    hProcess = GetCurrentProcess();
+
+    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
+    ZeroMemory(&si, sizeof(STARTUPINFO));
+    si.cb = sizeof(STARTUPINFO);
+    si.dwFlags   = STARTF_USESTDHANDLES;
+    si.hStdInput = INVALID_HANDLE_VALUE;
+
+    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
+    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+    sa.lpSecurityDescriptor = NULL;
+    sa.bInheritHandle = TRUE;
+
+    /*
+     * Create a non-inheritible pipe.
+     */
+
+    CreatePipe(&Out.pipe, &h, &sa, 0);
+
+    /*
+     * Dupe the write side, make it inheritible, and close the original.
+     */
+
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Same as above, but for the error side.
+     */
+
+    CreatePipe(&Err.pipe, &h, &sa, 0);
+    DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE,
+           DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+
+    /*
+     * Base command line.
+     */
+
+    lstrcpy(cmdline, "link.exe -nologo ");
+
+    /*
+     * Append our option for testing.
+     */
+
+    for (i = 0; i < count; i++) {
+       lstrcat(cmdline, " \"");
+       lstrcat(cmdline, options[i]);
+       lstrcat(cmdline, "\"");
+    }
+
+    ok = CreateProcess(
+           NULL,           /* Module name. */
+           cmdline,        /* Command line. */
+           NULL,           /* Process handle not inheritable. */
+           NULL,           /* Thread handle not inheritable. */
+           TRUE,           /* yes, inherit handles. */
+           DETACHED_PROCESS, /* No console for you. */
+           NULL,           /* Use parent's environment block. */
+           NULL,           /* Use parent's starting directory. */
+           &si,            /* Pointer to STARTUPINFO structure. */
+           &pi);           /* Pointer to PROCESS_INFORMATION structure. */
+
+    if (!ok) {
+       DWORD err = GetLastError();
+       int chars = snprintf(msg, sizeof(msg) - 1,
+               "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
+
+       FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
+               FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID)&msg[chars],
+               (300-chars), 0);
+       WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, lstrlen(msg), &err,NULL);
+       return 2;
+    }
+
+    /*
+     * Close our references to the write handles that have now been inherited.
+     */
+
+    CloseHandle(si.hStdOutput);
+    CloseHandle(si.hStdError);
+
+    WaitForInputIdle(pi.hProcess, 5000);
+    CloseHandle(pi.hThread);
+
+    /*
+     * Start the pipe reader threads.
+     */
+
+    pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
+    pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
+
+    /*
+     * Block waiting for the process to end.
+     */
+
+    WaitForSingleObject(pi.hProcess, INFINITE);
+    CloseHandle(pi.hProcess);
+
+    /*
+     * Wait for our pipe to get done reading, should it be a little slow.
+     */
+
+    WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
+    CloseHandle(pipeThreads[0]);
+    CloseHandle(pipeThreads[1]);
+
+    /*
+     * Look for the commandline warning code in the stderr stream.
+     */
+
+    return !(strstr(Out.buffer, "LNK1117") != NULL ||
+           strstr(Err.buffer, "LNK1117") != NULL ||
+           strstr(Out.buffer, "LNK4044") != NULL ||
+           strstr(Err.buffer, "LNK4044") != NULL ||
+           strstr(Out.buffer, "LNK4224") != NULL ||
+           strstr(Err.buffer, "LNK4224") != NULL);
+}
+\f
+static DWORD WINAPI
+ReadFromPipe(
+    LPVOID args)
+{
+    pipeinfo *pi = (pipeinfo *) args;
+    char *lastBuf = pi->buffer;
+    DWORD dwRead;
+    BOOL ok;
+
+  again:
+    if (lastBuf - pi->buffer + CHUNK > STATICBUFFERSIZE) {
+       CloseHandle(pi->pipe);
+       return (DWORD)-1;
+    }
+    ok = ReadFile(pi->pipe, lastBuf, CHUNK, &dwRead, 0L);
+    if (!ok || dwRead == 0) {
+       CloseHandle(pi->pipe);
+       return 0;
+    }
+    lastBuf += dwRead;
+    goto again;
+
+    return 0;  /* makes the compiler happy */
+}
+\f
+static int
+IsIn(
+    const char *string,
+    const char *substring)
+{
+    return (strstr(string, substring) != NULL);
+}
+\f
+/*
+ * GetVersionFromFile --
+ *     Looks for a match string in a file and then returns the version
+ *     following the match where a version is anything acceptable to
+ *     package provide or package ifneeded.
+ */
+
+static const char *
+GetVersionFromFile(
+    const char *filename,
+    const char *match,
+    int numdots)
+{
+    size_t cbBuffer = 100;
+    static char szBuffer[100];
+    char *szResult = NULL;
+    FILE *fp = fopen(filename, "rt");
+
+    if (fp != NULL) {
+       /*
+        * Read data until we see our match string.
+        */
+
+       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
+           LPSTR p, q;
+
+           p = strstr(szBuffer, match);
+           if (p != NULL) {
+               /*
+                * Skip to first digit after the match.
+                */
+
+               p += strlen(match);
+               while (*p && !isdigit(*p)) {
+                   ++p;
+               }
+
+               /*
+                * Find ending whitespace.
+                */
+
+               q = p;
+               while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q)
+                           && (!strchr("ab", q[-1])) || --numdots))) {
+                   ++q;
+               }
+
+               memcpy(szBuffer, p, q - p);
+               szBuffer[q-p] = 0;
+               szResult = szBuffer;
+               break;
+           }
+       }
+       fclose(fp);
+    }
+    return szResult;
+}
+\f
+/*
+ * List helpers for the SubstituteFile function
+ */
+
+typedef struct list_item_t {
+    struct list_item_t *nextPtr;
+    char * key;
+    char * value;
+} list_item_t;
+
+/* insert a list item into the list (list may be null) */
+static list_item_t *
+list_insert(list_item_t **listPtrPtr, const char *key, const char *value)
+{
+    list_item_t *itemPtr = malloc(sizeof(list_item_t));
+    if (itemPtr) {
+       itemPtr->key = strdup(key);
+       itemPtr->value = strdup(value);
+       itemPtr->nextPtr = NULL;
+
+       while(*listPtrPtr) {
+           listPtrPtr = &(*listPtrPtr)->nextPtr;
+       }
+       *listPtrPtr = itemPtr;
+    }
+    return itemPtr;
+}
+
+static void
+list_free(list_item_t **listPtrPtr)
+{
+    list_item_t *tmpPtr, *listPtr = *listPtrPtr;
+    while (listPtr) {
+       tmpPtr = listPtr;
+       listPtr = listPtr->nextPtr;
+       free(tmpPtr->key);
+       free(tmpPtr->value);
+       free(tmpPtr);
+    }
+}
+\f
+/*
+ * SubstituteFile --
+ *     As windows doesn't provide anything useful like sed and it's unreliable
+ *     to use the tclsh you are building against (consider x-platform builds -
+ *     eg compiling AMD64 target from IX86) we provide a simple substitution
+ *     option here to handle autoconf style substitutions.
+ *     The substitution file is whitespace and line delimited. The file should
+ *     consist of lines matching the regular expression:
+ *       \s*\S+\s+\S*$
+ *
+ *     Usage is something like:
+ *       nmakehlp -S << $** > $@
+ *        @PACKAGE_NAME@ $(PACKAGE_NAME)
+ *        @PACKAGE_VERSION@ $(PACKAGE_VERSION)
+ *        <<
+ */
+
+static int
+SubstituteFile(
+    const char *substitutions,
+    const char *filename)
+{
+    size_t cbBuffer = 1024;
+    static char szBuffer[1024], szCopy[1024];
+    char *szResult = NULL;
+    list_item_t *substPtr = NULL;
+    FILE *fp, *sp;
+
+    fp = fopen(filename, "rt");
+    if (fp != NULL) {
+
+       /*
+        * Build a list of substutitions from the first filename
+        */
+
+       sp = fopen(substitutions, "rt");
+       if (sp != NULL) {
+           while (fgets(szBuffer, cbBuffer, sp) != NULL) {
+               unsigned char *ks, *ke, *vs, *ve;
+               ks = (unsigned char*)szBuffer;
+               while (ks && *ks && isspace(*ks)) ++ks;
+               ke = ks;
+               while (ke && *ke && !isspace(*ke)) ++ke;
+               vs = ke;
+               while (vs && *vs && isspace(*vs)) ++vs;
+               ve = vs;
+               while (ve && *ve && !(*ve == '\r' || *ve == '\n')) ++ve;
+               *ke = 0, *ve = 0;
+               list_insert(&substPtr, (char*)ks, (char*)vs);
+           }
+           fclose(sp);
+       }
+
+       /* debug: dump the list */
+#ifdef _DEBUG
+       {
+           int n = 0;
+           list_item_t *p = NULL;
+           for (p = substPtr; p != NULL; p = p->nextPtr, ++n) {
+               fprintf(stderr, "% 3d '%s' => '%s'\n", n, p->key, p->value);
+           }
+       }
+#endif
+
+       /*
+        * Run the substitutions over each line of the input
+        */
+
+       while (fgets(szBuffer, cbBuffer, fp) != NULL) {
+           list_item_t *p = NULL;
+           for (p = substPtr; p != NULL; p = p->nextPtr) {
+               char *m = strstr(szBuffer, p->key);
+               if (m) {
+                   char *cp, *op, *sp;
+                   cp = szCopy;
+                   op = szBuffer;
+                   while (op != m) *cp++ = *op++;
+                   sp = p->value;
+                   while (sp && *sp) *cp++ = *sp++;
+                   op += strlen(p->key);
+                   while (*op) *cp++ = *op++;
+                   *cp = 0;
+                   memcpy(szBuffer, szCopy, sizeof(szCopy));
+               }
+           }
+           printf(szBuffer);
+       }
+
+       list_free(&substPtr);
+    }
+    fclose(fp);
+    return 0;
+}
+\f
+/*
+ * QualifyPath --
+ *
+ *     This composes the current working directory with a provided path
+ *     and returns the fully qualified and normalized path.
+ *     Mostly needed to setup paths for testing.
+ */
+
+static int
+QualifyPath(
+    const char *szPath)
+{
+    char szCwd[MAX_PATH + 1];
+    char szTmp[MAX_PATH + 1];
+    char *p;
+    GetCurrentDirectory(MAX_PATH, szCwd);
+    while ((p = strchr(szPath, '/')) && *p)
+       *p = '\\';
+    PathCombine(szTmp, szCwd, szPath);
+    PathCanonicalize(szCwd, szTmp);
+    printf("%s\n", szCwd);
+    return 0;
+}
+
+/*
+ * Implements LocateDependency for a single directory. See that command
+ * for an explanation.
+ * Returns 0 if found after printing the directory.
+ * Returns 1 if not found but no errors.
+ * Returns 2 on any kind of error
+ * Basically, these are used as exit codes for the process.
+ */
+static int LocateDependencyHelper(const char *dir, const char *keypath)
+{
+    HANDLE hSearch;
+    char path[MAX_PATH+1];
+    int dirlen, keylen, ret;
+    WIN32_FIND_DATA finfo;
+
+    if (dir == NULL || keypath == NULL)
+       return 2; /* Have no real error reporting mechanism into nmake */
+    dirlen = strlen(dir);
+    if ((dirlen + 3) > sizeof(path))
+       return 2;
+    strncpy(path, dir, dirlen);
+    strncpy(path+dirlen, "\\*", 3);    /* Including terminating \0 */
+    keylen = strlen(keypath);
+
+#if 0 /* This function is not available in Visual C++ 6 */
+    /*
+     * Use numerics 0 -> FindExInfoStandard,
+     * 1 -> FindExSearchLimitToDirectories, 
+     * as these are not defined in Visual C++ 6
+     */
+    hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0);
+#else
+    hSearch = FindFirstFile(path, &finfo);
+#endif
+    if (hSearch == INVALID_HANDLE_VALUE)
+       return 1; /* Not found */
+
+    /* Loop through all subdirs checking if the keypath is under there */
+    ret = 1; /* Assume not found */
+    do {
+       int sublen;
+       /*
+        * We need to check it is a directory despite the 
+        * FindExSearchLimitToDirectories in the above call. See SDK docs
+        */
+       if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
+           continue;
+       sublen = strlen(finfo.cFileName);
+       if ((dirlen+1+sublen+1+keylen+1) > sizeof(path))
+           continue;           /* Path does not fit, assume not matched */
+       strncpy(path+dirlen+1, finfo.cFileName, sublen);
+       path[dirlen+1+sublen] = '\\';
+       strncpy(path+dirlen+1+sublen+1, keypath, keylen+1);
+       if (PathFileExists(path)) {
+           /* Found a match, print to stdout */
+           path[dirlen+1+sublen] = '\0';
+           QualifyPath(path);
+           ret = 0;
+           break;
+       }
+    } while (FindNextFile(hSearch, &finfo));
+    FindClose(hSearch);
+    return ret;
+}
+
+/*
+ * LocateDependency --
+ *
+ *     Locates a dependency for a package.
+ *        keypath - a relative path within the package directory
+ *          that is used to confirm it is the correct directory.
+ *     The search path for the package directory is currently only
+ *      the parent and grandparent of the current working directory.
+ *      If found, the command prints 
+ *         name_DIRPATH=<full path of located directory>
+ *      and returns 0. If not found, does not print anything and returns 1.
+ */
+static int LocateDependency(const char *keypath)
+{
+    int i, ret;
+    static char *paths[] = {"..", "..\\..", "..\\..\\.."};
+    
+    for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) {
+       ret = LocateDependencyHelper(paths[i], keypath);
+       if (ret == 0)
+           return ret;
+    }
+    return ret;
+}
+
+
+/*
+ * Local variables:
+ *   mode: c
+ *   c-basic-offset: 4
+ *   fill-column: 78
+ *   indent-tabs-mode: t
+ *   tab-width: 8
+ * End:
+ */
similarity index 78%
rename from pkgs/thread2.8.1/win/pkg.vc
rename to pkgs/thread2.8.2/win/pkg.vc
index e77e059..ab44750 100644 (file)
@@ -3,4 +3,4 @@
 \r
 PACKAGE_MAJOR  = 2\r
 PACKAGE_MINOR  = 8\r
-PACKAGE_VERSION        = "2.8.1"\r
+PACKAGE_VERSION        = "2.8.2"\r
diff --git a/pkgs/thread2.8.2/win/rules-ext.vc b/pkgs/thread2.8.2/win/rules-ext.vc
new file mode 100644 (file)
index 0000000..58c70fa
--- /dev/null
@@ -0,0 +1,118 @@
+# This file should only be included in makefiles for Tcl extensions,\r
+# NOT in the makefile for Tcl itself.\r
+\r
+!ifndef _RULES_EXT_VC\r
+\r
+# We need to run from the directory the parent makefile is located in.\r
+# nmake does not tell us what makefile was used to invoke it so parent\r
+# makefile has to set the MAKEFILEVC macro or we just make a guess and\r
+# warn if we think that is not the case.\r
+!if "$(MAKEFILEVC)" == ""\r
+\r
+!if exist("$(PROJECT).vc")\r
+MAKEFILEVC = $(PROJECT).vc\r
+!elseif exist("makefile.vc")\r
+MAKEFILEVC = makefile.vc\r
+!endif\r
+!endif # "$(MAKEFILEVC)" == ""\r
+\r
+!if !exist("$(MAKEFILEVC)")\r
+MSG = ^\r
+You must run nmake from the directory containing the project makefile.^\r
+If you are doing that and getting this message, set the MAKEFILEVC^\r
+macro to the name of the project makefile.\r
+!message WARNING: $(MSG)\r
+!endif\r
+\r
+!if "$(PROJECT)" == "tcl"\r
+!error The rules-ext.vc file is not intended for Tcl itself.\r
+!endif\r
+\r
+# We extract version numbers using the nmakehlp program. For now use\r
+# the local copy of nmakehlp. Once we locate Tcl, we will use that\r
+# one if it is newer.\r
+!if [$(CC) -nologo "nmakehlp.c" -link -subsystem:console > nul]\r
+!endif\r
+\r
+# First locate the Tcl directory that we are working with.\r
+!ifdef TCLDIR\r
+\r
+_RULESDIR = $(TCLDIR:/=\)\r
+\r
+!else\r
+\r
+# If an installation path is specified, that is also the Tcl directory.\r
+# Also Tk never builds against an installed Tcl, it needs Tcl sources\r
+!if defined(INSTALLDIR) && "$(PROJECT)" != "tk"\r
+_RULESDIR=$(INSTALLDIR:/=\)\r
+!else\r
+# Locate Tcl sources\r
+!if [echo _RULESDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]\r
+_RULESDIR = ..\..\tcl\r
+!else\r
+!include nmakehlp.out\r
+!endif\r
+\r
+!endif # defined(INSTALLDIR)....\r
+\r
+!endif # ifndef TCLDIR\r
+\r
+# Now look for the targets.vc file under the Tcl root. Note we check this\r
+# file and not rules.vc because the latter also exists on older systems.\r
+!if exist("$(_RULESDIR)\lib\nmake\targets.vc") # Building against installed Tcl\r
+_RULESDIR = $(_RULESDIR)\lib\nmake\r
+!elseif exist("$(_RULESDIR)\win\targets.vc")   # Building against Tcl sources\r
+_RULESDIR = $(_RULESDIR)\win\r
+!else\r
+# If we have not located Tcl's targets file, most likely we are compiling\r
+# against an older version of Tcl and so must use our own support files.\r
+_RULESDIR = .\r
+!endif\r
+\r
+!if "$(_RULESDIR)" != "."\r
+# Potentially using Tcl's support files. If this extension has its own\r
+# nmake support files, need to compare the versions and pick newer.\r
+\r
+!if exist("rules.vc") # The extension has its own copy\r
+\r
+!if [echo TCL_RULES_MAJOR = \> versions.vc] \\r
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MAJOR >> versions.vc]\r
+!endif\r
+!if [echo TCL_RULES_MINOR = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MINOR >> versions.vc]\r
+!endif\r
+\r
+!if [echo OUR_RULES_MAJOR = \>> versions.vc] \\r
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MAJOR >> versions.vc]\r
+!endif\r
+!if [echo OUR_RULES_MINOR = \>> versions.vc] \\r
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MINOR >> versions.vc]\r
+!endif\r
+!include versions.vc\r
+# We have a newer version of the support files, use them\r
+!if ($(TCL_RULES_MAJOR) != $(OUR_RULES_MAJOR)) || ($(TCL_RULES_MINOR) < $(OUR_RULES_MINOR))\r
+_RULESDIR = .\r
+!endif\r
+\r
+!endif # if exist("rules.vc")\r
+\r
+!endif # if $(_RULESDIR) != "."\r
+\r
+# Let rules.vc know what copy of nmakehlp.c to use.\r
+NMAKEHLPC = $(_RULESDIR)\nmakehlp.c\r
+\r
+# Get rid of our internal defines before calling rules.vc\r
+!undef TCL_RULES_MAJOR\r
+!undef TCL_RULES_MINOR\r
+!undef OUR_RULES_MAJOR\r
+!undef OUR_RULES_MINOR\r
+\r
+!if exist("$(_RULESDIR)\rules.vc")\r
+!message *** Using $(_RULESDIR)\rules.vc\r
+!include "$(_RULESDIR)\rules.vc"\r
+!else\r
+!error *** Could not locate rules.vc in $(_RULESDIR)\r
+!endif\r
+\r
+!endif # _RULES_EXT_VC
\ No newline at end of file
diff --git a/pkgs/thread2.8.2/win/rules.vc b/pkgs/thread2.8.2/win/rules.vc
new file mode 100644 (file)
index 0000000..7fc51c1
--- /dev/null
@@ -0,0 +1,1723 @@
+#------------------------------------------------------------- -*- makefile -*-\r
+# rules.vc --\r
+#\r
+# Part of the nmake based build system for Tcl and its extensions.\r
+# This file does all the hard work in terms of parsing build options,\r
+# compiler switches, defining common targets and macros. The Tcl makefile\r
+# directly includes this. Extensions include it via "rules-ext.vc".\r
+#\r
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for\r
+# detailed documentation.\r
+#\r
+# See the file "license.terms" for information on usage and redistribution\r
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
+#\r
+# Copyright (c) 2001-2003 David Gravereaux.\r
+# Copyright (c) 2003-2008 Patrick Thoyts\r
+# Copyright (c) 2017      Ashok P. Nadkarni\r
+#------------------------------------------------------------------------------\r
+\r
+!ifndef _RULES_VC\r
+_RULES_VC = 1\r
+\r
+# The following macros define the version of the rules.vc nmake build system\r
+# For modifications that are not backward-compatible, you *must* change\r
+# the major version.\r
+RULES_VERSION_MAJOR = 1\r
+RULES_VERSION_MINOR = 0\r
+\r
+# The PROJECT macro must be defined by parent makefile.\r
+!if "$(PROJECT)" == ""\r
+!error *** Error: Macro PROJECT not defined! Please define it before including rules.vc\r
+!endif\r
+\r
+!if "$(PRJ_PACKAGE_TCLNAME)" == ""\r
+PRJ_PACKAGE_TCLNAME = $(PROJECT)\r
+!endif\r
+\r
+# Also special case Tcl and Tk to save some typing later\r
+DOING_TCL = 0\r
+DOING_TK  = 0\r
+!if "$(PROJECT)" == "tcl"\r
+DOING_TCL = 1\r
+!elseif "$(PROJECT)" == "tk"\r
+DOING_TK = 1\r
+!endif\r
+\r
+!ifndef NEED_TK\r
+# Backwards compatibility\r
+!ifdef PROJECT_REQUIRES_TK\r
+NEED_TK = $(PROJECT_REQUIRES_TK)\r
+!else\r
+NEED_TK = 0\r
+!endif\r
+!endif\r
+\r
+!ifndef NEED_TCL_SOURCE\r
+NEED_TCL_SOURCE = 0\r
+!endif\r
+\r
+!ifdef NEED_TK_SOURCE\r
+!if $(NEED_TK_SOURCE)\r
+NEED_TK = 1\r
+!endif\r
+!else\r
+NEED_TK_SOURCE = 0\r
+!endif\r
+\r
+################################################################\r
+# Nmake is a pretty weak environment in syntax and capabilities\r
+# so this file is necessarily verbose. It's broken down into\r
+# the following parts.\r
+#\r
+# 0. Sanity check that compiler environment is set up and initialize\r
+#    any built-in settings from the parent makefile\r
+# 1. First define the external tools used for compiling, copying etc.\r
+#    as this is independent of everything else.\r
+# 2. Figure out our build structure in terms of the directory, whether\r
+#    we are building Tcl or an extension, etc.\r
+# 3. Determine the compiler and linker versions\r
+# 4. Build the nmakehlp helper application\r
+# 5. Determine the supported compiler options and features\r
+# 6. Parse the OPTS macro value for user-specified build configuration\r
+# 7. Parse the STATS macro value for statistics instrumentation\r
+# 8. Parse the CHECKS macro for additional compilation checks\r
+# 9. Extract Tcl, and possibly Tk, version numbers from the headers\r
+# 10. Based on this selected configuration, construct the output\r
+#     directory and file paths\r
+# 11. Construct the paths where the package is to be installed\r
+# 12. Set up the actual options passed to compiler and linker based\r
+#     on the information gathered above.\r
+# 13. Define some standard build targets and implicit rules. These may\r
+#     be optionally disabled by the parent makefile.\r
+# 14. (For extensions only.) Compare the configuration of the target\r
+#     Tcl and the extensions and warn against discrepancies.\r
+#\r
+# One final note about the macro names used. They are as they are\r
+# for historical reasons. We would like legacy extensions to\r
+# continue to work with this make include file so be wary of\r
+# changing them for consistency or clarity.\r
+\r
+# 0. Sanity check compiler environment\r
+\r
+# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or\r
+# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)\r
+\r
+!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)\r
+MSG = ^\r
+Visual C++ compiler environment not initialized.\r
+!error $(MSG)\r
+!endif\r
+\r
+# We need to run from the directory the parent makefile is located in.\r
+# nmake does not tell us what makefile was used to invoke it so parent\r
+# makefile has to set the MAKEFILEVC macro or we just make a guess and\r
+# warn if we think that is not the case.\r
+!if "$(MAKEFILEVC)" == ""\r
+\r
+!if exist("$(PROJECT).vc")\r
+MAKEFILEVC = $(PROJECT).vc\r
+!elseif exist("makefile.vc")\r
+MAKEFILEVC = makefile.vc\r
+!endif\r
+!endif # "$(MAKEFILEVC)" == ""\r
+\r
+!if !exist("$(MAKEFILEVC)")\r
+MSG = ^\r
+You must run nmake from the directory containing the project makefile.^\r
+If you are doing that and getting this message, set the MAKEFILEVC^\r
+macro to the name of the project makefile.\r
+!message WARNING: $(MSG)\r
+!endif\r
+\r
+\r
+################################################################\r
+# 1. Define external programs being used\r
+\r
+#----------------------------------------------------------\r
+# Set the proper copy method to avoid overwrite questions\r
+# to the user when copying files and selecting the right\r
+# "delete all" method.\r
+#----------------------------------------------------------\r
+\r
+RMDIR  = rmdir /S /Q\r
+CPY    = xcopy /i /y >NUL\r
+CPYDIR  = xcopy /e /i /y >NUL\r
+COPY   = copy /y >NUL\r
+MKDIR   = mkdir\r
+\r
+######################################################################\r
+# 2. Figure out our build environment in terms of what we're building.\r
+#\r
+# (a) Tcl itself\r
+# (b) Tk\r
+# (c) a Tcl extension using libraries/includes from an *installed* Tcl\r
+# (d) a Tcl extension using libraries/includes from Tcl source directory\r
+#\r
+# This last is needed because some extensions still need\r
+# some Tcl interfaces that are not publicly exposed.\r
+#\r
+# The fragment will set the following macros:\r
+# ROOT - root of this module sources\r
+# COMPATDIR - source directory that holds compatibility sources\r
+# DOCDIR - source directory containing documentation files\r
+# GENERICDIR - platform-independent source directory\r
+# WINDIR - Windows-specific source directory\r
+# TESTDIR - directory containing test files\r
+# TOOLSDIR - directory containing build tools\r
+# _TCLDIR - root of the Tcl installation OR the Tcl sources. Not set\r
+#    when building Tcl itself.\r
+# _INSTALLDIR - native form of the installation path. For Tcl\r
+#    this will be the root of the Tcl installation. For extensions\r
+#    this will be the lib directory under the root.\r
+# TCLINSTALL  - set to 1 if _TCLDIR refers to\r
+#    headers and libraries from an installed Tcl, and 0 if built against\r
+#    Tcl sources. Not set when building Tcl itself. Yes, not very well\r
+#    named.\r
+# _TCL_H - native path to the tcl.h file\r
+#\r
+# If Tk is involved, also sets the following\r
+# _TKDIR - native form Tk installation OR Tk source. Not set if building\r
+#    Tk itself.\r
+# TKINSTALL - set 1 if _TKDIR refers to installed Tk and 0 if Tk sources\r
+# _TK_H - native path to the tk.h file\r
+\r
+# Root directory for sources and assumed subdirectories\r
+ROOT = $(MAKEDIR)\..\r
+# The following paths CANNOT have spaces in them as they appear on the\r
+# left side of implicit rules.\r
+!ifndef COMPATDIR\r
+COMPATDIR      = $(ROOT)\compat\r
+!endif\r
+!ifndef DOCDIR\r
+DOCDIR         = $(ROOT)\doc\r
+!endif\r
+!ifndef GENERICDIR\r
+GENERICDIR     = $(ROOT)\generic\r
+!endif\r
+!ifndef TOOLSDIR\r
+TOOLSDIR       = $(ROOT)\tools\r
+!endif\r
+!ifndef TESTDIR\r
+TESTDIR        = $(ROOT)\tests\r
+!endif\r
+!ifndef LIBDIR\r
+!if exist("$(ROOT)\library")\r
+LIBDIR          = $(ROOT)\library\r
+!else\r
+LIBDIR          = $(ROOT)\lib\r
+!endif\r
+!endif\r
+!ifndef DEMODIR\r
+!if exist("$(LIBDIR)\demos")\r
+DEMODIR                = $(LIBDIR)\demos\r
+!else\r
+DEMODIR                = $(ROOT)\demos\r
+!endif\r
+!endif # ifndef DEMODIR\r
+# Do NOT enclose WINDIR in a !ifndef because Windows always defines\r
+# WINDIR env var to point to c:\windows!\r
+# TBD - This is a potentially dangerous conflict, rename WINDIR to\r
+# something else\r
+WINDIR         = $(ROOT)\win\r
+\r
+!ifndef RCDIR\r
+!if exist("$(WINDIR)\rc")\r
+RCDIR           = $(WINDIR)\rc\r
+!else\r
+RCDIR           = $(WINDIR)\r
+!endif\r
+!endif\r
+RCDIR = $(RCDIR:/=\)\r
+\r
+# The target directory where the built packages and binaries will be installed.\r
+# INSTALLDIR is the (optional) path specified by the user.\r
+# _INSTALLDIR is INSTALLDIR using the backslash separator syntax\r
+!ifdef INSTALLDIR\r
+### Fix the path separators.\r
+_INSTALLDIR    = $(INSTALLDIR:/=\)\r
+!else\r
+### Assume the normal default.\r
+_INSTALLDIR    = $(HOMEDRIVE)\Tcl\r
+!endif\r
+\r
+!if $(DOING_TCL)\r
+\r
+# BEGIN Case 2(a) - Building Tcl itself\r
+\r
+# Only need to define _TCL_H\r
+_TCL_H = ..\generic\tcl.h\r
+\r
+# END Case 2(a) - Building Tcl itself\r
+\r
+!elseif $(DOING_TK)\r
+\r
+# BEGIN Case 2(b) - Building Tk\r
+\r
+TCLINSTALL = 0 # Tk always builds against Tcl source, not an installed Tcl\r
+!if "$(TCLDIR)" == ""\r
+!if [echo TCLDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]\r
+!error *** Could not locate Tcl source directory.\r
+!endif\r
+!include nmakehlp.out\r
+!endif # TCLDIR == ""\r
+\r
+_TCLDIR        = $(TCLDIR:/=\)\r
+_TCL_H  = $(_TCLDIR)\generic\tcl.h\r
+!if !exist("$(_TCL_H)")\r
+!error Could not locate tcl.h. Please set the TCLDIR macro to point to the Tcl *source* directory.\r
+!endif\r
+\r
+_TK_H = ..\generic\tk.h\r
+\r
+# END Case 2(b) - Building Tk\r
+\r
+!else\r
+\r
+# BEGIN Case 2(c) or (d) - Building an extension other than Tk\r
+\r
+# If command line has specified Tcl location through TCLDIR, use it\r
+# else default to the INSTALLDIR setting\r
+!if "$(TCLDIR)" != ""\r
+\r
+_TCLDIR        = $(TCLDIR:/=\)\r
+!if exist("$(_TCLDIR)\include\tcl.h") # Case 2(c) with TCLDIR defined\r
+TCLINSTALL     = 1\r
+_TCL_H          = $(_TCLDIR)\include\tcl.h\r
+!elseif exist("$(_TCLDIR)\generic\tcl.h") # Case 2(d) with TCLDIR defined\r
+TCLINSTALL     = 0\r
+_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
+!endif\r
+\r
+!else  #  # Case 2(c) for extensions with TCLDIR undefined\r
+\r
+# Need to locate Tcl depending on whether it needs Tcl source or not.\r
+# If we don't, check the INSTALLDIR for an installed Tcl first\r
+\r
+!if exist("$(_INSTALLDIR)\include\tcl.h") && !$(NEED_TCL_SOURCE)\r
+\r
+TCLINSTALL     = 1\r
+TCLDIR          = $(_INSTALLDIR)\..\r
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions\r
+# later so the \.. accounts for the /lib\r
+_TCLDIR                = $(_INSTALLDIR)\..\r
+_TCL_H          = $(_TCLDIR)\include\tcl.h\r
+\r
+!else # exist(...) && ! $(NEED_TCL_SOURCE)\r
+\r
+!if [echo _TCLDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]\r
+!error *** Could not locate Tcl source directory.\r
+!endif\r
+!include nmakehlp.out\r
+TCLINSTALL      = 0\r
+TCLDIR         = $(_TCLDIR)\r
+_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
+\r
+!endif # exist(...) && ! $(NEED_TCL_SOURCE)\r
+\r
+!endif # TCLDIR\r
+\r
+!ifndef _TCL_H\r
+MSG =^\r
+Failed to find tcl.h. The TCLDIR macro is set incorrectly or is not set and default path does not contain tcl.h.\r
+!error $(MSG)\r
+!endif\r
+\r
+# Now do the same to locate Tk headers and libs if project requires Tk\r
+!if $(NEED_TK)\r
+\r
+!if "$(TKDIR)" != ""\r
+\r
+_TKDIR = $(TKDIR:/=\)\r
+!if exist("$(_TKDIR)\include\tk.h")\r
+TKINSTALL      = 1\r
+_TK_H          = $(_TKDIR)\include\tk.h\r
+!elseif exist("$(_TKDIR)\generic\tk.h")\r
+TKINSTALL      = 0\r
+_TK_H          = $(_TKDIR)\generic\tk.h\r
+!endif\r
+\r
+!else # TKDIR not defined\r
+\r
+# Need to locate Tcl depending on whether it needs Tcl source or not.\r
+# If we don't, check the INSTALLDIR for an installed Tcl first\r
+\r
+!if exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)\r
+\r
+TKINSTALL      = 1\r
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions\r
+# later so the \.. accounts for the /lib\r
+_TKDIR         = $(_INSTALLDIR)\..\r
+_TK_H          = $(_TKDIR)\include\tk.h\r
+TKDIR          = $(_TKDIR)\r
+\r
+!else # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)\r
+\r
+!if [echo _TKDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tk.h >> nmakehlp.out]\r
+!error *** Could not locate Tk source directory.\r
+!endif\r
+!include nmakehlp.out\r
+TKINSTALL      = 0\r
+TKDIR          = $(_TKDIR)\r
+_TK_H          = $(_TKDIR)\generic\tk.h\r
+\r
+!endif # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)\r
+\r
+!endif # TKDIR\r
+\r
+!ifndef _TK_H\r
+MSG =^\r
+Failed to find tk.h. The TKDIR macro is set incorrectly or is not set and default path does not contain tk.h.\r
+!error $(MSG)\r
+!endif\r
+\r
+!endif # NEED_TK\r
+\r
+!if $(NEED_TCL_SOURCE) && $(TCLINSTALL)\r
+MSG = ^\r
+*** Warning: This extension requires the source distribution of Tcl.^\r
+*** Please set the TCLDIR macro to point to the Tcl sources.\r
+!error $(MSG)\r
+!endif\r
+\r
+!if $(NEED_TK_SOURCE)\r
+!if $(TKINSTALL)\r
+MSG = ^\r
+*** Warning: This extension requires the source distribution of Tk.^\r
+*** Please set the TKDIR macro to point to the Tk sources.\r
+!error $(MSG)\r
+!endif\r
+!endif\r
+\r
+\r
+# If INSTALLDIR set to tcl installation root dir then reset to the\r
+# lib dir for installing extensions \r
+!if exist("$(_INSTALLDIR)\include\tcl.h")\r
+_INSTALLDIR=$(_INSTALLDIR)\lib\r
+!endif\r
+\r
+# END Case 2(c) or (d) - Building an extension\r
+!endif # if $(DOING_TCL)\r
+\r
+################################################################\r
+# 3. Determine compiler version and architecture\r
+# In this section, we figure out the compiler version and the\r
+# architecture for which we are building. This sets the\r
+# following macros:\r
+# VCVERSION - the internal compiler version as 1200, 1400, 1910 etc.\r
+#     This is also printed by the compiler in dotted form 19.10 etc.\r
+# VCVER - the "marketing version", for example Visual C++ 6 for internal\r
+#     compiler version 1200. This is kept only for legacy reasons as it\r
+#     does not make sense for recent Microsoft compilers. Only used for\r
+#     output directory names.\r
+# ARCH - set to IX86 or AMD64 depending on 32- or 64-bit target\r
+# NATIVE_ARCH - set to IX86 or AMD64 for the host machine\r
+# MACHINE - same as $(ARCH) - legacy\r
+# _VC_MANIFEST_EMBED_{DLL,EXE} - commands for embedding a manifest if needed\r
+# CFG_ENCODING - set to an character encoding.\r
+#   TBD - this is passed to compiler as TCL_CFGVAL_ENCODING but can't\r
+#   see where it is used\r
+\r
+cc32           = $(CC)   # built-in default.\r
+link32         = link\r
+lib32          = lib\r
+rc32           = $(RC)   # built-in default.\r
+\r
+#----------------------------------------------------------------\r
+# Figure out the compiler architecture and version by writing\r
+# the C macros to a file, preprocessing them with the C\r
+# preprocessor and reading back the created file\r
+\r
+_HASH=^#\r
+_VC_MANIFEST_EMBED_EXE=\r
+_VC_MANIFEST_EMBED_DLL=\r
+VCVER=0\r
+!if ![echo VCVERSION=_MSC_VER > vercl.x] \\r
+    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \\r
+    && ![echo ARCH=IX86 >> vercl.x] \\r
+    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \\r
+    && ![echo ARCH=AMD64 >> vercl.x] \\r
+    && ![echo $(_HASH)endif >> vercl.x] \\r
+    && ![$(cc32) -nologo -TC -P vercl.x 2>NUL]\r
+!include vercl.i\r
+!if $(VCVERSION) < 1900\r
+!if ![echo VCVER= ^\> vercl.vc] \\r
+    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]\r
+!include vercl.vc\r
+!endif\r
+!else\r
+# The simple calculation above does not apply to new Visual Studio releases\r
+# Keep the compiler version in its native form.\r
+VCVER = $(VCVERSION)\r
+!endif\r
+!endif\r
+\r
+!if ![del 2>NUL /q/f vercl.x vercl.i vercl.vc]\r
+!endif\r
+\r
+#----------------------------------------------------------------\r
+# The MACHINE macro is used by legacy makefiles so set it as well\r
+!ifdef MACHINE\r
+!if "$(MACHINE)" == "x86"\r
+!undef MACHINE\r
+MACHINE = IX86\r
+!elseif "$(MACHINE)" == "x64"\r
+!undef MACHINE\r
+MACHINE = AMD64\r
+!endif\r
+!if "$(MACHINE)" != "$(ARCH)"\r
+!error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH).\r
+!endif\r
+!else\r
+MACHINE=$(ARCH)\r
+!endif\r
+\r
+#------------------------------------------------------------\r
+# Figure out the *host* architecture by reading the registry\r
+\r
+!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]\r
+NATIVE_ARCH=IX86\r
+!else\r
+NATIVE_ARCH=AMD64\r
+!endif\r
+\r
+# Since MSVC8 we must deal with manifest resources.\r
+!if $(VCVERSION) >= 1400\r
+_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1\r
+_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2\r
+!endif\r
+\r
+!ifndef CFG_ENCODING\r
+CFG_ENCODING   = \"cp1252\"\r
+!endif\r
+\r
+################################################################\r
+# 4. Build the nmakehlp program\r
+# This is a helper app we need to overcome nmake's limiting\r
+# environment. We will call out to it to get various bits of\r
+# information about supported compiler options etc.\r
+#\r
+# Tcl itself will always use the nmakehlp.c program which is\r
+# in its own source. This is the "master" copy and kept updated.\r
+#\r
+# Extensions built against an installed Tcl will use the installed\r
+# copy of Tcl's nmakehlp.c if there is one and their own version\r
+# otherwise. In the latter case, they would also be using their own\r
+# rules.vc. Note that older versions of Tcl do not install nmakehlp.c\r
+# or rules.vc.\r
+#\r
+# Extensions built against Tcl sources will use the one from the Tcl source.\r
+#\r
+# When building an extension using a sufficiently new version of Tcl,\r
+# rules-ext.vc will define NMAKEHLPC appropriately to point to the\r
+# copy of nmakehlp.c to be used.\r
+\r
+!ifndef NMAKEHLPC\r
+# Default to the one in the current directory (the extension's own nmakehlp.c)\r
+NMAKEHLPC = nmakehlp.c\r
+\r
+!if !$(DOING_TCL)\r
+!if $(TCLINSTALL)\r
+!if exist("$(_TCLDIR)\lib\nmake\nmakehlp.c")\r
+NMAKEHLPC = $(_TCLDIR)\lib\nmake\nmakehlp.c\r
+!endif\r
+!else # ! $(TCLINSTALL)\r
+!if exist("$(_TCLDIR)\win\nmakehlp.c")\r
+NMAKEHLPC = $(_TCLDIR)\win\nmakehlp.c\r
+!endif\r
+!endif # $(TCLINSTALL)\r
+!endif # !$(DOING_TCL)\r
+\r
+!endif # NMAKEHLPC\r
+\r
+# We always build nmakehlp even if it exists since we do not know\r
+# what source it was built from.\r
+!message *** Using $(NMAKEHLPC)\r
+!if [$(cc32) -nologo "$(NMAKEHLPC)" -link -subsystem:console > nul]\r
+!endif\r
+\r
+################################################################\r
+# 5. Test for compiler features\r
+# Visual C++ compiler options have changed over the years. Check\r
+# which options are supported by the compiler in use.\r
+#\r
+# The following macros are set:\r
+# OPTIMIZATIONS - the compiler flags to be used for optimized builds\r
+# DEBUGFLAGS - the compiler flags to be used for debug builds\r
+# LINKERFLAGS - Flags passed to the linker \r
+#\r
+# Note that these are the compiler settings *available*, not those\r
+# that will be *used*. The latter depends on the OPTS macro settings\r
+# which we have not yet parsed.\r
+#\r
+# Also note that some of the flags in OPTIMIZATIONS are not really\r
+# related to optimization. They are placed there only for legacy reasons\r
+# as some extensions expect them to be included in that macro.\r
+\r
+# -Op improves float consistency. Note only needed for older compilers\r
+# Newer compilers do not need or support this option.\r
+!if [nmakehlp -c -Op]\r
+FPOPTS  = -Op\r
+!endif\r
+\r
+# Strict floating point semantics - present in newer compilers in lieu of -Op\r
+!if [nmakehlp -c -fp:strict]\r
+FPOPTS  = $(FPOPTS) -fp:strict\r
+!endif\r
+\r
+!if "$(MACHINE)" == "IX86"\r
+### test for pentium errata\r
+!if [nmakehlp -c -QI0f]\r
+!message *** Compiler has 'Pentium 0x0f fix'\r
+FPOPTS  = $(FPOPTS) -QI0f\r
+!else\r
+!message *** Compiler does not have 'Pentium 0x0f fix'\r
+!endif\r
+!endif\r
+\r
+### test for optimizations\r
+# /O2 optimization includes /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy as per\r
+# documentation. Note we do NOT want /Gs as that inserts a _chkstk\r
+# stack probe at *every* function entry, not just those with more than\r
+# a page of stack allocation resulting in a performance hit.  However,\r
+# /O2 documentation is misleading as its stack probes are simply the\r
+# default page size locals allocation probes and not what is implied\r
+# by an explicit /Gs option.\r
+\r
+OPTIMIZATIONS = $(FPOPTS)\r
+\r
+!if [nmakehlp -c -O2]\r
+!message *** Compiler has 'Optimizations'\r
+OPTIMIZING = 1\r
+OPTIMIZATIONS   = $(OPTIMIZATIONS) -O2\r
+!else\r
+# Legacy, really. All modern compilers support this\r
+!message *** Compiler does not have 'Optimizations'\r
+OPTIMIZING = 0\r
+!endif\r
+\r
+# Checks for buffer overflows in local arrays\r
+!if [nmakehlp -c -GS]\r
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS\r
+!endif\r
+\r
+# Link time optimization. Note that this option (potentially) makes\r
+# generated libraries only usable by the specific VC++ version that\r
+# created it. Requires /LTCG linker option\r
+!if [nmakehlp -c -GL]\r
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL\r
+CC_GL_OPT_ENABLED = 1\r
+!else\r
+# In newer compilers -GL and -YX are incompatible.\r
+!if [nmakehlp -c -YX]\r
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX\r
+!endif\r
+!endif # [nmakehlp -c -GL]\r
+\r
+DEBUGFLAGS     = $(FPOPTS)\r
+\r
+# Run time error checks. Not available or valid in a release, non-debug build\r
+# RTC is for modern compilers, -GZ is legacy\r
+!if [nmakehlp -c -RTC1]\r
+DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1\r
+!elseif [nmakehlp -c -GZ]\r
+DEBUGFLAGS     = $(DEBUGFLAGS) -GZ\r
+!endif\r
+\r
+#----------------------------------------------------------------\r
+# Linker flags\r
+\r
+# LINKER_TESTFLAGS are for internal use when we call nmakehlp to test\r
+# if the linker supports a specific option. Without these flags link will\r
+# return "LNK1561: entry point must be defined" error compiling from VS-IDE:\r
+# They are not passed through to the actual application / extension\r
+# link rules.\r
+!ifndef LINKER_TESTFLAGS\r
+LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmakehlp.out\r
+!endif\r
+\r
+LINKERFLAGS     =\r
+\r
+# If compiler has enabled link time optimization, linker must too with -ltcg\r
+!ifdef CC_GL_OPT_ENABLED\r
+!if [nmakehlp -l -ltcg $(LINKER_TESTFLAGS)]\r
+LINKERFLAGS     = $(LINKERFLAGS) -ltcg\r
+!endif\r
+!endif\r
+\r
+########################################################################\r
+# 6. Parse the OPTS macro to work out the requested build configuration.\r
+# Based on this, we will construct the actual switches to be passed to the\r
+# compiler and linker using the macros defined in the previous section.\r
+# The following macros are defined by this section based on OPTS\r
+# STATIC_BUILD - 0 -> Tcl is to be built as a shared library\r
+#                1 -> build as a static library and shell\r
+# TCL_THREADS - legacy but always 1 on Windows since winsock requires it.\r
+# DEBUG - 1 -> debug build, 0 -> release builds\r
+# SYMBOLS - 1 -> generate PDB's, 0 -> no PDB's\r
+# PROFILE - 1 -> generate profiling info, 0 -> no profiling\r
+# PGO     - 1 -> profile based optimization, 0 -> no\r
+# MSVCRT  - 1 -> link to dynamic C runtime even when building static Tcl build\r
+#           0 -> link to static C runtime for static Tcl build.\r
+#           Does not impact shared Tcl builds (STATIC_BUILD == 0)\r
+# TCL_USE_STATIC_PACKAGES - 1 -> statically link the registry and dde extensions\r
+#           in the Tcl shell. 0 -> keep them as shared libraries\r
+#           Does not impact shared Tcl builds.\r
+# USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation.\r
+#           0 -> Use the non-thread allocator.\r
+# UNCHECKED - 1 -> when doing a debug build with symbols, use the release\r
+#           C runtime, 0 -> use the debug C runtime.\r
+# USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking\r
+# CONFIG_CHECK - 1 -> check current build configuration against Tcl\r
+#           configuration (ignored for Tcl itself)\r
+# Further, LINKERFLAGS are modified based on above.\r
+\r
+# Default values for all the above\r
+STATIC_BUILD   = 0\r
+TCL_THREADS    = 1\r
+DEBUG          = 0\r
+SYMBOLS                = 0\r
+PROFILE                = 0\r
+PGO            = 0\r
+MSVCRT         = 1\r
+TCL_USE_STATIC_PACKAGES        = 0\r
+USE_THREAD_ALLOC = 1\r
+UNCHECKED      = 0\r
+CONFIG_CHECK    = 1\r
+!if $(DOING_TCL)\r
+USE_STUBS       = 0\r
+!else\r
+USE_STUBS       = 1\r
+!endif\r
+\r
+# If OPTS is not empty AND does not contain "none" which turns off all OPTS\r
+# set the above macros based on OPTS content\r
+!if "$(OPTS)" != "" && ![nmakehlp -f "$(OPTS)" "none"]\r
+\r
+# OPTS are specified, parse them\r
+\r
+!if [nmakehlp -f $(OPTS) "static"]\r
+!message *** Doing static\r
+STATIC_BUILD   = 1\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "nostubs"]\r
+!message *** Not using stubs\r
+USE_STUBS      = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "nomsvcrt"]\r
+!message *** Doing nomsvcrt\r
+MSVCRT         = 0\r
+!else\r
+!if [nmakehlp -f $(OPTS) "msvcrt"]\r
+!message *** Doing msvcrt\r
+MSVCRT         = 1\r
+!else\r
+!if !$(STATIC_BUILD)\r
+MSVCRT         = 1\r
+!else\r
+MSVCRT         = 0\r
+!endif\r
+!endif\r
+!endif # [nmakehlp -f $(OPTS) "nomsvcrt"]\r
+\r
+!if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD)\r
+!message *** Doing staticpkg\r
+TCL_USE_STATIC_PACKAGES        = 1\r
+!else\r
+TCL_USE_STATIC_PACKAGES        = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "nothreads"]\r
+!message *** Compile explicitly for non-threaded tcl\r
+TCL_THREADS    = 0\r
+USE_THREAD_ALLOC= 0\r
+!else\r
+TCL_THREADS    = 1\r
+USE_THREAD_ALLOC= 1\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "symbols"]\r
+!message *** Doing symbols\r
+DEBUG          = 1\r
+!else\r
+DEBUG          = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "pdbs"]\r
+!message *** Doing pdbs\r
+SYMBOLS                = 1\r
+!else\r
+SYMBOLS                = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "profile"]\r
+!message *** Doing profile\r
+PROFILE                = 1\r
+!else\r
+PROFILE                = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "pgi"]\r
+!message *** Doing profile guided optimization instrumentation\r
+PGO            = 1\r
+!elseif [nmakehlp -f $(OPTS) "pgo"]\r
+!message *** Doing profile guided optimization\r
+PGO            = 2\r
+!else\r
+PGO            = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "loimpact"]\r
+!message *** Warning: ignoring option "loimpact" - deprecated on modern Windows.\r
+!endif\r
+\r
+# TBD - should get rid of this option\r
+!if [nmakehlp -f $(OPTS) "thrdalloc"]\r
+!message *** Doing thrdalloc\r
+USE_THREAD_ALLOC = 1\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "tclalloc"]\r
+USE_THREAD_ALLOC = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "unchecked"]\r
+!message *** Doing unchecked\r
+UNCHECKED = 1\r
+!else\r
+UNCHECKED = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(OPTS) "noconfigcheck"]\r
+CONFIG_CHECK = 1\r
+!else\r
+CONFIG_CHECK = 0\r
+!endif\r
+\r
+!endif # "$(OPTS)" != ""  && ... parsing of OPTS\r
+\r
+# Set linker flags based on above\r
+\r
+!if $(PGO) > 1\r
+!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)]\r
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize\r
+!else\r
+MSG=^\r
+This compiler does not support profile guided optimization.\r
+!error $(MSG)\r
+!endif\r
+!elseif $(PGO) > 0\r
+!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)]\r
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument\r
+!else\r
+MSG=^\r
+This compiler does not support profile guided optimization.\r
+!error $(MSG)\r
+!endif\r
+!endif\r
+\r
+################################################################\r
+# 7. Parse the STATS macro to configure code instrumentation\r
+# The following macros are set by this section:\r
+# TCL_MEM_DEBUG - 1 -> enables memory allocation instrumentation\r
+#                 0 -> disables\r
+# TCL_COMPILE_DEBUG - 1 -> enables byte compiler logging\r
+#                     0 -> disables\r
+\r
+# Default both are off\r
+TCL_MEM_DEBUG      = 0\r
+TCL_COMPILE_DEBUG   = 0\r
+\r
+!if "$(STATS)" != "" && ![nmakehlp -f "$(STATS)" "none"]\r
+\r
+!if [nmakehlp -f $(STATS) "memdbg"]\r
+!message *** Doing memdbg\r
+TCL_MEM_DEBUG      = 1\r
+!else\r
+TCL_MEM_DEBUG      = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(STATS) "compdbg"]\r
+!message *** Doing compdbg\r
+TCL_COMPILE_DEBUG   = 1\r
+!else\r
+TCL_COMPILE_DEBUG   = 0\r
+!endif\r
+\r
+!endif\r
+\r
+####################################################################\r
+# 8. Parse the CHECKS macro to configure additional compiler checks\r
+# The following macros are set by this section:\r
+# WARNINGS - compiler switches that control the warnings level\r
+# TCL_NO_DEPRECATED - 1 -> disable support for deprecated functions\r
+#                     0 -> enable deprecated functions\r
+\r
+# Defaults - Permit deprecated functions and warning level 3\r
+TCL_NO_DEPRECATED          = 0\r
+WARNINGS                   = -W3\r
+\r
+!if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"]\r
+\r
+!if [nmakehlp -f $(CHECKS) "nodep"]\r
+!message *** Doing nodep check\r
+TCL_NO_DEPRECATED          = 1\r
+!endif\r
+\r
+!if [nmakehlp -f $(CHECKS) "fullwarn"]\r
+!message *** Doing full warnings check\r
+WARNINGS                   = -W4\r
+!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)]\r
+LINKERFLAGS                = $(LINKERFLAGS) -warn:3\r
+!endif\r
+!endif\r
+\r
+!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]\r
+!message *** Doing 64bit portability warnings\r
+WARNINGS                   = $(WARNINGS) -Wp64\r
+!endif\r
+\r
+!endif\r
+\r
+################################################################\r
+# 9. Extract various version numbers\r
+# For Tcl and Tk, version numbers are extracted from tcl.h and tk.h\r
+# respectively. For extensions, versions are extracted from the\r
+# configure.in or configure.ac from the TEA configuration if it\r
+# exists, and unset otherwise.\r
+# Sets the following macros:\r
+# TCL_MAJOR_VERSION\r
+# TCL_MINOR_VERSION\r
+# TCL_PATCH_LEVEL\r
+# TCL_VERSION\r
+# TK_MAJOR_VERSION\r
+# TK_MINOR_VERSION\r
+# TK_PATCH_LEVEL\r
+# TK_VERSION\r
+# DOTVERSION - set as (for example) 2.5\r
+# VERSION - set as (for example 25)\r
+#--------------------------------------------------------------\r
+\r
+!if [echo REM = This file is generated from rules.vc > versions.vc]\r
+!endif\r
+!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TCL_MINOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]\r
+!endif\r
+\r
+!if defined(_TK_H)\r
+!if [echo TK_MAJOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TK_MINOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TK_PATCH_LEVEL = \>> versions.vc] \\r
+   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]\r
+!endif\r
+!endif # _TK_H\r
+\r
+!include versions.vc\r
+\r
+TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)\r
+TCL_DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)\r
+!if defined(_TK_H)\r
+TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)\r
+TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)\r
+!endif\r
+\r
+# Set DOTVERSION and VERSION\r
+!if $(DOING_TCL)\r
+\r
+DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)\r
+VERSION = $(TCL_VERSION)\r
+\r
+!elseif $(DOING_TK)\r
+\r
+DOTVERSION = $(TK_DOTVERSION)\r
+VERSION = $(TK_VERSION)\r
+\r
+!else # Doing a non-Tk extension\r
+\r
+# If parent makefile has not defined DOTVERSION, try to get it from TEA\r
+# first from a configure.in file, and then from configure.ac\r
+!ifndef DOTVERSION\r
+!if [echo DOTVERSION = \> versions.vc] \\r
+   || [nmakehlp -V $(ROOT)\configure.in ^[$(PROJECT)^] >> versions.vc]\r
+!if [echo DOTVERSION = \> versions.vc] \\r
+   || [nmakehlp -V $(ROOT)\configure.ac ^[$(PROJECT)^] >> versions.vc]\r
+!error *** Could not figure out extension version. Please define DOTVERSION in parent makefile before including rules.vc.\r
+!endif\r
+!endif\r
+!include versions.vc\r
+!endif # DOTVERSION\r
+VERSION         = $(DOTVERSION:.=)\r
+\r
+!endif # $(DOING_TCL) ... etc.\r
+\r
+################################################################\r
+# 10. Construct output directory and file paths\r
+# Figure-out how to name our intermediate and output directories.\r
+# In order to avoid inadvertent mixing of object files built using\r
+# different compilers, build configurations etc.,\r
+#\r
+# Naming convention (suffixes):\r
+#   t = full thread support.\r
+#   s = static library (as opposed to an import library)\r
+#   g = linked to the debug enabled C run-time.\r
+#   x = special static build when it links to the dynamic C run-time.\r
+#\r
+# The following macros are set in this section:\r
+# SUFX - the suffix to use for binaries based on above naming convention\r
+# BUILDDIRTOP - the toplevel default output directory\r
+#      is of the form {Release,Debug}[_AMD64][_COMPILERVERSION]\r
+# TMP_DIR - directory where object files are created\r
+# OUT_DIR - directory where output executables are created\r
+# Both TMP_DIR and OUT_DIR are defaulted only if not defined by the\r
+# parent makefile (or command line). The default values are\r
+# based on BUILDDIRTOP.\r
+# STUBPREFIX - name of the stubs library for this project\r
+# PRJIMPLIB - output path of the generated project import library\r
+# PRJLIBNAME - name of generated project library\r
+# PRJLIB     - output path of generated project library\r
+# PRJSTUBLIBNAME - name of the generated project stubs library\r
+# PRJSTUBLIB - output path of the generated project stubs library\r
+# RESFILE - output resource file (only if not static build)\r
+\r
+SUFX       = tsgx\r
+\r
+!if $(DEBUG)\r
+BUILDDIRTOP = Debug\r
+!else\r
+BUILDDIRTOP = Release\r
+!endif\r
+\r
+!if "$(MACHINE)" != "IX86"\r
+BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE)\r
+!endif\r
+!if $(VCVER) > 6\r
+BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER)\r
+!endif\r
+\r
+!if !$(DEBUG) || $(DEBUG) && $(UNCHECKED)\r
+SUFX       = $(SUFX:g=)\r
+!endif\r
+\r
+TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX\r
+\r
+!if !$(STATIC_BUILD)\r
+TMP_DIRFULL = $(TMP_DIRFULL:Static=)\r
+SUFX       = $(SUFX:s=)\r
+EXT        = dll\r
+TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
+SUFX       = $(SUFX:x=)\r
+!else\r
+TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)\r
+EXT        = lib\r
+!if !$(MSVCRT)\r
+TMP_DIRFULL = $(TMP_DIRFULL:X=)\r
+SUFX       = $(SUFX:x=)\r
+!endif\r
+!endif\r
+\r
+!if !$(TCL_THREADS)\r
+TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)\r
+SUFX       = $(SUFX:t=)\r
+!endif\r
+\r
+!ifndef TMP_DIR\r
+TMP_DIR            = $(TMP_DIRFULL)\r
+!ifndef OUT_DIR\r
+OUT_DIR            = .\$(BUILDDIRTOP)\r
+!endif\r
+!else\r
+!ifndef OUT_DIR\r
+OUT_DIR            = $(TMP_DIR)\r
+!endif\r
+!endif\r
+\r
+# Relative paths -> absolute\r
+!if [echo OUT_DIR = \> nmakehlp.out] \\r
+   || [nmakehlp -Q "$(OUT_DIR)" >> nmakehlp.out]\r
+!error *** Could not fully qualify path OUT_DIR=$(OUT_DIR)\r
+!endif\r
+!if [echo TMP_DIR = \>> nmakehlp.out] \\r
+   || [nmakehlp -Q "$(TMP_DIR)" >> nmakehlp.out]\r
+!error *** Could not fully qualify path TMP_DIR=$(TMP_DIR)\r
+!endif\r
+!include nmakehlp.out\r
+\r
+# The name of the stubs library for the project being built\r
+STUBPREFIX      = $(PROJECT)stub\r
+\r
+# Set up paths to various Tcl executables and libraries needed by extensions\r
+!if $(DOING_TCL)\r
+\r
+TCLSHNAME       = $(PROJECT)sh$(TCL_VERSION)$(SUFX).exe\r
+TCLSH          = $(OUT_DIR)\$(TCLSHNAME)\r
+TCLIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib\r
+TCLLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)\r
+TCLLIB         = $(OUT_DIR)\$(TCLLIBNAME)\r
+\r
+TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
+TCLSTUBLIB     = $(OUT_DIR)\$(TCLSTUBLIBNAME)\r
+TCL_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"\r
+\r
+!else # ! $(DOING_TCL)\r
+\r
+!if $(TCLINSTALL) # Building against an installed Tcl\r
+\r
+TCLSH          = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe\r
+!if !exist("$(TCLSH)") && $(TCL_THREADS)\r
+TCLSH           = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe\r
+!endif\r
+TCLSTUBLIB     = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib\r
+TCLIMPLIB      = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib\r
+TCL_LIBRARY    = $(_TCLDIR)\lib\r
+TCLREGLIB      = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib\r
+TCLDDELIB      = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib\r
+TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target\r
+TCL_INCLUDES    = -I"$(_TCLDIR)\include"\r
+\r
+!else # Building against Tcl sources\r
+\r
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe\r
+!if !exist($(TCLSH)) && $(TCL_THREADS)\r
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe\r
+!endif\r
+TCLSTUBLIB     = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib\r
+TCLIMPLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib\r
+TCL_LIBRARY    = $(_TCLDIR)\library\r
+TCLREGLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib\r
+TCLDDELIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib\r
+TCLTOOLSDIR    = $(_TCLDIR)\tools\r
+TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"\r
+\r
+!endif # TCLINSTALL\r
+\r
+tcllibs = "$(TCLSTUBLIB)" "$(TCLIMPLIB)"\r
+\r
+!endif # $(DOING_TCL)\r
+\r
+# We need a tclsh that will run on the host machine as part of the build.\r
+# IX86 runs on all architectures.\r
+!ifndef TCLSH_NATIVE\r
+!if "$(MACHINE)" == "IX86" || "$(MACHINE)" == "$(NATIVE_ARCH)"\r
+TCLSH_NATIVE   = $(TCLSH)\r
+!else\r
+!error You must explicitly set TCLSH_NATIVE for cross-compilation\r
+!endif\r
+!endif\r
+\r
+# Do the same for Tk and Tk extensions that require the Tk libraries\r
+!if $(DOING_TK) || $(NEED_TK)\r
+WISHNAMEPREFIX = wish\r
+WISHNAME = $(WISHNAMEPREFIX)$(TK_VERSION)$(SUFX).exe\r
+TKLIBNAME      = $(PROJECT)$(TK_VERSION)$(SUFX).$(EXT)\r
+TKSTUBLIBNAME  = tkstub$(TK_VERSION).lib\r
+TKIMPLIBNAME   = tk$(TK_VERSION)$(SUFX).lib\r
+\r
+!if $(DOING_TK)\r
+WISH           = $(OUT_DIR)\$(WISHNAME)\r
+TKSTUBLIB      = $(OUT_DIR)\$(TKSTUBLIBNAME)\r
+TKIMPLIB       = $(OUT_DIR)\$(TKIMPLIBNAME)\r
+TKLIB          = $(OUT_DIR)\$(TKLIBNAME)\r
+TK_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"\r
+\r
+!else # effectively NEED_TK\r
+\r
+!if $(TKINSTALL) # Building against installed Tk\r
+WISH           = $(_TKDIR)\bin\$(WISHNAME)\r
+TKSTUBLIB      = $(_TKDIR)\lib\$(TKSTUBLIBNAME)\r
+TKIMPLIB       = $(_TKDIR)\lib\$(TKIMPLIBNAME)\r
+TK_INCLUDES     = -I"$(_TKDIR)\include"\r
+!else # Building against Tk sources\r
+WISH           = $(_TKDIR)\win\$(BUILDDIRTOP)\$(WISHNAME)\r
+TKSTUBLIB      = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKSTUBLIBNAME)\r
+TKIMPLIB       = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKIMPLIBNAME)\r
+TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"\r
+!endif # TKINSTALL\r
+tklibs = "$(TKSTUBLIB)" "$(TKIMPLIB)"\r
+\r
+!endif # $(DOING_TK)\r
+!endif # $(DOING_TK) || $(NEED_TK)\r
+\r
+# Various output paths\r
+PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib\r
+PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)\r
+PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)\r
+\r
+PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
+PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)\r
+\r
+# If extension parent makefile has not defined a resource definition file,\r
+# we will generate one from standard template.\r
+!if !$(DOING_TCL) && !$(DOING_TK) && !$(STATIC_BUILD)\r
+!ifdef RCFILE\r
+RESFILE = $(TMP_DIR)\$(RCFILE:.rc=.res)\r
+!else\r
+RESFILE = $(TMP_DIR)\$(PROJECT).res\r
+!endif\r
+!endif\r
+\r
+###################################################################\r
+# 11. Construct the paths for the installation directories\r
+# The following macros get defined in this section:\r
+# LIB_INSTALL_DIR - where libraries should be installed\r
+# BIN_INSTALL_DIR - where the executables should be installed\r
+# DOC_INSTALL_DIR - where documentation should be installed\r
+# SCRIPT_INSTALL_DIR - where scripts should be installed\r
+# INCLUDE_INSTALL_DIR - where C include files should be installed\r
+# DEMO_INSTALL_DIR - where demos should be installed\r
+# PRJ_INSTALL_DIR - where package will be installed (not set for tcl and tk)\r
+\r
+!if $(DOING_TCL) || $(DOING_TK)\r
+LIB_INSTALL_DIR                = $(_INSTALLDIR)\lib\r
+BIN_INSTALL_DIR                = $(_INSTALLDIR)\bin\r
+DOC_INSTALL_DIR                = $(_INSTALLDIR)\doc\r
+!if $(DOING_TCL)\r
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)\r
+!else # DOING_TK\r
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)\r
+!endif\r
+DEMO_INSTALL_DIR       = $(SCRIPT_INSTALL_DIR)\demos\r
+INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\include\r
+\r
+!else # extension other than Tk\r
+\r
+PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)\r
+LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
+BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
+DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
+SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)\r
+DEMO_INSTALL_DIR       = $(PRJ_INSTALL_DIR)\demos\r
+INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include\r
+\r
+!endif\r
+\r
+###################################################################\r
+# 12. Set up actual options to be passed to the compiler and linker\r
+# Now we have all the information we need, set up the actual flags and\r
+# options that we will pass to the compiler and linker. The main\r
+# makefile should use these in combination with whatever other flags\r
+# and switches are specific to it.\r
+# The following macros are defined, names are for historical compatibility:\r
+# OPTDEFINES - /Dxxx C macro flags based on user-specified OPTS\r
+# COMPILERFLAGS - /Dxxx C macro flags independent of any configuration opttions\r
+# crt - Compiler switch that selects the appropriate C runtime\r
+# cdebug - Compiler switches related to debug AND optimizations\r
+# cwarn - Compiler switches that set warning levels\r
+# cflags - complete compiler switches (subsumes cdebug and cwarn)\r
+# ldebug - Linker switches controlling debug information and optimization\r
+# lflags - complete linker switches (subsumes ldebug) except subsystem type\r
+# dlllflags - complete linker switches to build DLLs (subsumes lflags)\r
+# conlflags - complete linker switches for console program (subsumes lflags)\r
+# guilflags - complete linker switches for GUI program (subsumes lflags)\r
+# baselibs - minimum Windows libraries required. Parent makefile can\r
+#    define PRJ_LIBS before including rules.rc if additional libs are needed\r
+\r
+OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS\r
+\r
+!if $(TCL_MEM_DEBUG)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_MEM_DEBUG\r
+!endif\r
+!if $(TCL_COMPILE_DEBUG)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS\r
+!endif\r
+!if $(TCL_THREADS)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_THREADS=1\r
+!if $(USE_THREAD_ALLOC)\r
+OPTDEFINES     = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1\r
+!endif\r
+!endif\r
+!if $(STATIC_BUILD)\r
+OPTDEFINES     = $(OPTDEFINES) -DSTATIC_BUILD\r
+!endif\r
+!if $(TCL_NO_DEPRECATED)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED\r
+!endif\r
+\r
+!if $(USE_STUBS)\r
+# Note we do not define USE_TCL_STUBS even when building tk since some\r
+# test targets in tk do not use stubs\r
+!if ! $(DOING_TCL)\r
+USE_STUBS_DEFS  = -DUSE_TCL_STUBS -DUSE_TCLOO_STUBS\r
+!if $(NEED_TK)\r
+USE_STUBS_DEFS  = $(USE_STUBS_DEFS) -DUSE_TK_STUBS\r
+!endif\r
+!endif\r
+!endif # USE_STUBS\r
+\r
+!if !$(DEBUG)\r
+OPTDEFINES     = $(OPTDEFINES) -DNDEBUG\r
+!if $(OPTIMIZING)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED\r
+!endif\r
+!endif\r
+!if $(PROFILE)\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED\r
+!endif\r
+!if "$(MACHINE)" == "AMD64"\r
+OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT\r
+!endif\r
+!if $(VCVERSION) < 1300\r
+OPTDEFINES     = $(OPTDEFINES) -DNO_STRTOI64\r
+!endif\r
+\r
+# _ATL_XP_TARGETING - Newer SDK's need this to build for XP\r
+COMPILERFLAGS  = /D_ATL_XP_TARGETING\r
+\r
+# Following is primarily for the benefit of extensions. Tcl 8.5 builds\r
+# Tcl without /DUNICODE, while 8.6 builds with it defined. When building\r
+# an extension, it is advisable (but not mandated) to use the same Windows\r
+# API as the Tcl build. This is accordingly defaulted below. A particular\r
+# extension can override this by pre-definining USE_WIDECHAR_API.\r
+!ifndef USE_WIDECHAR_API\r
+!if $(TCL_VERSION) > 85\r
+USE_WIDECHAR_API = 1\r
+!else\r
+USE_WIDECHAR_API = 0\r
+!endif\r
+!endif\r
+\r
+!if $(USE_WIDECHAR_API)\r
+COMPILERFLAGS = $(COMPILERFLAGS) /DUNICODE /D_UNICODE \r
+!endif\r
+\r
+# Like the TEA system only set this non empty for non-Tk extensions\r
+# Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME\r
+# so we pass both\r
+!if !$(DOING_TCL) && !$(DOING_TK)\r
+PKGNAMEFLAGS = -DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \\r
+               -DPACKAGE_TCLNAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \\r
+               -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \\r
+               -DMODULE_SCOPE=extern \r
+!endif\r
+\r
+# crt picks the C run time based on selected OPTS\r
+!if $(MSVCRT)\r
+!if $(DEBUG) && !$(UNCHECKED)\r
+crt = -MDd\r
+!else\r
+crt = -MD\r
+!endif\r
+!else\r
+!if $(DEBUG) && !$(UNCHECKED)\r
+crt = -MTd\r
+!else\r
+crt = -MT\r
+!endif\r
+!endif\r
+\r
+# cdebug includes compiler options for debugging as well as optimization.\r
+!if $(DEBUG)\r
+\r
+# In debugging mode, optimizations need to be disabled\r
+cdebug = -Zi -Od $(DEBUGFLAGS)\r
+\r
+!else\r
+\r
+cdebug = $(OPTIMIZATIONS)\r
+!if $(SYMBOLS)\r
+cdebug = $(cdebug) -Zi\r
+!endif\r
+\r
+!endif # $(DEBUG)\r
+\r
+# cwarn includes default warning levels.\r
+cwarn = $(WARNINGS)\r
+\r
+!if "$(MACHINE)" == "AMD64"\r
+# Disable pointer<->int warnings related to cast between different sizes\r
+# There are a gadzillion of these due to use of ClientData and\r
+# clutter up compiler\r
+# output increasing chance of a real warning getting lost. So disable them.\r
+# Eventually some day, Tcl will be 64-bit clean.\r
+cwarn = $(cwarn) -wd4311 -wd4312\r
+!endif\r
+\r
+### Common compiler options that are architecture specific\r
+!if "$(MACHINE)" == "ARM"\r
+carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE\r
+!else\r
+carch =\r
+!endif\r
+\r
+!if $(DEBUG)\r
+# Turn warnings into errors\r
+cwarn = $(cwarn) -WX\r
+!endif\r
+\r
+INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES)\r
+!if !$(DOING_TCL) && !$(DOING_TK)\r
+INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WINDIR)" -I"$(COMPATDIR)"\r
+!endif\r
+\r
+# These flags are defined roughly in the order of the pre-reform\r
+# rules.vc/makefile.vc to help visually compare that the pre- and\r
+# post-reform build logs\r
+\r
+# cflags contains generic flags used for building practically all object files\r
+cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\ $(cdebug)\r
+\r
+# appcflags contains $(cflags) and flags for building the application\r
+# object files (e.g. tclsh, or wish) pkgcflags contains $(cflags) plus\r
+# flags used for building shared object files The two differ in the\r
+# BUILD_$(PROJECT) macro which should be defined only for the shared\r
+# library *implementation* and not for its caller interface\r
+\r
+appcflags = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES) $(USE_STUBS_DEFS)\r
+appcflags_nostubs = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES)\r
+pkgcflags = $(appcflags) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)\r
+pkgcflags_nostubs = $(appcflags_nostubs) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)\r
+\r
+# stubscflags contains $(cflags) plus flags used for building a stubs\r
+# library for the package.  Note: -DSTATIC_BUILD is defined in\r
+# $(OPTDEFINES) only if the OPTS configuration indicates a static\r
+# library. However the stubs library is ALWAYS static hence included\r
+# here irrespective of the OPTS setting.\r
+#\r
+# TBD - tclvfs has a comment that stubs libs should not be compiled with -GL\r
+# without stating why. Tcl itself compiled stubs libs with this flag.\r
+# so we do not remove it from cflags. -GL may prevent extensions\r
+# compiled with one VC version to fail to link against stubs library\r
+# compiled with another VC version. Check for this and fix accordingly.\r
+stubscflags = $(cflags) $(PKGNAMEFLAGS) $(PRJ_DEFINES) $(OPTDEFINES) -Zl -DSTATIC_BUILD $(INCLUDES)\r
+\r
+# Link flags \r
+\r
+!if $(DEBUG)\r
+ldebug = -debug -debugtype:cv\r
+!else\r
+ldebug = -release -opt:ref -opt:icf,3\r
+!if $(SYMBOLS)\r
+ldebug = $(ldebug) -debug -debugtype:cv\r
+!endif\r
+!endif\r
+\r
+# Note: Profiling is currently only possible with the Visual Studio Enterprise\r
+!if $(PROFILE)\r
+ldebug= $(ldebug) -profile\r
+!endif\r
+\r
+### Declarations common to all linker versions \r
+lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)\r
+\r
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900\r
+lflags = $(lflags) -nodefaultlib:libucrt.lib\r
+!endif\r
+\r
+# Old linkers (Visual C++ 6 in particular) will link for fast loading\r
+# on Win98. Since we do not support Win98 any more, we specify nowin98\r
+# as recommended for NT and later. However, this is only required by\r
+# IX86 on older compilers and only needed if we are not doing a static build.\r
+\r
+!if "$(MACHINE)" == "IX86" && !$(STATIC_BUILD)\r
+!if [nmakehlp -l -opt:nowin98 $(LINKER_TESTFLAGS)]\r
+# Align sections for PE size savings.\r
+lflags = $(lflags) -opt:nowin98\r
+!endif\r
+!endif\r
+\r
+dlllflags = $(lflags) -dll\r
+conlflags = $(lflags) -subsystem:console\r
+guilflags = $(lflags) -subsystem:windows\r
+\r
+# Libraries that are required for every image.\r
+# Extensions should define any additional libraries with $(PRJ_LIBS)\r
+winlibs   = kernel32.lib advapi32.lib\r
+\r
+!if $(NEED_TK)\r
+winlibs = $(winlibs) gdi32.lib user32.lib uxtheme.lib\r
+!endif\r
+\r
+# Avoid 'unresolved external symbol __security_cookie' errors.\r
+# c.f. http://support.microsoft.com/?id=894573\r
+!if "$(MACHINE)" == "AMD64"\r
+!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500\r
+winlibs   = $(winlibs) bufferoverflowU.lib\r
+!endif\r
+!endif\r
+\r
+baselibs = $(winlibs) $(PRJ_LIBS)\r
+\r
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900\r
+baselibs   = $(baselibs) ucrt.lib\r
+!endif\r
+\r
+################################################################\r
+# 13. Define standard commands, common make targets and implicit rules\r
+\r
+CCPKGCMD = $(cc32) $(pkgcflags) -Fo$(TMP_DIR)^\\r
+CCAPPCMD = $(cc32) $(appcflags) -Fo$(TMP_DIR)^\\r
+CCSTUBSCMD = $(cc32) $(stubscflags) -Fo$(TMP_DIR)^\\r
+\r
+LIBCMD = $(lib32) -nologo $(LINKERFLAGS) -out:$@\r
+DLLCMD = $(link32) $(dlllflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)\r
+\r
+CONEXECMD = $(link32) $(conlflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)\r
+GUIEXECMD = $(link32) $(guilflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)\r
+RESCMD  = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \\r
+           $(TCL_INCLUDES) \\r
+           -DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \\r
+           -DCOMMAVERSION=$(DOTVERSION:.=,),0 \\r
+           -DDOTVERSION=\"$(DOTVERSION)\" \\r
+           -DVERSION=\"$(VERSION)\" \\r
+           -DSUFX=\"$(SUFX)\" \\r
+            -DPROJECT=\"$(PROJECT)\" \\r
+            -DPRJLIBNAME=\"$(PRJLIBNAME)\" \r
+\r
+!ifndef DEFAULT_BUILD_TARGET\r
+DEFAULT_BUILD_TARGET = $(PROJECT)\r
+!endif\r
+\r
+default-target: $(DEFAULT_BUILD_TARGET)\r
+\r
+default-pkgindex:\r
+       @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \\r
+           [list load [file join $$dir $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl\r
+\r
+default-pkgindex-tea:\r
+       @if exist $(ROOT)\pkgIndex.tcl.in nmakehlp -s << $(ROOT)\pkgIndex.tcl.in > $(OUT_DIR)\pkgIndex.tcl\r
+@PACKAGE_VERSION@    $(DOTVERSION)\r
+@PACKAGE_NAME@       $(PRJ_PACKAGE_TCLNAME)\r
+@PACKAGE_TCLNAME@    $(PRJ_PACKAGE_TCLNAME)\r
+@PKG_LIB_FILE@       $(PRJLIBNAME)\r
+<<\r
+\r
+\r
+default-install: default-install-binaries default-install-libraries\r
+\r
+default-install-binaries: $(PRJLIB)\r
+       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"\r
+       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL\r
+\r
+default-install-libraries: $(OUT_DIR)\pkgIndex.tcl\r
+       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'\r
+       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"\r
+       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'\r
+       @$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)\r
+\r
+default-install-stubs:\r
+       @echo Installing stubs library to '$(SCRIPT_INSTALL_DIR)'\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"\r
+       @$(CPY) $(PRJSTUBLIB) "$(SCRIPT_INSTALL_DIR)" >NUL\r
+\r
+default-install-docs-html:\r
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'\r
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"\r
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.html" "$(DOCDIR)\*.css" "$(DOCDIR)\*.png") do @$(COPY) %f "$(DOC_INSTALL_DIR)"\r
+\r
+default-install-docs-n:\r
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'\r
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"\r
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.n") do @$(COPY) %f "$(DOC_INSTALL_DIR)"\r
+\r
+default-install-demos:\r
+       @echo Installing demos to '$(DEMO_INSTALL_DIR)'\r
+       @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)"\r
+       @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)"\r
+\r
+default-clean:\r
+       @echo Cleaning $(TMP_DIR)\* ...\r
+       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)\r
+       @echo Cleaning $(WINDIR)\nmakehlp.obj, nmakehlp.exe ...\r
+       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj\r
+       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe\r
+       @if exist $(WINDIR)\nmakehlp.out del $(WINDIR)\nmakehlp.out\r
+       @echo Cleaning $(WINDIR)\nmhlp-out.txt ...\r
+       @if exist $(WINDIR)\nmhlp-out.txt del $(WINDIR)\nmhlp-out.txt\r
+       @echo Cleaning $(WINDIR)\_junk.pch ...\r
+       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch\r
+       @echo Cleaning $(WINDIR)\vercl.x, vercl.i ...\r
+       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x\r
+       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i\r
+       @echo Cleaning $(WINDIR)\versions.vc, version.vc ...\r
+       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc\r
+       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc\r
+\r
+default-hose: default-clean\r
+       @echo Hosing $(OUT_DIR)\* ...\r
+       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)\r
+\r
+# Only for backward compatibility\r
+default-distclean: default-hose\r
+\r
+default-setup:\r
+       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)\r
+       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)\r
+\r
+!if "$(TESTPAT)" != ""\r
+TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)\r
+!endif\r
+\r
+default-test: default-setup $(PROJECT)\r
+       @set TCLLIBPATH=$(OUT_DIR:\=/)\r
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"\r
+       cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS)\r
+\r
+default-shell: default-setup $(PROJECT)\r
+       @set TCLLIBPATH=$(OUT_DIR:\=/)\r
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"\r
+       $(DEBUGGER) $(TCLSH)\r
+\r
+# Generation of Windows version resource \r
+!ifdef RCFILE\r
+\r
+# Note: don't use $** in below rule because there may be other dependencies\r
+# and only the "master" rc must be passed to the resource compiler\r
+$(TMP_DIR)\$(PROJECT).res: $(RCDIR)\$(PROJECT).rc\r
+       $(RESCMD) $(RCDIR)\$(PROJECT).rc\r
+\r
+!else\r
+\r
+# If parent makefile has not defined a resource definition file,\r
+# we will generate one from standard template.\r
+$(TMP_DIR)\$(PROJECT).res: $(TMP_DIR)\$(PROJECT).rc\r
+\r
+$(TMP_DIR)\$(PROJECT).rc:\r
+       @$(COPY) << $(TMP_DIR)\$(PROJECT).rc\r
+#include <winver.h>\r
+\r
+VS_VERSION_INFO VERSIONINFO\r
+ FILEVERSION   COMMAVERSION\r
+ PRODUCTVERSION        COMMAVERSION\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef DEBUG\r
+ FILEFLAGS     VS_FF_DEBUG\r
+#else\r
+ FILEFLAGS     0x0L\r
+#endif\r
+ FILEOS                VOS_NT_WINDOWS32\r
+ FILETYPE      VFT_DLL\r
+ FILESUBTYPE   0x0L\r
+BEGIN\r
+    BLOCK "StringFileInfo"\r
+    BEGIN\r
+        BLOCK "040904b0"\r
+        BEGIN\r
+            VALUE "FileDescription",  "Tcl extension " PROJECT\r
+            VALUE "OriginalFilename", PRJLIBNAME\r
+            VALUE "FileVersion",      DOTVERSION\r
+            VALUE "ProductName",      "Package " PROJECT " for Tcl"\r
+            VALUE "ProductVersion",   DOTVERSION \r
+        END\r
+    END\r
+    BLOCK "VarFileInfo"\r
+    BEGIN\r
+        VALUE "Translation", 0x409, 1200\r
+    END\r
+END\r
+\r
+<<\r
+\r
+!endif # ifdef RCFILE\r
+\r
+!ifndef DISABLE_IMPLICIT_RULES\r
+DISABLE_IMPLICIT_RULES = 0\r
+!endif\r
+\r
+!if !$(DISABLE_IMPLICIT_RULES)\r
+# Implicit rule definitions - only for building library objects. For stubs and\r
+# main application, the master makefile should define explicit rules.\r
+\r
+{$(ROOT)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(WINDIR)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(RCDIR)}.rc{$(TMP_DIR)}.res:\r
+       $(RESCMD) $<\r
+\r
+{$(WINDIR)}.rc{$(TMP_DIR)}.res:\r
+       $(RESCMD) $<\r
+\r
+{$(TMP_DIR)}.rc{$(TMP_DIR)}.res:\r
+       $(RESCMD) $<\r
+\r
+.SUFFIXES:\r
+.SUFFIXES:.c .rc\r
+\r
+!endif\r
+\r
+################################################################\r
+# 14. Sanity check selected options against Tcl build options\r
+# When building an extension, certain configuration options should\r
+# match the ones used when Tcl was built. Here we check and\r
+# warn on a mismatch.\r
+!if ! $(DOING_TCL)\r
+\r
+!if $(TCLINSTALL) # Building against an installed Tcl\r
+!if exist("$(_TCLDIR)\lib\nmake\tcl.nmake")\r
+TCLNMAKECONFIG = "$(_TCLDIR)\lib\nmake\tcl.nmake"\r
+!endif\r
+!else # ! $(TCLINSTALL) - building against Tcl source\r
+!if exist("$(OUT_DIR)\tcl.nmake")\r
+TCLNMAKECONFIG = "$(OUT_DIR)\tcl.nmake"\r
+!endif\r
+!endif # TCLINSTALL\r
+\r
+!if $(CONFIG_CHECK)\r
+!ifdef TCLNMAKECONFIG\r
+!include $(TCLNMAKECONFIG)\r
+\r
+!if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)"\r
+!error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)).\r
+!endif\r
+!if defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC)\r
+!message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)).\r
+!endif\r
+!if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG)\r
+!message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)).\r
+!endif\r
+!endif\r
+\r
+!endif # TCLNMAKECONFIG\r
+\r
+!endif # ! $(DOING_TCL)\r
+\r
+\r
+#----------------------------------------------------------\r
+# Display stats being used.\r
+#----------------------------------------------------------\r
+\r
+!if !$(DOING_TCL)\r
+!message *** Building against Tcl at '$(_TCLDIR)'\r
+!endif\r
+!if !$(DOING_TK) && $(NEED_TK)\r
+!message *** Building against Tk at '$(_TKDIR)'\r
+!endif\r
+!message *** Intermediate directory will be '$(TMP_DIR)'\r
+!message *** Output directory will be '$(OUT_DIR)'\r
+!message *** Installation, if selected, will be in '$(_INSTALLDIR)'\r
+!message *** Suffix for binaries will be '$(SUFX)'\r
+!message *** Compiler version $(VCVER). Target machine is $(MACHINE)\r
+!message *** Host architecture is $(NATIVE_ARCH)\r
+\r
+!endif # ifdef _RULES_VC\r
diff --git a/pkgs/thread2.8.2/win/targets.vc b/pkgs/thread2.8.2/win/targets.vc
new file mode 100644 (file)
index 0000000..312022d
--- /dev/null
@@ -0,0 +1,98 @@
+#------------------------------------------------------------- -*- makefile -*-
+# targets.vc --
+#
+# Part of the nmake based build system for Tcl and its extensions.
+# This file defines some standard targets for the convenience of extensions
+# and can be optionally included by the extension makefile.
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for docs.
+
+$(PROJECT): setup pkgindex $(PRJLIB)
+
+!ifdef PRJ_STUBOBJS
+$(PROJECT): $(PRJSTUBLIB)
+$(PRJSTUBLIB): $(PRJ_STUBOBJS)
+       $(LIBCMD) $**
+
+$(PRJ_STUBOBJS):
+       $(CCSTUBSCMD) %s
+!endif # PRJ_STUBOBJS
+
+!ifdef PRJ_MANIFEST
+$(PROJECT): $(PRJLIB).manifest
+$(PRJLIB).manifest: $(PRJ_MANIFEST)
+       @nmakehlp -s << $** >$@
+@MACHINE@        $(MACHINE:IX86=X86)
+<<
+!endif
+
+!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"
+$(PRJLIB): $(PRJ_OBJS) $(RESFILE)
+!if $(STATIC_BUILD)
+       $(LIBCMD) $**
+!else
+       $(DLLCMD) $**
+       $(_VC_MANIFEST_EMBED_DLL)
+!endif
+       -@del $*.exp
+!endif
+
+!if "$(PRJ_HEADERS)" != "" && "$(PRJ_OBJS)" != ""
+$(PRJ_OBJS): $(PRJ_HEADERS)
+!endif
+
+# If parent makefile has defined stub objects, add their installation
+# to the default install
+!if "$(PRJ_STUBOBJS)" != ""
+default-install: default-install-stubs
+!endif
+
+# Unlike the other default targets, these cannot be in rules.vc because
+# the executed command depends on existence of macro PRJ_HEADERS_PUBLIC
+# that the parent makefile will not define until after including rules-ext.vc
+!if "$(PRJ_HEADERS_PUBLIC)" != ""
+default-install: default-install-headers
+default-install-headers:
+       @echo Installing headers to '$(INCLUDE_INSTALL_DIR)'
+       @for %f in ($(PRJ_HEADERS_PUBLIC)) do @$(COPY) %f "$(INCLUDE_INSTALL_DIR)"
+!endif
+
+!if "$(DISABLE_STANDARD_TARGETS)" == ""
+DISABLE_STANDARD_TARGETS = 0
+!endif
+
+!if "$(DISABLE_TARGET_setup)" == ""
+DISABLE_TARGET_setup = 0
+!endif
+!if "$(DISABLE_TARGET_install)" == ""
+DISABLE_TARGET_install = 0
+!endif
+!if "$(DISABLE_TARGET_clean)" == ""
+DISABLE_TARGET_clean = 0
+!endif
+!if "$(DISABLE_TARGET_test)" == ""
+DISABLE_TARGET_test = 0
+!endif
+!if "$(DISABLE_TARGET_shell)" == ""
+DISABLE_TARGET_shell = 0
+!endif
+
+!if !$(DISABLE_STANDARD_TARGETS)
+!if !$(DISABLE_TARGET_setup)
+setup: default-setup
+!endif
+!if !$(DISABLE_TARGET_install)
+install: default-install
+!endif
+!if !$(DISABLE_TARGET_clean)
+clean: default-clean
+realclean: hose
+hose: default-hose
+distclean: realclean default-distclean
+!endif
+!if !$(DISABLE_TARGET_test)
+test: default-test
+!endif
+!if !$(DISABLE_TARGET_shell)
+shell: default-shell
+!endif
+!endif # DISABLE_STANDARD_TARGETS
similarity index 59%
rename from pkgs/thread2.8.1/win/thread.rc
rename to pkgs/thread2.8.2/win/thread.rc
index c5ca3af..d59d065 100644 (file)
@@ -4,38 +4,49 @@
 #include <winver.h>
 
 #define RESOURCE_INCLUDED
-#include <tcl.h>
 
 LANGUAGE 0x9, 0x1    /* LANG_ENGLISH, SUBLANG_DEFAULT */
 
+#ifndef COMMAVERSION
+#define COMMAVERSION PACKAGE_MAJOR,PACKAGE_MINOR,0,0
+#endif
+
+#ifndef DOTVERSION
+#define DOTVERSION PACKAGE_VERSION
+#endif
+
+#ifndef PRJLIBNAME
+#ifdef DEBUG
+#define PRJLIBNAME "thread" STRINGIFY(JOIN(PACKAGE_MAJOR,PACKAGE_MINOR)) "d.dll\0"
+#else
+#define PRJLIBNAME "thread" STRINGIFY(JOIN(PACKAGE_MAJOR,PACKAGE_MINOR)) ".dll\0"
+#endif
+#endif
+
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION    PACKAGE_MAJOR,PACKAGE_MINOR,0,0
- PRODUCTVERSION PACKAGE_MAJOR,PACKAGE_MINOR,0,0
+ FILEVERSION    COMMAVERSION
+ PRODUCTVERSION COMMAVERSION
  FILEFLAGSMASK  0x3fL
 #if DEBUG
  FILEFLAGS 0x1L
 #else
  FILEFLAGS 0x0L
 #endif
- FILEOS     0x4    /* VOS__WINDOWS32 */
- FILETYPE     0x2    /* VFT_DLL */
+ FILEOS     VOS_NT_WINDOWS32
+ FILETYPE     VFT_DLL
  FILESUBTYPE     0x0L
 BEGIN
     BLOCK "StringFileInfo"
     BEGIN
         BLOCK "040904b0" /* LANG_ENGLISH/SUBLANG_ENGLISH_US, Unicode CP */
         BEGIN
-            VALUE "FileDescription", "Threading extension library for Tcl\0"
-#if DEBUG
-            VALUE "OriginalFilename", "thread" STRINGIFY(JOIN(PACKAGE_MAJOR,PACKAGE_MINOR)) "d.dll\0"
-#else
-            VALUE "OriginalFilename", "thread" STRINGIFY(JOIN(PACKAGE_MAJOR,PACKAGE_MINOR)) ".dll\0"
-#endif
+            VALUE "FileDescription", "Threading extension library for Tcl"
+            VALUE "OriginalFilename", PRJLIBNAME
             VALUE "CompanyName", "NONE! Open-sourced with no owner\0"
-            VALUE "FileVersion", PACKAGE_VERSION
+            VALUE "FileVersion", DOTVERSION
             VALUE "LegalCopyright", "Under BSD license\0"
             VALUE "ProductName", "Tcl for Windows\0"
-            VALUE "ProductVersion", PACKAGE_VERSION
+            VALUE "ProductVersion", DOTVERSION
             VALUE "Authors", "Brent Welch,\r\n" "Andreas Kupries, \r\n" "David Gravereaux,\r\n" "Zoran Vasiljevic" "\0"
         END
     END
index a9c77e3..5231048 100644 (file)
@@ -852,7 +852,7 @@ test assemble-8.5 {bad context} {
     -body {
        namespace eval assem {
            set x 1
-           list [catch {assemble {load x}} result] $result $errorCode
+           list [catch {assemble {load x}} result opts] $result [dict get $opts -errorcode]
        }
     }
     -result {1 {cannot use this instruction to create a variable in a non-proc context} {TCL ASSEM LVT}}
index 1a0037c..865814a 100644 (file)
@@ -224,6 +224,21 @@ test basic-15.1 {Tcl_CreateObjCommand, new cmd goes into a namespace specified i
     list [test_ns_basic::cmd] \
          [namespace delete test_ns_basic]
 } {::test_ns_basic {}}
+test basic-15.2 {Tcl_CreateObjCommand, Bug 0e4d88b650} -setup {
+    proc deleter {ns args} {
+        namespace delete $ns
+    }
+    namespace eval n {
+        proc p {} {}
+    }
+    trace add command n::p delete [list [namespace which deleter] [namespace current]::n]
+} -body {
+    proc n::p {} {}
+} -cleanup {
+    namespace delete n
+    rename deleter {}
+}
+
 
 test basic-16.1 {TclInvokeStringCommand} {emptyTest} {
 } {}
@@ -969,6 +984,16 @@ test basic-49.2 {Tcl_EvalEx: verify TCL_EVAL_GLOBAL operation} testevalex {
     set ::context
 } {global}
 
+test basic-50.1 {[586e71dce4] EvalObjv level #0 exception handling} -setup {
+    interp create slave
+    interp alias {} foo slave return
+} -body {
+    list [catch foo m] $m
+} -cleanup {
+    unset -nocomplain m
+    interp delete slave
+} -result {0 {}}
+
 # Clean up after expand tests
 unset noComp l1 l2 constraints
 rename l3 {}
index b1afa39..4ec4db2 100644 (file)
@@ -15416,30 +15416,9 @@ test clock-5.29 {time zone boundary case 1948-09-26 01:00:01} detroit {
     clock format -671047199 -format {%H:%M:%S %z %Z} \
         -timezone :America/Detroit
 } {01:00:01 -0500 EST}
-test clock-5.30 {time zone boundary case 1967-06-14 01:59:59} detroit {
-    clock format -80499601 -format {%H:%M:%S %z %Z} \
-        -timezone :America/Detroit
-} {01:59:59 -0500 EST}
-test clock-5.31 {time zone boundary case 1967-06-14 03:00:00} detroit {
-    clock format -80499600 -format {%H:%M:%S %z %Z} \
-        -timezone :America/Detroit
-} {03:00:00 -0400 EDT}
-test clock-5.32 {time zone boundary case 1967-06-14 03:00:01} detroit {
-    clock format -80499599 -format {%H:%M:%S %z %Z} \
-        -timezone :America/Detroit
-} {03:00:01 -0400 EDT}
-test clock-5.33 {time zone boundary case 1967-10-29 01:59:59} detroit {
-    clock format -68666401 -format {%H:%M:%S %z %Z} \
-        -timezone :America/Detroit
-} {01:59:59 -0400 EDT}
-test clock-5.34 {time zone boundary case 1967-10-29 01:00:00} detroit {
-    clock format -68666400 -format {%H:%M:%S %z %Z} \
-        -timezone :America/Detroit
-} {01:00:00 -0500 EST}
-test clock-5.35 {time zone boundary case 1967-10-29 01:00:01} detroit {
-    clock format -68666399 -format {%H:%M:%S %z %Z} \
-        -timezone :America/Detroit
-} {01:00:01 -0500 EST}
+
+# Detroit did not observe Daylight Saving Time in 1967
+
 test clock-5.36 {time zone boundary case 1972-12-31 23:59:59} detroit {
     clock format 94712399 -format {%H:%M:%S %z %Z} \
         -timezone :America/Detroit
index 3c58c1b..e334dff 100644 (file)
@@ -188,7 +188,7 @@ test cmdAH-4.5 {Tcl_EncodingObjCmd} -setup {
 test cmdAH-4.6 {Tcl_EncodingObjCmd} -setup {
     set system [encoding system]
 } -body {
-    encoding system identity
+    encoding system iso8859-1
     encoding convertto jis0208 \u4e4e
 } -cleanup {
     encoding system $system
@@ -210,7 +210,7 @@ test cmdAH-4.9 {Tcl_EncodingObjCmd} -setup {
 test cmdAH-4.10 {Tcl_EncodingObjCmd} -setup {
     set system [encoding system]
 } -body {
-    encoding system identity
+    encoding system iso8859-1
     encoding convertfrom jis0208 8C
 } -cleanup {
     encoding system $system
@@ -224,11 +224,11 @@ test cmdAH-4.12 {Tcl_EncodingObjCmd} -returnCodes error -body {
 test cmdAH-4.13 {Tcl_EncodingObjCmd} -setup {
     set system [encoding system]
 } -body {
-    encoding system identity
+    encoding system iso8859-1
     encoding system
 } -cleanup {
     encoding system $system
-} -result identity
+} -result iso8859-1
 
 test cmdAH-5.1 {Tcl_FileObjCmd} -returnCodes error -body {
     file
index 5b3c3e1..ed0e6a4 100644 (file)
@@ -75,11 +75,11 @@ test encoding-2.2 {Tcl_FreeEncoding: refcount != 0} -setup {
     encoding system shiftjis           ;# incr ref count
     encoding dirs [list [pwd]]
     set x [encoding convertto shiftjis \u4e4e] ;# old one found
-    encoding system identity
+    encoding system iso8859-1
     llength shiftjis           ;# Shimmer away any cache of Tcl_Encoding
     lappend x [catch {encoding convertto shiftjis \u4e4e} msg] $msg
 } -cleanup {
-    encoding system identity
+    encoding system iso8859-1
     encoding dirs $path
     encoding system $system
 } -result "\u008c\u00c1 1 {unknown encoding \"shiftjis\"}"
@@ -136,7 +136,7 @@ test encoding-5.1 {Tcl_SetSystemEncoding} -setup {
     encoding system jis0208
     encoding convertto \u4e4e
 } -cleanup {
-    encoding system identity
+    encoding system iso8859-1
     encoding system $old
 } -result {8C}
 test encoding-5.2 {Tcl_SetSystemEncoding: test ref count} {
@@ -259,7 +259,7 @@ test encoding-11.5.1 {LoadEncodingFile: escape file} {
 test encoding-11.6 {LoadEncodingFile: invalid file} -constraints {testencoding} -setup {
     set system [encoding system]
     set path [encoding dirs]
-    encoding system identity
+    encoding system iso8859-1
 } -body {
     cd [temporaryDirectory]
     encoding dirs [file join tmp encoding]
index 38927d3..5f3a0cb 100644 (file)
@@ -671,8 +671,12 @@ test exec-19.1 {exec >> uses O_APPEND} -constraints {exec unix} -setup {
     exec /bin/sh -c \
            {for a in 1 2 3; do sleep 1; echo $a; done} >>$tmpfile &
     exec /bin/sh -c \
+           {for a in 4 5 6; do sleep 1; echo $a >&2; done} 2>>$tmpfile &
+    exec /bin/sh -c \
            {for a in a b c; do sleep 1; echo $a; done} >>$tmpfile &
-    # The above two shell invokations take about 3 seconds to finish, so allow
+    exec /bin/sh -c \
+           {for a in d e f; do sleep 1; echo $a >&2; done} 2>>$tmpfile &
+    # The above four shell invokations take about 3 seconds to finish, so allow
     # 5s (in case the machine is busy)
     after 5000
     # Check that no bytes have got lost through mixups with overlapping
@@ -681,7 +685,7 @@ test exec-19.1 {exec >> uses O_APPEND} -constraints {exec unix} -setup {
     file size $tmpfile
 } -cleanup {
     removeFile $tmpfile
-} -result 14
+} -result 26
 
 # Tests to ensure batch files and .CMD (Bug 9ece99d58b)
 # can be executed on Windows
index 9a2ffbd..e1ed68b 100644 (file)
@@ -724,7 +724,7 @@ test execute-6.14 {Tcl_ExprObj: exprcode context validation} -setup {
     }
     set result {}
     lappend result [expr $e]
-    lappend result [namespace eval foo {expr $e}]
+    lappend result [namespace eval foo [list expr $e]]
 } -cleanup {
     namespace delete foo
 } -result {1 2}
@@ -733,11 +733,11 @@ test execute-6.15 {Tcl_ExprObj: exprcode name resolution epoch validation} -setu
 } -body {
     set e { [llength {}]+1 }
     set result {}
-    lappend result [namespace eval foo {expr $e}]
+    lappend result [namespace eval foo [list expr $e]]
     namespace eval foo {
        proc llength {args} {return 1}
     }
-    lappend result [namespace eval foo {expr $e}]
+    lappend result [namespace eval foo [list expr $e]]
 } -cleanup {
     namespace delete foo
 } -result {1 2}
index 10895b2..b805780 100644 (file)
@@ -377,6 +377,22 @@ test filesystem-1.52.1 {bug f9f390d0fa: file join where strep is not canonical}
     file normalize $x
     file join $x
 } -result /foo
+test filesystem-1.53 {[Bug 3559678] - normalize when tail is empty} {
+  string match */ [file normalize [lindex [glob -dir [pwd] {{}}] 0]]
+} 0
+test filesystem-1.54 {[Bug ce3a211dcb] - normalize when tail is empty} -setup {
+    set save [pwd]
+    cd [set home [makeDirectory ce3a211dcb]]
+    makeDirectory A $home
+    cd [lindex [glob */] 0]
+} -body {
+    string match */A [pwd]
+} -cleanup {
+    cd $home
+    removeDirectory A $home
+    cd $save
+    removeDirectory ce3a211dcb
+} -result 1
 
 test filesystem-2.0 {new native path} {unix} {
    foreach f [lsort [glob -nocomplain /usr/bin/c*]] {
index de7009d..ff8cd7d 100644 (file)
@@ -1785,7 +1785,10 @@ test namespace-42.7 {ensembles: nested} -body {
 } -cleanup {
     namespace delete ns
 } -result {{1 ::ns::x0::z} 1 2 3}
-test namespace-42.8 {ensembles: [Bug 1670091]} -setup {
+test namespace-42.8 {
+    ensembles: [Bug 1670091], panic due to pointer to a deallocated List
+    struct.
+} -setup {
     proc demo args {}
     variable target [list [namespace which demo] x]
     proc trial args {variable target; string length $target}
@@ -1800,6 +1803,34 @@ test namespace-42.8 {ensembles: [Bug 1670091]} -setup {
     rename foo {}
 } -result {}
 
+test namespace-42.9 {
+    ensembles: [Bug 4f6a1ebd64], segmentation fault due to pointer to a
+    deallocated List struct.
+} -setup {
+    namespace eval n {namespace ensemble create}
+    set lst [dict create one ::two]
+    namespace ensemble configure n -subcommands $lst -map $lst
+} -body {
+    n one
+} -cleanup {
+    namespace delete n
+    unset -nocomplain lst
+} -returnCodes error -match glob -result {invalid command name*}
+
+test namespace-42.10 {
+    ensembles: [Bug 4f6a1ebd64] segmentation fault due to pointer to a
+    deallocated List struct (this time with duplicate of one in "dict").
+} -setup {
+    namespace eval n {namespace ensemble create}
+    set lst [list one ::two one ::three]
+    namespace ensemble configure n -subcommands $lst -map $lst
+} -body {
+    n one
+} -cleanup {
+    namespace delete n
+    unset -nocomplain lst
+} -returnCodes error -match glob -result {invalid command name *three*}
+
 test namespace-43.1 {ensembles: dict-driven} {
     namespace eval ns {
        namespace export x*
index 5eaa8bf..61a5e01 100644 (file)
@@ -2048,6 +2048,17 @@ test oo-15.14 {OO: object cloning with target NS} -setup {
 } -cleanup {
     Cls destroy
 } -result {{} ::dupens::test-15.14}
+test oo-15.15 {method cloning must ensure that there is a string representation of bodies} -setup {
+    oo::class create cls
+} -body {
+    cls create foo
+    oo::objdefine foo {
+       method m1 {} [string map {a b} {return hello}] 
+    }
+    [oo::copy foo] m1
+} -cleanup {
+    cls destroy
+} -result hello
 
 test oo-16.1 {OO: object introspection} -body {
     info object
@@ -3799,7 +3810,29 @@ test oo-35.4 {Bug 593baa032c: mixins list teardown} {
     oo::class create D {mixin B}
     namespace eval [info object namespace D] [list [namespace which B] destroy]
 } {}
-
+test oo-35.5 {Bug 1a56550e96: introspectors must traverse mixin links correctly} -setup {
+    oo::class create base {
+       unexport destroy
+    }
+} -body {
+    oo::class create C {
+       superclass base
+       method c {} {}
+    }
+    oo::class create D {
+       superclass base
+       mixin C
+       method d {} {}
+    }
+    oo::class create E {
+       superclass D
+       method e {} {}
+    }
+    E create e1
+    list [lsort [info class methods E -all]] [lsort [info object methods e1 -all]]
+} -cleanup {
+    base destroy
+} -result {{c d e} {c d e}}
 \f
 cleanupTests
 return
index da778f1..74415ae 100644 (file)
@@ -599,6 +599,16 @@ test package-3.52 {Tcl_PkgRequire procedure, picking best stable version} -setup
     package require t
     return $x
 } -result {1.3}
+test pkg-3.53 {Tcl_PkgRequire procedure, picking best stable version} {
+    package forget t
+    foreach i {1.2b1 1.1} {
+        package ifneeded t $i "set x $i; package provide t $i"
+    }
+    set x xxx
+    package require t
+    set x
+} {1.1}
+
 
 test package-4.1 {Tcl_PackageCmd procedure} -returnCodes error -body {
     package
index c826444..8ee0ec7 100644 (file)
@@ -16,7 +16,9 @@ namespace eval ::tcl::test::platform {
     namespace import ::tcltest::test
     namespace import ::tcltest::cleanupTests
 
-    variable ::tcl_platform
+    # This is not how [variable] works. See TIP 276.
+    #variable ::tcl_platform
+    namespace upvar :: tcl_platform tcl_platform
 
 ::tcltest::loadTestedCommands
 catch [list package require -exact Tcltest [info patchlevel]]
index 9bb4c08..b0b395d 100644 (file)
@@ -139,13 +139,10 @@ test resolver-1.5 {cmdNameObj sharing vs. cmd resolver: other than global NS} -s
        variable r2 ""
     }
 } -constraints testinterpresolver -body {
-    set r0 [namespace eval ::ns2 {x}]
-    set r1 [namespace eval ::ns2 {z}]
-    namespace eval ::ns2 {
+    list [namespace eval ::ns2 {x}] [namespace eval ::ns2 {z}] [namespace eval ::ns2 {
        namespace import ::ns1::z
-       set r2 [z]
-    }
-    list $r0 $r1 $r2
+       z
+    }]
 } -cleanup {
     testinterpresolver down
     namespace delete ::ns2
index b36b412..98c581b 100644 (file)
@@ -553,7 +553,7 @@ test scan-5.18 {bigint scanning underflow} -setup {
     list [scan "-207698809136909011942886895" \
            %llu a] $a
 } -returnCodes 1 -result {unsigned bignum scans are invalid}
-test scan-5.18 {bigint scanning invalid} -setup {
+test scan-5.19 {bigint scanning invalid} -setup {
     set a {};
 } -body {
     list [scan "207698809136909011942886895" \
index 1c68f91..6138ed8 100644 (file)
@@ -652,6 +652,13 @@ test set-old-8.52 {array command, array names -regexp on regexp pattern} {
     set a(11) 1
     list [catch {lsort [array names a -regexp ^1]} msg] $msg
 } {0 {1*2 11 12}}
+test set-old-8.52.1 {array command, array names -regexp, backrefs} {
+    catch {unset a}
+    set a(1*2) 1
+    set a(12) 1
+    set a(11) 1
+    list [catch {lsort [array names a -regexp {^(.)\1}]} msg] $msg
+} {0 11}
 test set-old-8.53 {array command, array names -regexp} {
     catch {unset a}
     set a(-glob) 1
index 778131f..18055b3 100644 (file)
@@ -70,6 +70,9 @@ test split-1.13 {basic split commands} {
 test split-1.14 {basic split commands} {
     split ",12,,,34,56," {,}
 } {{} 12 {} {} 34 56 {}}
+test split-1.15 {basic split commands} -body {
+    split "a\U01f4a9b" {}
+} -result "a \U01f4a9 b"
 
 test split-2.1 {split errors} {
     list [catch split msg] $msg $errorCode
index cc65e67..bbba5eb 100644 (file)
@@ -1682,40 +1682,40 @@ test string-24.4 {string reverse command - unshared string} {
     string reverse $x$y
 } edcba
 test string-24.5 {string reverse command - shared unicode string} {
-    set x abcde\udead
+    set x abcde\ud0ad
     string reverse $x
-} \udeadedcba
+} \ud0adedcba
 test string-24.6 {string reverse command - unshared string} {
     set x abc
-    set y de\udead
+    set y de\ud0ad
     string reverse $x$y
-} \udeadedcba
+} \ud0adedcba
 test string-24.7 {string reverse command - simple case} {
     string reverse a
 } a
 test string-24.8 {string reverse command - simple case} {
-    string reverse \udead
-} \udead
+    string reverse \ud0ad
+} \ud0ad
 test string-24.9 {string reverse command - simple case} {
     string reverse {}
 } {}
 test string-24.10 {string reverse command - corner case} {
-    set x \ubeef\udead
+    set x \ubeef\ud0ad
     string reverse $x
-} \udead\ubeef
+} \ud0ad\ubeef
 test string-24.11 {string reverse command - corner case} {
     set x \ubeef
-    set y \udead
+    set y \ud0ad
     string reverse $x$y
-} \udead\ubeef
+} \ud0ad\ubeef
 test string-24.12 {string reverse command - corner case} {
     set x \ubeef
-    set y \udead
+    set y \ud0ad
     string is ascii [string reverse $x$y]
 } 0
 test string-24.13 {string reverse command - pure Unicode string} {
-    string reverse [string range \ubeef\udead\ubeef\udead\ubeef\udead 1 5]
-} \udead\ubeef\udead\ubeef\udead
+    string reverse [string range \ubeef\ud0ad\ubeef\ud0ad\ubeef\ud0ad 1 5]
+} \ud0ad\ubeef\ud0ad\ubeef\ud0ad
 test string-24.14 {string reverse command - pure bytearray} {
     binary scan [string reverse [binary format H* 010203]] H* x
     set x
index 422ab08..95775a8 100644 (file)
@@ -68,10 +68,10 @@ test utf-2.7 {Tcl_UtfToUniChar: lead (3-byte) followed by 2 trail} testbytestrin
 } {1}
 test utf-2.8 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail} -constraints {fullutf testbytestring} -body {
     string length [testbytestring "\xF0\x90\x80\x80"]
-} -result {1}
+} -result {2}
 test utf-2.9 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail} -constraints {fullutf testbytestring} -body {
     string length [testbytestring "\xF4\x8F\xBF\xBF"]
-} -result {1}
+} -result {2}
 test utf-2.10 {Tcl_UtfToUniChar: lead (4-byte) followed by 3 trail, underflow} testbytestring {
     string length [testbytestring "\xF0\x8F\xBF\xBF"]
 } {4}
@@ -86,6 +86,9 @@ test utf-3.1 {Tcl_UtfCharComplete} {
 } {}
 
 testConstraint testnumutfchars [llength [info commands testnumutfchars]]
+testConstraint testfindfirst [llength [info commands testfindfirst]]
+testConstraint testfindlast [llength [info commands testfindlast]]
+
 test utf-4.1 {Tcl_NumUtfChars: zero length} testnumutfchars {
     testnumutfchars ""
 } {0}
@@ -118,8 +121,12 @@ test utf-4.10 {Tcl_NumUtfChars: #u0000, calc len, overcomplete} {testnumutfchars
     testnumutfchars [testbytestring "\x00"] 2
 } {2}
 
-test utf-5.1 {Tcl_UtfFindFirsts} {
-} {}
+test utf-5.1 {Tcl_UtfFindFirst} {testfindfirst testbytestring} {
+    testfindfirst [testbytestring "abcbc"] 98
+} {bcbc}
+test utf-5.2 {Tcl_UtfFindLast} {testfindlast testbytestring} {
+    testfindlast [testbytestring "abcbc"] 98
+} {bc}
 
 test utf-6.1 {Tcl_UtfNext} {
 } {}
index 7f45414..29c051d 100644 (file)
@@ -840,8 +840,8 @@ install-libraries: libraries
            do \
            $(INSTALL_DATA) $$i "$(SCRIPT_INSTALL_DIR)"/http1.0; \
            done;
-       @echo "Installing package http 2.8.11 as a Tcl Module";
-       @$(INSTALL_DATA) $(TOP_DIR)/library/http/http.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.6/http-2.8.11.tm;
+       @echo "Installing package http 2.8.12 as a Tcl Module";
+       @$(INSTALL_DATA) $(TOP_DIR)/library/http/http.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.6/http-2.8.12.tm;
        @echo "Installing package opt0.4 files to $(SCRIPT_INSTALL_DIR)/opt0.4/";
        @for i in $(TOP_DIR)/library/opt/*.tcl ; \
            do \
@@ -2018,8 +2018,7 @@ dist: $(UNIX_DIR)/configure $(UNIX_DIR)/tclConfig.h.in $(UNIX_DIR)/tcl.pc.in $(M
        cp -p $(TOP_DIR)/win/*.[ch] $(TOP_DIR)/win/*.ico $(TOP_DIR)/win/*.rc \
                $(DISTDIR)/win
        cp -p $(TOP_DIR)/win/*.bat $(DISTDIR)/win
-       cp -p $(TOP_DIR)/win/makefile.* $(DISTDIR)/win
-       cp -p $(TOP_DIR)/win/rules.vc $(DISTDIR)/win
+       cp -p $(TOP_DIR)/win/*.vc $(DISTDIR)/win
        cp -p $(TOP_DIR)/win/coffbase.txt $(DISTDIR)/win
        cp -p $(TOP_DIR)/win/tcl.hpj.in $(DISTDIR)/win
        cp -p $(TOP_DIR)/win/tcl.ds* $(DISTDIR)/win
index 39076a4..3d7fbf4 100755 (executable)
@@ -1335,7 +1335,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 TCL_VERSION=8.6
 TCL_MAJOR_VERSION=8
 TCL_MINOR_VERSION=6
-TCL_PATCH_LEVEL=".7"
+TCL_PATCH_LEVEL=".8"
 VERSION=${TCL_VERSION}
 
 EXTRA_INSTALL_BINARIES=${EXTRA_INSTALL_BINARIES:-"@:"}
@@ -6954,7 +6954,7 @@ echo "$as_me: error: CYGWIN compile is only supported with --enable-threads" >&2
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            DL_OBJS="tclLoadDl.o"
            DL_LIBS="-lroot"
            echo "$as_me:$LINENO: checking for inet_ntoa in -lnetwork" >&5
@@ -7383,7 +7383,7 @@ fi
            # get rid of the warnings.
            #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES"
 
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            DL_OBJS="tclLoadDl.o"
            DL_LIBS="-ldl"
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
@@ -7525,7 +7525,7 @@ fi
                SHLIB_CFLAGS="-fpic"
                ;;
            esac
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            DL_OBJS="tclLoadDl.o"
            DL_LIBS=""
@@ -7554,7 +7554,7 @@ fi
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            DL_OBJS="tclLoadDl.o"
            DL_LIBS=""
index 220a4aa..bfa2ef7 100755 (executable)
@@ -25,7 +25,7 @@ m4_ifdef([SC_USE_CONFIG_HEADERS], [
 TCL_VERSION=8.6
 TCL_MAJOR_VERSION=8
 TCL_MINOR_VERSION=6
-TCL_PATCH_LEVEL=".7"
+TCL_PATCH_LEVEL=".8"
 VERSION=${TCL_VERSION}
 
 EXTRA_INSTALL_BINARIES=${EXTRA_INSTALL_BINARIES:-"@:"}
index 8a802fb..6ca2047 100644 (file)
@@ -1258,7 +1258,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
            SHLIB_CFLAGS="-fPIC"
            SHLIB_SUFFIX=".so"
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            DL_OBJS="tclLoadDl.o"
            DL_LIBS="-lroot"
            AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"])
@@ -1402,7 +1402,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
            # get rid of the warnings.
            #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES"
 
-           SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
+           SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared'
            DL_OBJS="tclLoadDl.o"
            DL_LIBS="-ldl"
            LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
@@ -1473,7 +1473,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
                SHLIB_CFLAGS="-fpic"
                ;;
            esac
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            DL_OBJS="tclLoadDl.o"
            DL_LIBS=""
@@ -1496,7 +1496,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
        NetBSD-*)
            # NetBSD has ELF and can use 'cc -shared' to build shared libs
            SHLIB_CFLAGS="-fPIC"
-           SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}'
+           SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared'
            SHLIB_SUFFIX=".so"
            DL_OBJS="tclLoadDl.o"
            DL_LIBS=""
index 141511d..09920dd 100644 (file)
@@ -4,7 +4,7 @@
 
 Name:          tcl
 Summary:       Tcl scripting language development environment
-Version:       8.6.7
+Version:       8.6.8
 Release:       2
 License:       BSD
 Group:         Development/Languages
index 8b7dc58..e998bf9 100644 (file)
@@ -48,7 +48,9 @@
 #endif /* TCL_DYLD_USE_DLFCN */
 
 #if TCL_DYLD_USE_NSMODULE || defined(TCL_LOAD_FROM_MEMORY)
+#if defined (__clang__) || ((__GNUC__)  && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
 #include <mach-o/dyld.h>
 #include <mach-o/fat.h>
 #include <mach-o/swap.h>
index 2728957..ba56089 100644 (file)
@@ -125,11 +125,11 @@ typedef off_t             Tcl_SeekOffset;
 #   include <sys/select.h>
 #endif
 #include <sys/stat.h>
-#if TIME_WITH_SYS_TIME
+#ifdef TIME_WITH_SYS_TIME
 #   include <sys/time.h>
 #   include <time.h>
 #else
-#if HAVE_SYS_TIME_H
+#ifdef HAVE_SYS_TIME_H
 #   include <sys/time.h>
 #else
 #   include <time.h>
@@ -138,11 +138,11 @@ typedef off_t             Tcl_SeekOffset;
 #ifndef NO_SYS_WAIT_H
 #   include <sys/wait.h>
 #endif
-#if HAVE_INTTYPES_H
+#ifdef HAVE_INTTYPES_H
 #   include <inttypes.h>
 #endif
 #include <limits.h>
-#if HAVE_STDINT_H
+#ifdef HAVE_STDINT_H
 #   include <stdint.h>
 #endif
 #ifdef HAVE_UNISTD_H
index b9b6b53..e418ff0 100644 (file)
@@ -19,6 +19,7 @@
 
 #define SET_BITS(var, bits)    ((var) |= (bits))
 #define CLEAR_BITS(var, bits)  ((var) &= ~(bits))
+#define GOT_BITS(var, bits)     (((var) & (bits)) != 0)
 
 /* "sock" + a pointer in hex + \0 */
 #define SOCK_CHAN_LENGTH        (4 + sizeof(void *) * 2 + 1)
@@ -117,8 +118,7 @@ struct TcpState {
  * Static routines for this file:
  */
 
-static int             TcpConnect(Tcl_Interp *interp,
-                                           TcpState *state);
+static int             TcpConnect(Tcl_Interp *interp, TcpState *state);
 static void            TcpAccept(ClientData data, int mask);
 static int             TcpBlockModeProc(ClientData data, int mode);
 static int             TcpCloseProc(ClientData instanceData,
@@ -173,21 +173,24 @@ static ProcessGlobalValue hostName =
 \f
 #if 0
 /* printf debugging */
-void printaddrinfo(struct addrinfo *addrlist, char *prefix)
+void
+printaddrinfo(
+    struct addrinfo *addrlist,
+    char *prefix)
 {
     char host[NI_MAXHOST], port[NI_MAXSERV];
     struct addrinfo *ai;
+
     for (ai = addrlist; ai != NULL; ai = ai->ai_next) {
        getnameinfo(ai->ai_addr, ai->ai_addrlen,
-                   host, sizeof(host),
-                   port, sizeof(port),
-                   NI_NUMERICHOST|NI_NUMERICSERV);
+               host, sizeof(host), port, sizeof(port),
+               NI_NUMERICHOST|NI_NUMERICSERV);
        fprintf(stderr,"%s: %s:%s\n", prefix, host, port);
     }
 }
 #endif
 /*
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  *
  * InitializeHostName --
  *
@@ -197,7 +200,7 @@ void printaddrinfo(struct addrinfo *addrlist, char *prefix)
  * Results:
  *     None.
  *
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  */
 
 static void
@@ -271,12 +274,12 @@ InitializeHostName(
 
     *encodingPtr = Tcl_GetEncoding(NULL, NULL);
     *lengthPtr = strlen(native);
-    *valuePtr = ckalloc((*lengthPtr) + 1);
-    memcpy(*valuePtr, native, (size_t)(*lengthPtr)+1);
+    *valuePtr = ckalloc(*lengthPtr + 1);
+    memcpy(*valuePtr, native, (size_t)(*lengthPtr) + 1);
 }
 \f
 /*
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  *
  * Tcl_GetHostName --
  *
@@ -290,7 +293,7 @@ InitializeHostName(
  * Side effects:
  *     Caches the name to return for future calls.
  *
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  */
 
 const char *
@@ -300,7 +303,7 @@ Tcl_GetHostName(void)
 }
 \f
 /*
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  *
  * TclpHasSockets --
  *
@@ -312,7 +315,7 @@ Tcl_GetHostName(void)
  * Side effects:
  *     None.
  *
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  */
 
 int
@@ -323,7 +326,7 @@ TclpHasSockets(
 }
 \f
 /*
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  *
  * TclpFinalizeSockets --
  *
@@ -335,7 +338,7 @@ TclpHasSockets(
  * Side effects:
  *     None.
  *
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  */
 
 void
@@ -345,7 +348,7 @@ TclpFinalizeSockets(void)
 }
 \f
 /*
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  *
  * TcpBlockModeProc --
  *
@@ -358,7 +361,7 @@ TclpFinalizeSockets(void)
  * Side effects:
  *     Sets the device into blocking or nonblocking mode.
  *
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  */
 
        /* ARGSUSED */
@@ -376,7 +379,7 @@ TcpBlockModeProc(
     } else {
        SET_BITS(statePtr->flags, TCP_NONBLOCKING);
     }
-    if (statePtr->flags & TCP_ASYNC_CONNECT) {
+    if (GOT_BITS(statePtr->flags, TCP_ASYNC_CONNECT)) {
         statePtr->cachedBlocking = mode;
         return 0;
     }
@@ -387,33 +390,32 @@ TcpBlockModeProc(
 }
 \f
 /*
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  *
  * WaitForConnect --
  *
- *     Check the state of an async connect process. If a connection
- *     attempt terminated, process it, which may finalize it or may
- *     start the next attempt. If a connect error occures, it is saved
- *     in statePtr->connectError to be reported by 'fconfigure -error'.
+ *     Check the state of an async connect process. If a connection attempt
+ *     terminated, process it, which may finalize it or may start the next
+ *     attempt. If a connect error occures, it is saved in
+ *     statePtr->connectError to be reported by 'fconfigure -error'.
  *
  *     There are two modes of operation, defined by errorCodePtr:
- *      *  non-NULL: Called by explicite read/write command. block if
+ *      *  non-NULL: Called by explicite read/write command. Blocks if the
  *         socket is blocking.
  *         May return two error codes:
  *          *  EWOULDBLOCK: if connect is still in progress
- *          *  ENOTCONN: if connect failed. This would be the error
- *             message of a rect or sendto syscall so this is
- *             emulated here.
- *      *  NULL: Called by a backround operation. Do not block and
- *         don't return any error code.
+ *          *  ENOTCONN: if connect failed. This would be the error message
+ *             of a rect or sendto syscall so this is emulated here.
+ *      *  NULL: Called by a backround operation. Do not block and do not
+ *         return any error code.
  *
  * Results:
- *     0 if the connection has completed, -1 if still in progress
- *     or there is an error.
+ *     0 if the connection has completed, -1 if still in progress or there is
+ *     an error.
  *
  * Side effects:
- *     Processes socket events off the system queue.
- *     May process asynchroneous connect.
+ *     Processes socket events off the system queue. May process
+ *     asynchroneous connects.
  *
  *----------------------------------------------------------------------
  */
@@ -426,11 +428,11 @@ WaitForConnect(
     int timeout;
 
     /*
-     * Check if an async connect failed already and error reporting is demanded,
-     * return the error ENOTCONN
+     * Check if an async connect failed already and error reporting is
+     * demanded, return the error ENOTCONN
      */
 
-    if (errorCodePtr != NULL && (statePtr->flags & TCP_ASYNC_FAILED)) {
+    if (errorCodePtr != NULL && GOT_BITS(statePtr->flags, TCP_ASYNC_FAILED)) {
        *errorCodePtr = ENOTCONN;
        return -1;
     }
@@ -439,26 +441,29 @@ WaitForConnect(
      * Check if an async connect is running. If not return ok
      */
 
-    if (!(statePtr->flags & TCP_ASYNC_PENDING)) {
+    if (!GOT_BITS(statePtr->flags, TCP_ASYNC_PENDING)) {
        return 0;
     }
 
-    if (errorCodePtr == NULL || (statePtr->flags & TCP_NONBLOCKING)) {
+    if (errorCodePtr == NULL || GOT_BITS(statePtr->flags, TCP_NONBLOCKING)) {
         timeout = 0;
     } else {
         timeout = -1;
     }
     do {
         if (TclUnixWaitForFile(statePtr->fds.fd,
-                                TCL_WRITABLE | TCL_EXCEPTION, timeout) != 0) {
+                TCL_WRITABLE | TCL_EXCEPTION, timeout) != 0) {
             TcpConnect(NULL, statePtr);
         }
-        /* Do this only once in the nonblocking case and repeat it until the
-         * socket is final when blocking */
-    } while (timeout == -1 && statePtr->flags & TCP_ASYNC_CONNECT);
+
+        /*
+         * Do this only once in the nonblocking case and repeat it until the
+         * socket is final when blocking.
+         */
+    } while (timeout == -1 && GOT_BITS(statePtr->flags, TCP_ASYNC_CONNECT));
 
     if (errorCodePtr != NULL) {
-        if (statePtr->flags & TCP_ASYNC_PENDING) {
+        if (GOT_BITS(statePtr->flags, TCP_ASYNC_PENDING)) {
             *errorCodePtr = EAGAIN;
             return -1;
         } else if (statePtr->connectError != 0) {
@@ -615,7 +620,8 @@ TcpCloseProc(
     fds = statePtr->fds.next;
     while (fds != NULL) {
        TcpFdList *next = fds->next;
-        ckfree(fds);
+
+       ckfree(fds);
        fds = next;
     }
     if (statePtr->addrlist != NULL) {
@@ -685,10 +691,9 @@ TcpClose2Proc(
  *
  * TcpHostPortList --
  *
- *     This function is called by the -gethostname and -getpeername
- *     switches of TcpGetOptionProc() to add three list elements
- *     with the textual representation of the given address to the
- *     given DString.
+ *     This function is called by the -gethostname and -getpeername switches
+ *     of TcpGetOptionProc() to add three list elements with the textual
+ *     representation of the given address to the given DString.
  *
  * Results:
  *     None.
@@ -700,6 +705,10 @@ TcpClose2Proc(
  */
 
 #ifndef NEED_FAKE_RFC2553
+#if defined (__clang__) || ((__GNUC__)  && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#endif
 static inline int
 IPv6AddressNeedsNumericRendering(
     struct in6_addr addr)
@@ -713,16 +722,16 @@ IPv6AddressNeedsNumericRendering(
      * at least some versions of OSX.
      */
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wstrict-aliasing"
     if (!IN6_IS_ADDR_V4MAPPED(&addr)) {
-#pragma GCC diagnostic pop
         return 0;
     }
 
     return (addr.s6_addr[12] == 0 && addr.s6_addr[13] == 0
             && addr.s6_addr[14] == 0 && addr.s6_addr[15] == 0);
 }
+#if defined (__clang__) || ((__GNUC__)  && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
+#pragma GCC diagnostic pop
+#endif
 #endif /* NEED_FAKE_RFC2553 */
 
 static void
@@ -736,14 +745,15 @@ TcpHostPortList(
     char host[NI_MAXHOST], nhost[NI_MAXHOST], nport[NI_MAXSERV];
     int flags = 0;
 
-    getnameinfo(&addr.sa, salen,
-                nhost, sizeof(nhost), nport, sizeof(nport),
-                NI_NUMERICHOST | NI_NUMERICSERV);
+    getnameinfo(&addr.sa, salen, nhost, sizeof(nhost), nport, sizeof(nport),
+            NI_NUMERICHOST | NI_NUMERICSERV);
     Tcl_DStringAppendElement(dsPtr, nhost);
+
     /*
-     * We don't want to resolve INADDR_ANY and sin6addr_any; they
-     * can sometimes cause problems (and never have a name).
+     * We don't want to resolve INADDR_ANY and sin6addr_any; they can
+     * sometimes cause problems (and never have a name).
      */
+
     if (addr.sa.sa_family == AF_INET) {
         if (addr.sa4.sin_addr.s_addr == INADDR_ANY) {
             flags |= NI_NUMERICHOST;
@@ -755,15 +765,27 @@ TcpHostPortList(
         }
 #endif /* NEED_FAKE_RFC2553 */
     }
-    /* Check if reverse DNS has been switched off globally */
-    if (interp != NULL && Tcl_GetVar(interp, SUPPRESS_RDNS_VAR, 0) != NULL) {
+
+    /*
+     * Check if reverse DNS has been switched off globally.
+     */
+
+    if (interp != NULL &&
+            Tcl_GetVar2(interp, SUPPRESS_RDNS_VAR, NULL, 0) != NULL) {
         flags |= NI_NUMERICHOST;
     }
-    if (getnameinfo(&addr.sa, salen, host, sizeof(host), NULL, 0, flags) == 0) {
-        /* Reverse mapping worked */
+    if (getnameinfo(&addr.sa, salen, host, sizeof(host), NULL, 0,
+            flags) == 0) {
+        /*
+         * Reverse mapping worked.
+         */
+
         Tcl_DStringAppendElement(dsPtr, host);
     } else {
-        /* Reverse mappong failed - use the numeric rep once more */
+        /*
+         * Reverse mapping failed - use the numeric rep once more.
+         */
+
         Tcl_DStringAppendElement(dsPtr, nhost);
     }
     Tcl_DStringAppendElement(dsPtr, nport);
@@ -813,16 +835,20 @@ TcpGetOptionProc(
            (strncmp(optionName, "-error", len) == 0)) {
        socklen_t optlen = sizeof(int);
 
-        if (statePtr->flags & TCP_ASYNC_CONNECT) {
-            /* Suppress errors as long as we are not done */
+        if (GOT_BITS(statePtr->flags, TCP_ASYNC_CONNECT)) {
+            /*
+             * Suppress errors as long as we are not done.
+             */
+
             errno = 0;
         } else if (statePtr->connectError != 0) {
             errno = statePtr->connectError;
             statePtr->connectError = 0;
         } else {
             int err;
-            getsockopt(statePtr->fds.fd, SOL_SOCKET, SO_ERROR,
-                    (char *) &err, &optlen);
+
+            getsockopt(statePtr->fds.fd, SOL_SOCKET, SO_ERROR, (char *) &err,
+                    &optlen);
             errno = err;
         }
         if (errno != 0) {
@@ -833,9 +859,8 @@ TcpGetOptionProc(
 
     if ((len > 1) && (optionName[1] == 'c') &&
            (strncmp(optionName, "-connecting", len) == 0)) {
-
         Tcl_DStringAppend(dsPtr,
-                        (statePtr->flags & TCP_ASYNC_CONNECT) ? "1" : "0", -1);
+                GOT_BITS(statePtr->flags, TCP_ASYNC_CONNECT) ? "1" : "0", -1);
         return TCL_OK;
     }
 
@@ -844,10 +869,11 @@ TcpGetOptionProc(
         address peername;
         socklen_t size = sizeof(peername);
 
-       if ( (statePtr->flags & TCP_ASYNC_CONNECT) ) {
+       if (GOT_BITS(statePtr->flags, TCP_ASYNC_CONNECT)) {
            /*
             * In async connect output an empty string
             */
+
            if (len == 0) {
                Tcl_DStringAppendElement(dsPtr, "-peername");
                Tcl_DStringAppendElement(dsPtr, "");
@@ -858,6 +884,7 @@ TcpGetOptionProc(
            /*
             * Peername fetch succeeded - output list
             */
+
            if (len == 0) {
                Tcl_DStringAppendElement(dsPtr, "-peername");
                Tcl_DStringStartSublist(dsPtr);
@@ -897,11 +924,12 @@ TcpGetOptionProc(
            Tcl_DStringAppendElement(dsPtr, "-sockname");
            Tcl_DStringStartSublist(dsPtr);
        }
-       if ( (statePtr->flags & TCP_ASYNC_CONNECT) ) {
+       if (GOT_BITS(statePtr->flags, TCP_ASYNC_CONNECT)) {
            /*
             * In async connect output an empty string
             */
-            found = 1;
+
+            found = 1;
        } else {
            for (fds = &statePtr->fds; fds != NULL; fds = fds->next) {
                size = sizeof(sockname);
@@ -926,14 +954,15 @@ TcpGetOptionProc(
     }
 
     if (len > 0) {
-       return Tcl_BadChannelOption(interp, optionName, "connecting peername sockname");
+       return Tcl_BadChannelOption(interp, optionName,
+                "connecting peername sockname");
     }
 
     return TCL_OK;
 }
 \f
 /*
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  *
  * TcpWatchProc --
  *
@@ -946,7 +975,7 @@ TcpGetOptionProc(
  *     Sets up the notifier so that a future event on the channel will be
  *     seen by Tcl.
  *
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  */
 
 static void
@@ -959,17 +988,17 @@ WrapNotify(
 
     if (newmask == 0) {
        /*
-        * There was no overlap between the states the channel is
-        * interested in notifications for, and the states that are
-        * reported present on the file descriptor by select().  The
-        * only way that can happen is when the channel is interested
-        * in a writable condition, and only a readable state is reported
-        * present (see TcpWatchProc() below).  In that case, signal back
-        * to the caller the writable state, which is really an error
-        * condition.  As an extra check on that assumption, check for
-        * a non-zero value of errno before reporting an artificial
+        * There was no overlap between the states the channel is interested
+        * in notifications for, and the states that are reported present on
+        * the file descriptor by select().  The only way that can happen is
+        * when the channel is interested in a writable condition, and only a
+        * readable state is reported present (see TcpWatchProc() below).  In
+        * that case, signal back to the caller the writable state, which is
+        * really an error condition.  As an extra check on that assumption,
+        * check for a non-zero value of errno before reporting an artificial
         * writable state.
         */
+
        if (errno == 0) {
            return;
        }
@@ -993,33 +1022,36 @@ TcpWatchProc(
          * be readable or writable at the Tcl level. This keeps Tcl scripts
          * from interfering with the -accept behavior (bug #3394732).
          */
+
        return;
     }
 
-    if (statePtr->flags & TCP_ASYNC_PENDING) {
-        /* Async sockets use a FileHandler internally while connecting, so we
-         * need to cache this request until the connection has succeeded. */
+    if (GOT_BITS(statePtr->flags, TCP_ASYNC_PENDING)) {
+        /*
+         * Async sockets use a FileHandler internally while connecting, so we
+         * need to cache this request until the connection has succeeded.
+         */
+
         statePtr->filehandlers = mask;
     } else if (mask) {
 
        /*
-        * Whether it is a bug or feature or otherwise, it is a fact
-        * of life that on at least some Linux kernels select() fails
-        * to report that a socket file descriptor is writable when
-        * the other end of the socket is closed.  This is in contrast
-        * to the guarantees Tcl makes that its channels become
-        * writable and fire writable events on an error conditon.
-        * This has caused a leak of file descriptors in a state of
+        * Whether it is a bug or feature or otherwise, it is a fact of life
+        * that on at least some Linux kernels select() fails to report that a
+        * socket file descriptor is writable when the other end of the socket
+        * is closed.  This is in contrast to the guarantees Tcl makes that
+        * its channels become writable and fire writable events on an error
+        * conditon.  This has caused a leak of file descriptors in a state of
         * background flushing.  See Tcl ticket 1758a0b603.
         *
-        * As a workaround, when our caller indicates an interest in
-        * writable notifications, we must tell the notifier built
-        * around select() that we are interested in the readable state
-        * of the file descriptor as well, as that is the only reliable
-        * means to get notified of error conditions.  Then it is the
-        * task of WrapNotify() above to untangle the meaning of these
-        * channel states and report the chan events as best it can.
-        * We save a copy of the mask passed in to assist with that.
+        * As a workaround, when our caller indicates an interest in writable
+        * notifications, we must tell the notifier built around select() that
+        * we are interested in the readable state of the file descriptor as
+        * well, as that is the only reliable means to get notified of error
+        * conditions.  Then it is the task of WrapNotify() above to untangle
+        * the meaning of these channel states and report the chan events as
+        * best it can.  We save a copy of the mask passed in to assist with
+        * that.
         */
 
        statePtr->interest = mask;
@@ -1031,7 +1063,7 @@ TcpWatchProc(
 }
 \f
 /*
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  *
  * TcpGetHandleProc --
  *
@@ -1045,7 +1077,7 @@ TcpWatchProc(
  * Side effects:
  *     None.
  *
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  */
 
        /* ARGSUSED */
@@ -1062,16 +1094,17 @@ TcpGetHandleProc(
 }
 \f
 /*
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  *
  * TcpAsyncCallback --
  *
- *     Called by the event handler that TcpConnect sets up
- *     internally for [socket -async] to get notified when the
- *     asyncronous connection attempt has succeeded or failed.
+ *     Called by the event handler that TcpConnect sets up internally for
+ *     [socket -async] to get notified when the asyncronous connection
+ *     attempt has succeeded or failed.
  *
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  */
+
 static void
 TcpAsyncCallback(
     ClientData clientData,     /* The socket state. */
@@ -1083,7 +1116,7 @@ TcpAsyncCallback(
 }
 \f
 /*
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  *
  * TcpConnect --
  *
@@ -1109,7 +1142,7 @@ TcpAsyncCallback(
  *     return and the loops resume as if they had never been interrupted.
  *     For syncronously connecting sockets, the loops work the usual way.
  *
- *----------------------------------------------------------------------
+ * ----------------------------------------------------------------------
  */
 
 static int
@@ -1118,9 +1151,9 @@ TcpConnect(
     TcpState *statePtr)
 {
     socklen_t optlen;
-    int async_callback = statePtr->flags & TCP_ASYNC_PENDING;
+    int async_callback = GOT_BITS(statePtr->flags, TCP_ASYNC_PENDING);
     int ret = -1, error = EHOSTUNREACH;
-    int async = statePtr->flags & TCP_ASYNC_CONNECT;
+    int async = GOT_BITS(statePtr->flags, TCP_ASYNC_CONNECT);
 
     if (async_callback) {
         goto reenter;
@@ -1128,8 +1161,8 @@ TcpConnect(
 
     for (statePtr->addr = statePtr->addrlist; statePtr->addr != NULL;
             statePtr->addr = statePtr->addr->ai_next) {
-
-        for (statePtr->myaddr = statePtr->myaddrlist; statePtr->myaddr != NULL;
+        for (statePtr->myaddr = statePtr->myaddrlist;
+                statePtr->myaddr != NULL;
                 statePtr->myaddr = statePtr->myaddr->ai_next) {
             int reuseaddr = 1;
 
@@ -1153,7 +1186,8 @@ TcpConnect(
                 errno = 0;
            }
 
-           statePtr->fds.fd = socket(statePtr->addr->ai_family, SOCK_STREAM, 0);
+           statePtr->fds.fd = socket(statePtr->addr->ai_family, SOCK_STREAM,
+                    0);
            if (statePtr->fds.fd < 0) {
                continue;
            }
@@ -1172,14 +1206,18 @@ TcpConnect(
            TclSockMinimumBuffers(INT2PTR(statePtr->fds.fd), SOCKET_BUFSIZE);
 
            if (async) {
-                ret = TclUnixSetBlockingMode(statePtr->fds.fd,TCL_MODE_NONBLOCKING);
+                ret = TclUnixSetBlockingMode(statePtr->fds.fd,
+                        TCL_MODE_NONBLOCKING);
                 if (ret < 0) {
                     continue;
                 }
             }
 
-            /* Gotta reset the error variable here, before we use it for the
-             * first time in this iteration. */
+            /*
+             * Must reset the error variable here, before we use it for the
+             * first time in this iteration.
+             */
+
             error = 0;
 
             (void) setsockopt(statePtr->fds.fd, SOL_SOCKET, SO_REUSEADDR,
@@ -1200,10 +1238,13 @@ TcpConnect(
 
            ret = connect(statePtr->fds.fd, statePtr->addr->ai_addr,
                         statePtr->addr->ai_addrlen);
-            if (ret < 0) error = errno;
+            if (ret < 0) {
+                error = errno;
+            }
            if (ret < 0 && errno == EINPROGRESS) {
                 Tcl_CreateFileHandler(statePtr->fds.fd,
-                        TCL_WRITABLE|TCL_EXCEPTION, TcpAsyncCallback, statePtr);
+                        TCL_WRITABLE | TCL_EXCEPTION, TcpAsyncCallback,
+                        statePtr);
                 errno = EWOULDBLOCK;
                 SET_BITS(statePtr->flags, TCP_ASYNC_PENDING);
                 return TCL_OK;
@@ -1231,7 +1272,7 @@ TcpConnect(
        }
     }
 
-out:
+  out:
     statePtr->connectError = error;
     CLEAR_BITS(statePtr->flags, TCP_ASYNC_CONNECT);
     if (async_callback) {
@@ -1329,6 +1370,7 @@ Tcl_OpenTcpClient(
     /*
      * Allocate a new TcpState for this socket.
      */
+
     statePtr = ckalloc(sizeof(TcpState));
     memset(statePtr, 0, sizeof(TcpState));
     statePtr->flags = async ? TCP_ASYNC_CONNECT : 0;
@@ -1340,6 +1382,7 @@ Tcl_OpenTcpClient(
     /*
      * Create a new client socket and wrap it in a channel.
      */
+
     if (TcpConnect(interp, statePtr) != TCL_OK) {
         TcpCloseProc(statePtr, NULL);
         return NULL;
@@ -1347,8 +1390,8 @@ Tcl_OpenTcpClient(
 
     sprintf(channelName, SOCK_TEMPLATE, (long) statePtr);
 
-    statePtr->channel = Tcl_CreateChannel(&tcpChannelType, channelName, statePtr,
-            (TCL_READABLE | TCL_WRITABLE));
+    statePtr->channel = Tcl_CreateChannel(&tcpChannelType, channelName,
+            statePtr, TCL_READABLE | TCL_WRITABLE);
     if (Tcl_SetChannelOption(interp, statePtr->channel, "-translation",
            "auto crlf") == TCL_ERROR) {
        Tcl_Close(NULL, statePtr->channel);
@@ -1377,7 +1420,8 @@ Tcl_Channel
 Tcl_MakeTcpClientChannel(
     ClientData sock)           /* The socket to wrap up into a channel. */
 {
-    return (Tcl_Channel) TclpMakeTcpClientChannelMode(sock, (TCL_READABLE | TCL_WRITABLE));
+    return (Tcl_Channel) TclpMakeTcpClientChannelMode(sock,
+            TCL_READABLE | TCL_WRITABLE);
 }
 \f
 /*
@@ -1516,7 +1560,10 @@ Tcl_OpenTcpServer(
        }
 
 #ifdef IPV6_V6ONLY
-       /* Missing on: Solaris 2.8 */
+       /*
+         * Missing on: Solaris 2.8
+         */
+
         if (addrPtr->ai_family == AF_INET6) {
             int v6only = 1;
 
@@ -1662,7 +1709,7 @@ TcpAccept(
 
     sprintf(channelName, SOCK_TEMPLATE, (long) newSockState);
     newSockState->channel = Tcl_CreateChannel(&tcpChannelType, channelName,
-           newSockState, (TCL_READABLE | TCL_WRITABLE));
+           newSockState, TCL_READABLE | TCL_WRITABLE);
 
     Tcl_SetChannelOption(NULL, newSockState->channel, "-translation",
            "auto crlf");
index c62a3c7..633a9f5 100644 (file)
@@ -651,8 +651,8 @@ install-libraries: libraries install-tzdata install-msgs
            do \
            $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/http1.0"; \
            done;
-       @echo "Installing package http 2.8.11 as a Tcl Module";
-       @$(COPY) $(ROOT_DIR)/library/http/http.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.6/http-2.8.11.tm;
+       @echo "Installing package http 2.8.12 as a Tcl Module";
+       @$(COPY) $(ROOT_DIR)/library/http/http.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.6/http-2.8.12.tm;
        @echo "Installing library opt0.4 directory";
        @for j in $(ROOT_DIR)/library/opt/*.tcl; \
            do \
index 1480a57..be38dc3 100755 (executable)
@@ -1311,7 +1311,7 @@ SHELL=/bin/sh
 TCL_VERSION=8.6
 TCL_MAJOR_VERSION=8
 TCL_MINOR_VERSION=6
-TCL_PATCH_LEVEL=".7"
+TCL_PATCH_LEVEL=".8"
 VER=$TCL_MAJOR_VERSION$TCL_MINOR_VERSION
 
 TCL_DDE_VERSION=1.4
@@ -5271,6 +5271,7 @@ TCL_WIN_VERSION="$TCL_VERSION.$TCL_RELEASE_LEVEL.`echo $TCL_PATCH_LEVEL | tr -d
 
 
 
+
 # win only
 
 
index 0229e83..5fc17a3 100644 (file)
@@ -14,7 +14,7 @@ SHELL=/bin/sh
 TCL_VERSION=8.6
 TCL_MAJOR_VERSION=8
 TCL_MINOR_VERSION=6
-TCL_PATCH_LEVEL=".7"
+TCL_PATCH_LEVEL=".8"
 VER=$TCL_MAJOR_VERSION$TCL_MINOR_VERSION
 
 TCL_DDE_VERSION=1.4
index ada08cc..ff31e96 100644 (file)
@@ -1,7 +1,6 @@
-#-------------------------------------------------------------\r
-# makefile.vc --\r
+#------------------------------------------------------------- -*- makefile -*-\r
 #\r
-#      Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)\r
+#      Microsoft Visual C++ makefile for building Tcl with nmake\r
 #\r
 # See the file "license.terms" for information on usage and redistribution\r
 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
 # Copyright (c) 2001-2005 ActiveState Corporation.\r
 # Copyright (c) 2001-2004 David Gravereaux.\r
 # Copyright (c) 2003-2008 Pat Thoyts.\r
+# Copyright (c) 2017 Ashok P. Nadkarni\r
 #------------------------------------------------------------------------------\r
 \r
-# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or\r
-# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)\r
-!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)\r
-MSG = ^\r
-You need to run vcvars32.bat from Developer Studio or setenv.bat from the^\r
-Platform SDK first to setup the environment.  Jump to this line to read^\r
-the build instructions.\r
-!error $(MSG)\r
-!endif\r
-\r
-#------------------------------------------------------------------------------\r
-# HOW TO USE this makefile:\r
-#\r
-# 1)  It is now necessary to have MSVCDir, MSDevDir or MSSDK set in the\r
-#     environment.  This is used as a check to see if vcvars32.bat had been\r
-#     run prior to running nmake or during the installation of Microsoft\r
-#     Visual C++, MSVCDir had been set globally and the PATH adjusted.\r
-#     Either way is valid.\r
+# General usage:\r
+#   nmake [-nologo] -f makefile.vc [TARGET|MACRODEF [TARGET|MACRODEF] [...]]\r
 #\r
-#     You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin\r
-#     directory to setup the proper environment, if needed, for your\r
-#     current setup.  This is a needed bootstrap requirement and allows the\r
-#     swapping of different environments to be easier.\r
+# For MACRODEF, see TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md)\r
+# or examine Sections 6-8 in rules.vc.\r
 #\r
-# 2)  To use the Platform SDK (not expressly needed), run setenv.bat after\r
-#     vcvars32.bat according to the instructions for it.  This can also\r
-#     turn on the 64-bit compiler, if your SDK has it.\r
-#\r
-# 3)  Targets are:\r
+# Possible values of TARGET are:\r
 #      release  -- Builds the core, the shell and the dlls. (default)\r
 #      dlls     -- Just builds the windows extensions\r
 #      shell    -- Just builds the shell and the core.\r
@@ -61,154 +39,83 @@ the build instructions.
 #                  troff manual pages found in $(ROOT)\doc. You need to\r
 #                  have installed the HTML Help Compiler package from Microsoft\r
 #                  to produce the .chm file.\r
-#      winhelp  -- (deprecated) Builds the windows .hlp file for Tcl from\r
-#                  the troff man files found in $(ROOT)\doc. This type of\r
-#                  help file is deprecated by Microsoft in favour of html\r
-#                  help files (.chm)\r
-#\r
-# 4)  Macros usable on the commandline:\r
-#      INSTALLDIR=<path>\r
-#              Sets where to install Tcl from the built binaries.\r
-#              C:\Progra~1\Tcl is assumed when not specified.\r
-#\r
-#      OPTS=loimpact,msvcrt,nothreads,pdbs,profile,static,staticpkg,symbols,thrdalloc,tclalloc,unchecked,none\r
-#              Sets special options for the core.  The default is for none.\r
-#              Any combination of the above may be used (comma separated).\r
-#              'none' will over-ride everything to nothing.\r
-#\r
-#              loimpact = Adds a flag for how NT treats the heap to keep memory\r
-#                         in use, low.  This is said to impact alloc performance.\r
-#              msvcrt   = Affects the static option only to switch it from\r
-#                         using libcmt(d) as the C runtime [by default] to\r
-#                         msvcrt(d). This is useful for static embedding\r
-#                         support.\r
-#              nothreads= Turns off full multithreading support.\r
-#              pdbs     = Build detached symbols for release builds.\r
-#              profile  = Adds profiling hooks.  Map file is assumed.\r
-#              static   = Builds a static library of the core instead of a\r
-#                         dll.  The static library will contain the dde and reg\r
-#                         extensions. External applications who want to use\r
-#                         this, need to link with the stub library as well as\r
-#                         the static Tcl library.The shell will be static (and\r
-#                         large), as well.\r
-#              staticpkg = Affects the static option only to switch\r
-#                         tclshXX.exe to have the dde and reg extension linked\r
-#                         inside it.\r
-#              symbols  = Debug build. Links to the debug C runtime, disables\r
-#                         optimizations and creates pdb symbols files.\r
-#              thrdalloc = Use the thread allocator (shared global free pool)\r
-#                         This is the default on threaded builds.\r
-#              tclalloc = Use the old non-thread allocator\r
-#              unchecked= Allows a symbols build to not use the debug\r
-#                         enabled runtime (msvcrt.dll not msvcrtd.dll\r
-#                         or libcmt.lib not libcmtd.lib).\r
-#\r
-#      STATS=compdbg,memdbg,none\r
-#              Sets optional memory and bytecode compiler debugging code added\r
-#              to the core.  The default is for none.  Any combination of the\r
-#              above may be used (comma separated).  'none' will over-ride\r
-#              everything to nothing.\r
-#\r
-#              compdbg  = Enables byte compilation logging.\r
-#              memdbg   = Enables the debugging memory allocator.\r
-#\r
-#      CHECKS=64bit,fullwarn,nodep,none\r
-#              Sets special macros for checking compatibility.\r
-#\r
-#              64bit    = Enable 64bit portability warnings (if available)\r
-#              fullwarn = Builds with full compiler and link warnings enabled.\r
-#                          Very verbose.\r
-#              nodep    = Turns off compatibility macros to ensure the core\r
-#                          isn't being built with deprecated functions.\r
-#\r
-#      MACHINE=(ALPHA|AMD64|IA64|IX86)\r
-#              Set the machine type used for the compiler, linker, and\r
-#              resource compiler.  This hook is needed to tell the tools\r
-#              when alternate platforms are requested.  IX86 is the default\r
-#              when not specified. If the CPU environment variable has been\r
-#              set (ie: recent Platform SDK) then MACHINE is set from CPU.\r
-#\r
-#      TMP_DIR=<path>\r
-#      OUT_DIR=<path>\r
-#              Hooks to allow the intermediate and output directories to be\r
-#              changed.  $(OUT_DIR) is assumed to be\r
-#              $(BINROOT)\(Release|Debug) based on if symbols are requested.\r
-#              $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default.\r
-#\r
-#      TESTPAT=<file>\r
-#              Reads the tests requested to be run from this file.\r
-#\r
-#      CFG_ENCODING=encoding\r
-#              name of encoding for configuration information. Defaults\r
-#              to cp1252\r
 #\r
-# 5)  Examples:\r
+# The steps to setup a Visual C++ environment depend on which\r
+# version of Visual Studio and/or the Windows SDK you are building\r
+# against and are not described here. The simplest method is generally\r
+# to start a command shell using one of the short cuts installed by\r
+# Visual Studio/Windows SDK for the appropriate target architecture.\r
 #\r
-#      Basic syntax of calling nmake looks like this:\r
-#      nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]]\r
+# NOTE: For older (Visual C++ 6 or the 2003 SDK), to use the Platform\r
+# SDK (not expressly needed), run setenv.bat after\r
+# vcvars32.bat according to the instructions for it.  This can also\r
+# turn on the 64-bit compiler, if your SDK has it.\r
 #\r
-#                        Standard (no frills)\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
+# Examples:\r
 #       c:\tcl_src\win\>nmake -f makefile.vc release\r
+#       c:\tcl_src\win\>nmake -f makefile.vc test\r
 #       c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl\r
+#       c:\tcl_src\win\>nmake -f makefile.vc release OPTS=pdbs \r
+#       c:\tcl_src\win\>nmake -f makefile.vc release OPTS=symbols\r
 #\r
-#                         Building for Win64\r
-#       c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat\r
-#       Setting environment for using Microsoft Visual C++ tools.\r
-#       c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL\r
-#       Targeting Windows pre64 RETAIL\r
-#       c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64\r
-#\r
-#------------------------------------------------------------------------------\r
-#==============================================================================\r
-###############################################################################\r
 \r
+# NOTE:\r
+# Before modifying this file, check whether the modification is applicable\r
+# to building extensions as well and if so, modify rules.vc instead.\r
 \r
-#    //==================================================================\\\r
-#   >>[               -> Do not modify below this line. <-               ]<<\r
-#   >>[  Please, use the commandline macros to modify how Tcl is built.  ]<<\r
-#   >>[  If you need more features, send us a patch for more macros.     ]<<\r
-#    \\==================================================================//\r
-\r
+# The PROJECT macro is used by rules.vc for generating appropriate\r
+# macros and rules.\r
+PROJECT = tcl\r
 \r
-###############################################################################\r
-#==============================================================================\r
-#------------------------------------------------------------------------------\r
+# Default target to build if no target is specified. If unspecified, the\r
+# rules.vc file will set up "all" as the target.\r
+DEFAULT_BUILD_TARGET = release\r
 \r
-!if !exist("makefile.vc")\r
-MSG = ^\r
-You must run this makefile only from the directory it is in.^\r
-Please `cd` to its location first.\r
-!error $(MSG)\r
-!endif\r
+# We want to use our own resource file, not the standard template one.\r
+RCFILE = tcl.rc\r
 \r
-PROJECT = tcl\r
+# The rules.vc file does most of the hard work in terms of defining\r
+# the build configuration, macros, output directories etc.\r
 !include "rules.vc"\r
 \r
-STUBPREFIX      = $(PROJECT)stub\r
+# Tcl version info based on macros set up by rules.vc\r
 DOTVERSION      = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)\r
 VERSION         = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)\r
 \r
+# We need versions of various core packages to generate appropriate\r
+# file names during installation.\r
+!if [echo REM = This file is generated from makefile.vc > versions.vc]\r
+!endif\r
+!if [echo PKG_HTTP_VER = \>> versions.vc] \\r
+   && [nmakehlp -V ..\library\http\pkgIndex.tcl http >> versions.vc]\r
+!endif\r
+!if [echo PKG_TCLTEST_VER = \>> versions.vc] \\r
+   && [nmakehlp -V ..\library\tcltest\pkgIndex.tcl tcltest >> versions.vc]\r
+!endif\r
+!if [echo PKG_MSGCAT_VER = \>> versions.vc] \\r
+   && [nmakehlp -V ..\library\msgcat\pkgIndex.tcl msgcat >> versions.vc]\r
+!endif\r
+!if [echo PKG_PLATFORM_VER = \>> versions.vc] \\r
+   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform " >> versions.vc]\r
+!endif\r
+!if [echo PKG_SHELL_VER = \>> versions.vc] \\r
+   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform::shell" >> versions.vc]\r
+!endif\r
+!if [echo PKG_DDE_VER = \>> versions.vc] \\r
+   && [nmakehlp -V ..\library\dde\pkgIndex.tcl "dde " >> versions.vc]\r
+!endif\r
+!if [echo PKG_REG_VER =\>> versions.vc] \\r
+   && [nmakehlp -V ..\library\reg\pkgIndex.tcl registry >> versions.vc]\r
+!endif\r
+\r
+!include versions.vc\r
+\r
 DDEDOTVERSION = 1.4\r
 DDEVERSION = $(DDEDOTVERSION:.=)\r
 \r
 REGDOTVERSION = 1.3\r
 REGVERSION = $(REGDOTVERSION:.=)\r
 \r
-BINROOT                = $(MAKEDIR)     # originally .\r
-ROOT           = $(MAKEDIR)\..  # originally ..\r
-\r
-TCLIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib\r
-TCLLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)\r
-TCLLIB         = $(OUT_DIR)\$(TCLLIBNAME)\r
-\r
-TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
-TCLSTUBLIB     = $(OUT_DIR)\$(TCLSTUBLIBNAME)\r
-\r
-TCLSHNAME      = $(PROJECT)sh$(VERSION)$(SUFX).exe\r
-TCLSH          = $(OUT_DIR)\$(TCLSHNAME)\r
-\r
 TCLREGLIBNAME  = $(PROJECT)reg$(REGVERSION)$(SUFX:t=).$(EXT)\r
 TCLREGLIB      = $(OUT_DIR)\$(TCLREGLIBNAME)\r
 \r
@@ -218,22 +125,6 @@ TCLDDELIB  = $(OUT_DIR)\$(TCLDDELIBNAME)
 TCLTEST                = $(OUT_DIR)\$(PROJECT)test.exe\r
 CAT32          = $(OUT_DIR)\cat32.exe\r
 \r
-# Can we run what we build? IX86 runs on all architectures.\r
-!ifndef TCLSH_NATIVE\r
-!if "$(MACHINE)" == "IX86" || "$(MACHINE)" == "$(NATIVE_ARCH)"\r
-TCLSH_NATIVE   = $(TCLSH)\r
-!else\r
-!error You must explicitly set TCLSH_NATIVE for cross-compilation\r
-!endif\r
-!endif\r
-\r
-### Make sure we use backslash only.\r
-LIB_INSTALL_DIR                = $(_INSTALLDIR)\lib\r
-BIN_INSTALL_DIR                = $(_INSTALLDIR)\bin\r
-DOC_INSTALL_DIR                = $(_INSTALLDIR)\doc\r
-SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\tcl$(DOTVERSION)\r
-INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\include\r
-\r
 TCLSHOBJS = \\r
        $(TMP_DIR)\tclAppInit.obj \\r
 !if !$(STATIC_BUILD)\r
@@ -454,113 +345,18 @@ TCLSTUBOBJS = \
        $(TMP_DIR)\tclTomMathStubLib.obj \\r
        $(TMP_DIR)\tclOOStubLib.obj\r
 \r
-### The following paths CANNOT have spaces in them.\r
-COMPATDIR      = $(ROOT)\compat\r
-DOCDIR         = $(ROOT)\doc\r
-GENERICDIR     = $(ROOT)\generic\r
+### The following paths CANNOT have spaces in them as they appear on\r
+### the left side of implicit rules.\r
 TOMMATHDIR     = $(ROOT)\libtommath\r
-TOOLSDIR       = $(ROOT)\tools\r
-WINDIR         = $(ROOT)\win\r
 PKGSDIR                = $(ROOT)\pkgs\r
 \r
-#---------------------------------------------------------------------\r
-# Compile flags\r
-#---------------------------------------------------------------------\r
-\r
-!if !$(DEBUG)\r
-!if $(OPTIMIZING)\r
-### This cranks the optimization level to maximize speed\r
-cdebug = -O2 $(OPTIMIZATIONS)\r
-!else\r
-cdebug =\r
-!endif\r
-!if $(SYMBOLS)\r
-cdebug = $(cdebug) -Zi\r
-!endif\r
-!else if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-### Warnings are too many, can't support warnings into errors.\r
-cdebug = -Zi -Od $(DEBUGFLAGS)\r
-!else\r
-cdebug = -Zi -WX $(DEBUGFLAGS)\r
-!endif\r
-\r
-### Declarations common to all compiler options\r
-cwarn = $(WARNINGS) -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE\r
-cflags = -nologo -c $(COMPILERFLAGS) $(cwarn) -Fp$(TMP_DIR)^\\r
-\r
-!if $(MSVCRT)\r
-!if $(DEBUG) && !$(UNCHECKED)\r
-crt = -MDd\r
-!else\r
-crt = -MD\r
-!endif\r
-!else\r
-!if $(DEBUG) && !$(UNCHECKED)\r
-crt = -MTd\r
-!else\r
-crt = -MT\r
-!endif\r
-!endif\r
-\r
-TCL_INCLUDES   = -I"$(WINDIR)" -I"$(GENERICDIR)" -I"$(TOMMATHDIR)"\r
-TCL_DEFINES    = -DTCL_TOMMATH -DMP_PREC=4 -Dinline=__inline -DHAVE_ZLIB=1\r
-BASE_CFLAGS    = $(cflags) $(cdebug) $(crt) $(TCL_INCLUDES) $(TCL_DEFINES)\r
-CON_CFLAGS     = $(cflags) $(cdebug) $(crt) -DCONSOLE\r
-TCL_CFLAGS     = $(BASE_CFLAGS) $(OPTDEFINES)\r
-STUB_CFLAGS     = $(cflags) $(cdebug) $(OPTDEFINES)\r
-\r
-\r
-#---------------------------------------------------------------------\r
-# Link flags\r
-#---------------------------------------------------------------------\r
-\r
-!if $(DEBUG)\r
-ldebug = -debug -debugtype:cv\r
-!else\r
-ldebug = -release -opt:ref -opt:icf,3\r
-!if $(SYMBOLS)\r
-ldebug = $(ldebug) -debug -debugtype:cv\r
-!endif\r
-!endif\r
-\r
-### Declarations common to all linker options\r
-lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)\r
-\r
-!if $(PROFILE)\r
-lflags = $(lflags) -profile\r
-!endif\r
-\r
-!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900\r
-lflags = $(lflags) -nodefaultlib:libucrt.lib\r
-!endif\r
+# Additional include and C macro definitions for the implicit rules\r
+# defined in rules.vc\r
+PRJ_INCLUDES   = -I"$(TOMMATHDIR)"\r
+PRJ_DEFINES    = -DTCL_TOMMATH -DMP_PREC=4 -Dinline=__inline -DHAVE_ZLIB=1 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE\r
 \r
-!if $(ALIGN98_HACK) && !$(STATIC_BUILD)\r
-### Align sections for PE size savings.\r
-lflags = $(lflags) -opt:nowin98\r
-!else if !$(ALIGN98_HACK) && $(STATIC_BUILD)\r
-### Align sections for speed in loading by choosing the virtual page size.\r
-lflags = $(lflags) -align:4096\r
-!endif\r
-\r
-!if $(LOIMPACT)\r
-lflags = $(lflags) -ws:aggressive\r
-!endif\r
-\r
-dlllflags = $(lflags) -dll\r
-conlflags = $(lflags) -subsystem:console\r
-guilflags = $(lflags) -subsystem:windows\r
-\r
-baselibs   = netapi32.lib kernel32.lib user32.lib advapi32.lib userenv.lib ws2_32.lib\r
-# Avoid 'unresolved external symbol __security_cookie' errors.\r
-# c.f. http://support.microsoft.com/?id=894573\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
-!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500\r
-baselibs   = $(baselibs) bufferoverflowU.lib\r
-!endif\r
-!endif\r
-!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900\r
-baselibs   = $(baselibs) ucrt.lib\r
-!endif\r
+# Additional Link libraries needed beyond those in rules.vc\r
+PRJ_LIBS   = netapi32.lib user32.lib userenv.lib ws2_32.lib\r
 \r
 #---------------------------------------------------------------------\r
 # TclTest flags\r
@@ -582,23 +378,15 @@ dlls:         setup $(TCLREGLIB) $(TCLDDELIB)
 all:       setup $(TCLSH) $(TCLSTUBLIB) dlls $(CAT32) pkgs\r
 tcltest:    setup $(TCLTEST) dlls $(CAT32)\r
 install:    install-binaries install-libraries install-docs install-pkgs\r
+setup:      default-setup\r
 \r
 test: test-core test-pkgs\r
 test-core: setup $(TCLTEST) dlls $(CAT32)\r
        set TCL_LIBRARY=$(ROOT:\=/)/library\r
-!if "$(OS)" == "Windows_NT"  || "$(MSVCDIR)" == "IDE"\r
        $(DEBUGGER) $(TCLTEST) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) -loadfile <<\r
                package ifneeded dde 1.4.0 [list load "$(TCLDDELIB:\=/)" dde]\r
                package ifneeded registry 1.3.2 [list load "$(TCLREGLIB:\=/)" registry]\r
 <<\r
-!else\r
-       @echo Please wait while the tests are collected...\r
-       $(TCLTEST) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) -loadfile << > tests.log\r
-               package ifneeded dde 1.4.0 "$(TCLDDELIB:\=/)" dde]\r
-               package ifneeded registry 1.3.2 "$(TCLREGLIB:\=/)" registry]\r
-<<\r
-       type tests.log | more\r
-!endif\r
 \r
 runtest: setup $(TCLTEST) dlls $(CAT32)\r
        set TCL_LIBRARY=$(ROOT:\=/)/library\r
@@ -608,55 +396,51 @@ runshell: setup $(TCLSH) dlls
        set TCL_LIBRARY=$(ROOT:\=/)/library\r
        $(DEBUGGER) $(TCLSH) $(SCRIPT)\r
 \r
-setup:\r
-       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)\r
-       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)\r
-\r
-!if !$(STATIC_BUILD)\r
-$(TCLIMPLIB): $(TCLLIB)\r
-!endif\r
+!if $(STATIC_BUILD)\r
 \r
 $(TCLLIB): $(TCLOBJS)\r
-!if $(STATIC_BUILD)\r
-       $(lib32) -nologo $(LINKERFLAGS) -out:$@ @<<\r
+       $(LIBCMD) @<<\r
 $**\r
 <<\r
+\r
 !else\r
-       $(link32) $(dlllflags) -base:@$(WINDIR)\coffbase.txt,tcl -out:$@ \\r
-               $(baselibs) @<<\r
+\r
+$(TCLLIB): $(TCLOBJS)\r
+       $(DLLCMD) @<<\r
 $**\r
 <<\r
        $(_VC_MANIFEST_EMBED_DLL)\r
-!endif\r
+$(TCLIMPLIB): $(TCLLIB)\r
+\r
+!endif # $(STATIC_BUILD)\r
+\r
 \r
 $(TCLSTUBLIB): $(TCLSTUBOBJS)\r
-       $(lib32) -nologo $(LINKERFLAGS) -nodefaultlib -out:$@ $(TCLSTUBOBJS)\r
+       $(LIBCMD) -nodefaultlib $(TCLSTUBOBJS)\r
 \r
 $(TCLSH): $(TCLSHOBJS) $(TCLSTUBLIB) $(TCLIMPLIB)\r
-       $(link32) $(conlflags) -stack:2300000 -out:$@ $(baselibs) $**\r
+       $(CONEXECMD) -stack:2300000 $**\r
        $(_VC_MANIFEST_EMBED_EXE)\r
 \r
 $(TCLTEST): $(TCLTESTOBJS) $(TCLSTUBLIB) $(TCLIMPLIB)\r
-       $(link32) $(conlflags) -stack:2300000 -out:$@ $(baselibs) $**\r
+       $(CONEXECMD) -stack:2300000 $**\r
        $(_VC_MANIFEST_EMBED_EXE)\r
 \r
 !if $(STATIC_BUILD)\r
 $(TCLDDELIB): $(TMP_DIR)\tclWinDde.obj\r
-       $(lib32) -nologo $(LINKERFLAGS) -out:$@ $**\r
+       $(LIBCMD) $**\r
 !else\r
 $(TCLDDELIB): $(TMP_DIR)\tclWinDde.obj $(TCLSTUBLIB)\r
-       $(link32) $(dlllflags) -base:@$(WINDIR)\coffbase.txt,tcldde -out:$@ \\r
-               $** $(baselibs)\r
+       $(DLLCMD) $**\r
        $(_VC_MANIFEST_EMBED_DLL)\r
 !endif\r
 \r
 !if $(STATIC_BUILD)\r
 $(TCLREGLIB): $(TMP_DIR)\tclWinReg.obj\r
-       $(lib32) -nologo $(LINKERFLAGS) -out:$@ $**\r
+       $(LIBCMD) $**\r
 !else\r
 $(TCLREGLIB): $(TMP_DIR)\tclWinReg.obj $(TCLSTUBLIB)\r
-       $(link32) $(dlllflags) -base:@$(WINDIR)\coffbase.txt,tclreg -out:$@ \\r
-               $** $(baselibs)\r
+       $(DLLCMD) $**\r
        $(_VC_MANIFEST_EMBED_DLL)\r
 !endif\r
 \r
@@ -693,9 +477,8 @@ clean-pkgs:
          )\r
 \r
 $(CAT32): $(WINDIR)\cat.c\r
-       $(cc32) $(CON_CFLAGS) -Fo$(TMP_DIR)\ $?\r
-       $(link32) $(conlflags) -out:$@ -stack:16384 $(TMP_DIR)\cat.obj \\r
-               $(baselibs)\r
+       $(cc32) $(cflags) $(crt) -D_CRT_NONSTDC_NO_DEPRECATE -DCONSOLE -Fo$(TMP_DIR)\ $?\r
+       $(CONEXECMD) -stack:16384 $(TMP_DIR)\cat.obj\r
        $(_VC_MANIFEST_EMBED_EXE)\r
 \r
 #---------------------------------------------------------------------\r
@@ -733,9 +516,12 @@ gentommath_h:
 # Build the Windows HTML help file.\r
 #---------------------------------------------------------------------\r
 \r
-# NOTE: you can define HHC on the command-line to override this\r
-!ifndef HHC\r
-HHC=""%ProgramFiles%\HTML Help Workshop\hhc.exe""\r
+# NOTE: you can define HHC on the command-line to override this.\r
+# nmake does not set macro values if already set on the command line.\r
+!if defined(PROCESSOR_ARCHITECTURE) && "$(PROCESSOR_ARCHITECTURE)" == "AMD64"\r
+HHC="%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe"\r
+!else\r
+HHC="%ProgramFiles%\HTML Help Workshop\hhc.exe"\r
 !endif\r
 HTMLDIR=$(OUT_DIR)\html\r
 HTMLBASE=TclTk$(VERSION)\r
@@ -747,7 +533,7 @@ htmlhelp: chmsetup $(CHMFILE)
 $(CHMFILE): $(DOCDIR)\*\r
        @$(TCLSH) $(TOOLSDIR)\tcltk-man2html.tcl "--htmldir=$(HTMLDIR)"\r
        @echo Compiling HTML help project\r
-       -$(HHC) <<$(HHPFILE) >NUL\r
+       -"$(HHC)" <<$(HHPFILE) >NUL\r
 [OPTIONS]\r
 Compatibility=1.1 or later\r
 Compiled file=$(HTMLBASE).chm\r
@@ -756,7 +542,7 @@ Display compile progress=no
 Error log file=$(HTMLBASE).log\r
 Full-text search=Yes\r
 Language=0x409 English (United States)\r
-Title=Tcl/Tk $(DOT_VERSION) Help\r
+Title=Tcl/Tk $(DOTVERSION) Help\r
 [FILES]\r
 contents.htm\r
 docs.css\r
@@ -771,76 +557,27 @@ UserCmd\*.htm
 chmsetup:\r
        @if not exist $(HTMLDIR)\nul mkdir $(HTMLDIR)\r
 \r
-#-------------------------------------------------------------------------\r
-# Build the old-style Windows .hlp file\r
-#-------------------------------------------------------------------------\r
-\r
-TCLHLPBASE     = $(PROJECT)$(VERSION)\r
-HELPFILE       = $(OUT_DIR)\$(TCLHLPBASE).hlp\r
-HELPCNT                = $(OUT_DIR)\$(TCLHLPBASE).cnt\r
-DOCTMP_DIR     = $(OUT_DIR)\$(PROJECT)_docs\r
-HELPRTF                = $(DOCTMP_DIR)\$(PROJECT).rtf\r
-MAN2HELP       = $(DOCTMP_DIR)\man2help.tcl\r
-MAN2HELP2      = $(DOCTMP_DIR)\man2help2.tcl\r
-INDEX          = $(DOCTMP_DIR)\index.tcl\r
-BMP            = $(DOCTMP_DIR)\feather.bmp\r
-BMP_NOPATH     = feather.bmp\r
-MAN2TCL                = $(DOCTMP_DIR)\man2tcl.exe\r
-\r
-winhelp: docsetup $(HELPFILE)\r
-\r
-docsetup:\r
-       @if not exist $(DOCTMP_DIR)\nul mkdir $(DOCTMP_DIR)\r
-\r
-$(MAN2HELP) $(MAN2HELP2) $(INDEX) $(BMP): $(TOOLSDIR)\$$(@F)\r
-       @$(CPY) $(TOOLSDIR)\$(@F) $(@D)\r
-\r
-$(HELPFILE): $(HELPRTF) $(BMP)\r
-       cd $(DOCTMP_DIR)\r
-       start /wait hcrtf.exe -x <<$(PROJECT).hpj\r
-[OPTIONS]\r
-COMPRESS=12 Hall Zeck\r
-LCID=0x409 0x0 0x0 ; English (United States)\r
-TITLE=Tcl/Tk Reference Manual\r
-BMROOT=.\r
-CNT=$(@B).cnt\r
-HLP=$(@B).hlp\r
-\r
-[FILES]\r
-$(PROJECT).rtf\r
-\r
-[WINDOWS]\r
-main="Tcl/Tk Reference Manual",,27648,(r15263976),(r65535)\r
-\r
-[CONFIG]\r
-BrowseButtons()\r
-CreateButton(1, "Web", ExecFile("http://www.tcl.tk"))\r
-CreateButton(2, "SF", ExecFile("http://sf.net/projects/tcl"))\r
-CreateButton(3, "Wiki", ExecFile("http://wiki.tcl.tk"))\r
-CreateButton(4, "FAQ", ExecFile("http://www.purl.org/NET/Tcl-FAQ/"))\r
-<<\r
-       cd $(MAKEDIR)\r
-       @$(CPY) "$(DOCTMP_DIR)\$(@B).hlp" "$(OUT_DIR)"\r
-       @$(CPY) "$(DOCTMP_DIR)\$(@B).cnt" "$(OUT_DIR)"\r
-\r
-$(MAN2TCL): $(TOOLSDIR)\$$(@B).c\r
-       $(cc32) $(TCL_CFLAGS) -Fo$(@D)\ $(TOOLSDIR)\$(@B).c\r
-       $(link32) $(conlflags) -out:$@ -stack:16384 $(@D)\man2tcl.obj\r
-       $(_VC_MANIFEST_EMBED_EXE)\r
-\r
-$(HELPRTF): $(MAN2TCL) $(MAN2HELP) $(MAN2HELP2) $(INDEX) $(DOCDIR)\*\r
-       $(TCLSH) $(MAN2HELP) -bitmap $(BMP_NOPATH) $(PROJECT) $(VERSION) $(DOCDIR:\=/)\r
-\r
 install-docs:\r
 !if exist("$(CHMFILE)")\r
        @echo Installing compiled HTML help\r
        @$(CPY) "$(CHMFILE)" "$(DOC_INSTALL_DIR)\"\r
 !endif\r
-!if exist("$(HELPFILE)")\r
-       @echo Installing Windows help\r
-       @$(CPY) "$(HELPFILE)" "$(DOC_INSTALL_DIR)\"\r
-       @$(CPY) "$(HELPCNT)" "$(DOC_INSTALL_DIR)\"\r
-!endif\r
+\r
+# "emacs font-lock highlighting fix\r
+\r
+#---------------------------------------------------------------------\r
+# Generate the tcl.nmake file which contains the options used to build\r
+# Tcl itself. This is used when building extensions.\r
+#---------------------------------------------------------------------\r
+tcl-nmake: $(OUT_DIR)\tcl.nmake\r
+$(OUT_DIR)\tcl.nmake:\r
+       @type << >$@\r
+CORE_MACHINE = $(MACHINE)\r
+CORE_DEBUG = $(DEBUG)\r
+CORE_TCL_THREADS = $(TCL_THREADS)\r
+CORE_USE_THREAD_ALLOC = $(USE_THREAD_ALLOC)\r
+CORE_USE_WIDECHAR_API = $(USE_WIDECHAR_API)\r
+<<\r
 \r
 #---------------------------------------------------------------------\r
 # Build tclConfig.sh for the TEA build system.\r
@@ -848,6 +585,7 @@ install-docs:
 \r
 tclConfig: $(OUT_DIR)\tclConfig.sh\r
 \r
+# TBD - is this tclConfig.sh file ever used? The values are incorrect!\r
 $(OUT_DIR)\tclConfig.sh: $(WINDIR)\tclConfig.sh.in\r
        @echo Creating tclConfig.sh\r
         @nmakehlp -s << $** >$@\r
@@ -857,7 +595,7 @@ $(OUT_DIR)\tclConfig.sh: $(WINDIR)\tclConfig.sh.in
 @TCL_MINOR_VERSION@  $(TCL_MINOR_VERSION)\r
 @TCL_PATCH_LEVEL@    $(TCL_PATCH_LEVEL)\r
 @CC@                 $(CC)\r
-@DEFS@               $(TCL_CFLAGS)\r
+@DEFS@               $(pkgcflags)\r
 @CFLAGS_DEBUG@       -nologo -c -W3 -YX -Fp$(TMP_DIR)\ -MDd\r
 @CFLAGS_OPTIMIZE@    -nologo -c -W3 -YX -Fp$(TMP_DIR)\ -MD\r
 @LDFLAGS_DEBUG@      -nologo -machine:$(MACHINE) -debug -debugtype:cv\r
@@ -865,7 +603,7 @@ $(OUT_DIR)\tclConfig.sh: $(WINDIR)\tclConfig.sh.in
 @TCL_DBGX@           $(SUFX)\r
 @TCL_LIB_FILE@       $(PROJECT)$(VERSION)$(SUFX).lib\r
 @TCL_NEEDS_EXP_FILE@\r
-@LIBS@               $(baselibs)\r
+@LIBS@               $(baselibs) $(PRJ_LIBS)\r
 @prefix@             $(_INSTALLDIR)\r
 @exec_prefix@        $(BIN_INSTALL_DIR)\r
 @SHLIB_CFLAGS@\r
@@ -874,7 +612,7 @@ $(OUT_DIR)\tclConfig.sh: $(WINDIR)\tclConfig.sh.in
 @EXTRA_CFLAGS@       -YX\r
 @SHLIB_LD@           $(link32) $(dlllflags)\r
 @STLIB_LD@           $(lib32) -nologo\r
-@SHLIB_LD_LIBS@      $(baselibs)\r
+@SHLIB_LD_LIBS@      $(baselibs) $(PRJ_LIBS)\r
 @SHLIB_SUFFIX@       .dll\r
 @DL_LIBS@\r
 @LDFLAGS@\r
@@ -925,28 +663,28 @@ gendate:
 #---------------------------------------------------------------------\r
 \r
 $(TMP_DIR)\testMain.obj: $(WINDIR)\tclAppInit.c\r
-       $(cc32) $(TCL_CFLAGS) -DTCL_TEST \\r
+       $(cc32) $(appcflags) -DTCL_TEST \\r
            -DTCL_USE_STATIC_PACKAGES=$(TCL_USE_STATIC_PACKAGES) \\r
            -Fo$@ $?\r
 \r
 $(TMP_DIR)\tclMain2.obj: $(GENERICDIR)\tclMain.c\r
-       $(cc32) $(TCL_CFLAGS) -DBUILD_tcl -DTCL_ASCII_MAIN \\r
+       $(cc32) $(pkgcflags) -DTCL_ASCII_MAIN \\r
            -Fo$@ $?\r
 \r
 $(TMP_DIR)\tclTest.obj: $(GENERICDIR)\tclTest.c\r
-       $(cc32) $(TCL_CFLAGS) -Fo$@ $?\r
+       $(cc32) $(appcflags) -Fo$@ $?\r
 \r
 $(TMP_DIR)\tclTestObj.obj: $(GENERICDIR)\tclTestObj.c\r
-       $(cc32) $(TCL_CFLAGS) -Fo$@ $?\r
+       $(cc32) $(appcflags) -Fo$@ $?\r
 \r
 $(TMP_DIR)\tclWinTest.obj: $(WINDIR)\tclWinTest.c\r
-       $(cc32) $(TCL_CFLAGS) -Fo$@ $?\r
+       $(CCAPPCMD) $?\r
 \r
 $(TMP_DIR)\tclZlib.obj: $(GENERICDIR)\tclZlib.c\r
-       $(cc32) $(TCL_CFLAGS) -I$(COMPATDIR)\zlib -DBUILD_tcl -Fo$@ $?\r
+       $(cc32) $(pkgcflags) -I$(COMPATDIR)\zlib -Fo$@ $?\r
 \r
 $(TMP_DIR)\tclPkgConfig.obj: $(GENERICDIR)\tclPkgConfig.c\r
-       $(cc32) -DBUILD_tcl $(TCL_CFLAGS) \\r
+       $(cc32) $(pkgcflags) \\r
        -DCFG_INSTALL_LIBDIR="\"$(LIB_INSTALL_DIR:\=\\)\"" \\r
        -DCFG_INSTALL_BINDIR="\"$(BIN_INSTALL_DIR:\=\\)\"" \\r
        -DCFG_INSTALL_SCRDIR="\"$(SCRIPT_INSTALL_DIR:\=\\)\"" \\r
@@ -960,7 +698,7 @@ $(TMP_DIR)\tclPkgConfig.obj: $(GENERICDIR)\tclPkgConfig.c
        -Fo$@ $?\r
 \r
 $(TMP_DIR)\tclAppInit.obj: $(WINDIR)\tclAppInit.c\r
-       $(cc32) $(TCL_CFLAGS) \\r
+       $(cc32) $(appcflags) \\r
            -DTCL_USE_STATIC_PACKAGES=$(TCL_USE_STATIC_PACKAGES) \\r
            -Fo$@ $?\r
 \r
@@ -969,17 +707,17 @@ $(TMP_DIR)\tclAppInit.obj: $(WINDIR)\tclAppInit.c
 \r
 $(TMP_DIR)\tclWinReg.obj: $(WINDIR)\tclWinReg.c\r
 !if $(STATIC_BUILD)\r
-       $(cc32) $(TCL_CFLAGS) -DTCL_THREADS=1 -DSTATIC_BUILD -Fo$@ $?\r
+       $(cc32) $(appcflags) -DSTATIC_BUILD -Fo$@ $?\r
 !else\r
-       $(cc32) $(TCL_CFLAGS) -DTCL_THREADS=1 -DUSE_TCL_STUBS -Fo$@ $?\r
+       $(cc32) $(appcflags) -DUSE_TCL_STUBS -Fo$@ $?\r
 !endif\r
 \r
 \r
 $(TMP_DIR)\tclWinDde.obj: $(WINDIR)\tclWinDde.c\r
 !if $(STATIC_BUILD)\r
-       $(cc32) $(TCL_CFLAGS) -DTCL_THREADS=1 -DSTATIC_BUILD -Fo$@ $?\r
+       $(cc32) $(appcflags) -DSTATIC_BUILD -Fo$@ $?\r
 !else\r
-       $(cc32) $(TCL_CFLAGS) -DTCL_THREADS=1 -DUSE_TCL_STUBS -Fo$@ $?\r
+       $(cc32) $(appcflags) -DUSE_TCL_STUBS -Fo$@ $?\r
 !endif\r
 \r
 \r
@@ -988,13 +726,13 @@ $(TMP_DIR)\tclWinDde.obj: $(WINDIR)\tclWinDde.c
 ### specific C run-time.\r
 \r
 $(TMP_DIR)\tclStubLib.obj: $(GENERICDIR)\tclStubLib.c\r
-       $(cc32) $(STUB_CFLAGS) -Zl -DSTATIC_BUILD $(TCL_INCLUDES) -Fo$@ $?\r
+       $(cc32) $(stubscflags) -Fo$@ $?\r
 \r
 $(TMP_DIR)\tclTomMathStubLib.obj: $(GENERICDIR)\tclTomMathStubLib.c\r
-       $(cc32) $(STUB_CFLAGS) -Zl -DSTATIC_BUILD $(TCL_INCLUDES) -Fo$@ $?\r
+       $(cc32) $(stubscflags) -Fo$@ $?\r
 \r
 $(TMP_DIR)\tclOOStubLib.obj: $(GENERICDIR)\tclOOStubLib.c\r
-       $(cc32) $(STUB_CFLAGS) -Zl -DSTATIC_BUILD $(TCL_INCLUDES) -Fo$@ $?\r
+       $(cc32) $(stubscflags) -Fo$@ $?\r
 \r
 $(TMP_DIR)\tclsh.exe.manifest: $(WINDIR)\tclsh.exe.manifest.in\r
        @nmakehlp -s << $** >$@\r
@@ -1015,7 +753,7 @@ depend:
        @echo Build tclsh first!\r
 !else\r
        $(TCLSH) $(TOOLSDIR:\=/)/mkdepend.tcl -vc32 -out:"$(OUT_DIR)\depend.mk" \\r
-               -passthru:"-DBUILD_tcl $(TCL_INCLUDES)" $(GENERICDIR),$$(GENERICDIR) \\r
+               -passthru:"-DBUILD_tcl $(TCL_INCLUDES) $(PRJ_INCLUDES)" $(GENERICDIR),$$(GENERICDIR) \\r
                $(COMPATDIR),$$(COMPATDIR) $(TOMMATHDIR),$$(TOMMATHDIR) $(WINDIR),$$(WINDIR) @<<\r
 $(TCLOBJS)\r
 <<\r
@@ -1037,47 +775,23 @@ $(TCLOBJS)
 \r
 \r
 #---------------------------------------------------------------------\r
-# Implicit rules.  A limitation exists with nmake that requires that\r
+# Implicit rules that are not covered by the common ones defined in\r
+# rules.vc. A limitation exists with nmake that requires that\r
 # source directory can not contain spaces in the path.  This an\r
 # absolute.\r
 #---------------------------------------------------------------------\r
 \r
-{$(WINDIR)}.c{$(TMP_DIR)}.obj::\r
-       $(cc32) $(TCL_CFLAGS) -DBUILD_tcl -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
 {$(TOMMATHDIR)}.c{$(TMP_DIR)}.obj::\r
-       $(cc32) $(TCL_CFLAGS) -DBUILD_tcl -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::\r
-       $(cc32) $(TCL_CFLAGS) -DBUILD_tcl -Fo$(TMP_DIR)\ @<<\r
-$<\r
-<<\r
-\r
-{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::\r
-       $(cc32) $(TCL_CFLAGS) -DBUILD_tcl -Fo$(TMP_DIR)\ @<<\r
+       $(cc32) $(pkgcflags) -Fo$(TMP_DIR)\ @<<\r
 $<\r
 <<\r
 \r
 {$(COMPATDIR)\zlib}.c{$(TMP_DIR)}.obj::\r
-       $(cc32) $(TCL_CFLAGS) -DBUILD_tcl -Fo$(TMP_DIR)\ @<<\r
+       $(cc32) $(pkgcflags) -Fo$(TMP_DIR)\ @<<\r
 $<\r
 <<\r
 \r
-{$(WINDIR)}.rc{$(TMP_DIR)}.res:\r
-       $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \\r
-           -d DEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \\r
-           -d TCL_THREADS=$(TCL_THREADS) \\r
-           -d STATIC_BUILD=$(STATIC_BUILD) \\r
-           $<\r
-\r
-$(TMP_DIR)\tclsh.res: $(TMP_DIR)\tclsh.exe.manifest\r
-\r
-.SUFFIXES:\r
-.SUFFIXES:.c .rc\r
+$(TMP_DIR)\tclsh.res: $(TMP_DIR)\tclsh.exe.manifest $(WINDIR)\tclsh.rc\r
 \r
 \r
 #---------------------------------------------------------------------\r
@@ -1098,21 +812,21 @@ install-binaries:
        @echo Installing $(TCLSTUBLIBNAME)\r
        @$(CPY) "$(TCLSTUBLIB)" "$(LIB_INSTALL_DIR)\"\r
 \r
-#" emacs fix\r
-\r
-install-libraries: tclConfig install-msgs install-tzdata\r
-       @if not exist "$(SCRIPT_INSTALL_DIR)$(NULL)" \\r
+install-libraries: tclConfig tcl-nmake install-msgs install-tzdata\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)" \\r
                $(MKDIR) "$(SCRIPT_INSTALL_DIR)"\r
-       @if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8$(NULL)" \\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8" \\r
                $(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl8"\r
-       @if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4$(NULL)" \\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4" \\r
                $(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4"\r
-       @if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4\platform$(NULL)" \\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4\platform" \\r
                $(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.4\platform"\r
-       @if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.5$(NULL)" \\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.5" \\r
                $(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.5"\r
-       @if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.6$(NULL)" \\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.6" \\r
                $(MKDIR) "$(SCRIPT_INSTALL_DIR)\..\tcl8\8.6"\r
+       @if not exist "$(LIB_INSTALL_DIR)\nmake" \\r
+               $(MKDIR) "$(LIB_INSTALL_DIR)\nmake"\r
        @echo Installing header files\r
        @$(CPY) "$(GENERICDIR)\tcl.h"             "$(INCLUDE_INSTALL_DIR)\"\r
        @$(CPY) "$(GENERICDIR)\tclDecls.h"        "$(INCLUDE_INSTALL_DIR)\"\r
@@ -1136,6 +850,10 @@ install-libraries: tclConfig install-msgs install-tzdata
        @$(CPY) "$(ROOT)\library\auto.tcl"        "$(SCRIPT_INSTALL_DIR)\"\r
        @$(CPY) "$(OUT_DIR)\tclConfig.sh"         "$(LIB_INSTALL_DIR)\"\r
        @$(CPY) "$(WINDIR)\tclooConfig.sh"        "$(LIB_INSTALL_DIR)\"\r
+       @$(CPY) "$(WINDIR)\rules.vc"              "$(LIB_INSTALL_DIR)\nmake\"\r
+       @$(CPY) "$(WINDIR)\targets.vc"              "$(LIB_INSTALL_DIR)\nmake\"\r
+       @$(CPY) "$(WINDIR)\nmakehlp.c"            "$(LIB_INSTALL_DIR)\nmake\"\r
+       @$(CPY) "$(OUT_DIR)\tcl.nmake"            "$(LIB_INSTALL_DIR)\nmake\"\r
        @echo Installing library http1.0 directory\r
        @$(CPY) "$(ROOT)\library\http1.0\*.tcl" \\r
            "$(SCRIPT_INSTALL_DIR)\http1.0\"\r
@@ -1180,8 +898,7 @@ install-libraries: tclConfig install-msgs install-tzdata
        @echo Installing encodings\r
        @$(CPY) "$(ROOT)\library\encoding\*.enc" \\r
                "$(SCRIPT_INSTALL_DIR)\encoding\"\r
-\r
-#" emacs fix\r
+# "emacs font-lock highlighting fix\r
 \r
 install-tzdata:\r
        @echo Installing time zone data\r
@@ -1215,28 +932,10 @@ tidy:
        @echo Removing $(TCLREGLIB) ...\r
        @if exist $(TCLREGLIB) del $(TCLREGLIB)\r
 \r
-clean: clean-pkgs\r
-       @echo Cleaning $(TMP_DIR)\* ...\r
-       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)\r
-       @echo Cleaning $(WINDIR)\nmakehlp.obj ...\r
-       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj\r
-       @echo Cleaning $(WINDIR)\nmakehlp.exe ...\r
-       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe\r
-       @echo Cleaning $(WINDIR)\_junk.pch ...\r
-       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch\r
-       @echo Cleaning $(WINDIR)\vercl.x ...\r
-       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x\r
-       @echo Cleaning $(WINDIR)\vercl.i ...\r
-       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i\r
-       @echo Cleaning $(WINDIR)\versions.vc ...\r
-       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc\r
-\r
+clean: default-clean clean-pkgs\r
+hose: default-hose\r
 realclean: hose\r
 \r
-hose:\r
-       @echo Hosing $(OUT_DIR)\* ...\r
-       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)\r
-\r
 # Local Variables:\r
 # mode: makefile\r
 # End:\r
index 22b7b06..025bb99 100644 (file)
@@ -39,7 +39,6 @@
 #endif
 
 
-
 /* protos */
 
 static int CheckForCompilerFeature(const char *option);
@@ -47,6 +46,7 @@ static int CheckForLinkerFeature(const char **options, int count);
 static int IsIn(const char *string, const char *substring);
 static int SubstituteFile(const char *substs, const char *filename);
 static int QualifyPath(const char *path);
+static int LocateDependency(const char *keyfile);
 static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
 static DWORD WINAPI ReadFromPipe(LPVOID args);
 
@@ -74,6 +74,7 @@ main(
     char msg[300];
     DWORD dwWritten;
     int chars;
+    char *s;
 
     /*
      * Make sure children (cl.exe and link.exe) are kept quiet.
@@ -153,8 +154,13 @@ main(
                    &dwWritten, NULL);
                return 0;
            }
-           printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0'));
-           return 0;
+           s = GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0');
+           if (s && *s) {
+               printf("%s\n", s);
+               return 0;
+           } else
+               return 1; /* Version not found. Return non-0 exit code */
+
        case 'Q':
            if (argc != 3) {
                chars = snprintf(msg, sizeof(msg) - 1,
@@ -166,6 +172,18 @@ main(
                return 2;
            }
            return QualifyPath(argv[2]);
+
+       case 'L':
+           if (argc != 3) {
+               chars = snprintf(msg, sizeof(msg) - 1,
+                   "usage: %s -L keypath\n"
+                   "Emit the fully qualified path of directory containing keypath\n"
+                   "exitcodes: 0 == success, 1 == not found, 2 == error\n", argv[0]);
+               WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
+                   &dwWritten, NULL);
+               return 2;
+           }
+           return LocateDependency(argv[2]);
        }
     }
     chars = snprintf(msg, sizeof(msg) - 1,
@@ -695,6 +713,97 @@ QualifyPath(
 }
 
 /*
+ * Implements LocateDependency for a single directory. See that command
+ * for an explanation.
+ * Returns 0 if found after printing the directory.
+ * Returns 1 if not found but no errors.
+ * Returns 2 on any kind of error
+ * Basically, these are used as exit codes for the process.
+ */
+static int LocateDependencyHelper(const char *dir, const char *keypath)
+{
+    HANDLE hSearch;
+    char path[MAX_PATH+1];
+    int dirlen, keylen, ret;
+    WIN32_FIND_DATA finfo;
+
+    if (dir == NULL || keypath == NULL)
+       return 2; /* Have no real error reporting mechanism into nmake */
+    dirlen = strlen(dir);
+    if ((dirlen + 3) > sizeof(path))
+       return 2;
+    strncpy(path, dir, dirlen);
+    strncpy(path+dirlen, "\\*", 3);    /* Including terminating \0 */
+    keylen = strlen(keypath);
+
+#if 0 /* This function is not available in Visual C++ 6 */
+    /*
+     * Use numerics 0 -> FindExInfoStandard,
+     * 1 -> FindExSearchLimitToDirectories, 
+     * as these are not defined in Visual C++ 6
+     */
+    hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0);
+#else
+    hSearch = FindFirstFile(path, &finfo);
+#endif
+    if (hSearch == INVALID_HANDLE_VALUE)
+       return 1; /* Not found */
+
+    /* Loop through all subdirs checking if the keypath is under there */
+    ret = 1; /* Assume not found */
+    do {
+       int sublen;
+       /*
+        * We need to check it is a directory despite the 
+        * FindExSearchLimitToDirectories in the above call. See SDK docs
+        */
+       if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
+           continue;
+       sublen = strlen(finfo.cFileName);
+       if ((dirlen+1+sublen+1+keylen+1) > sizeof(path))
+           continue;           /* Path does not fit, assume not matched */
+       strncpy(path+dirlen+1, finfo.cFileName, sublen);
+       path[dirlen+1+sublen] = '\\';
+       strncpy(path+dirlen+1+sublen+1, keypath, keylen+1);
+       if (PathFileExists(path)) {
+           /* Found a match, print to stdout */
+           path[dirlen+1+sublen] = '\0';
+           QualifyPath(path);
+           ret = 0;
+           break;
+       }
+    } while (FindNextFile(hSearch, &finfo));
+    FindClose(hSearch);
+    return ret;
+}
+
+/*
+ * LocateDependency --
+ *
+ *     Locates a dependency for a package.
+ *        keypath - a relative path within the package directory
+ *          that is used to confirm it is the correct directory.
+ *     The search path for the package directory is currently only
+ *      the parent and grandparent of the current working directory.
+ *      If found, the command prints 
+ *         name_DIRPATH=<full path of located directory>
+ *      and returns 0. If not found, does not print anything and returns 1.
+ */
+static int LocateDependency(const char *keypath)
+{
+    int i, ret;
+    static char *paths[] = {"..", "..\\..", "..\\..\\.."};
+    
+    for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) {
+       ret = LocateDependencyHelper(paths[i], keypath);
+       if (ret == 0)
+           return ret;
+    }
+    return ret;
+}
+
+
+/*
  * Local variables:
  *   mode: c
  *   c-basic-offset: 4
diff --git a/win/rules-ext.vc b/win/rules-ext.vc
new file mode 100644 (file)
index 0000000..58c70fa
--- /dev/null
@@ -0,0 +1,118 @@
+# This file should only be included in makefiles for Tcl extensions,\r
+# NOT in the makefile for Tcl itself.\r
+\r
+!ifndef _RULES_EXT_VC\r
+\r
+# We need to run from the directory the parent makefile is located in.\r
+# nmake does not tell us what makefile was used to invoke it so parent\r
+# makefile has to set the MAKEFILEVC macro or we just make a guess and\r
+# warn if we think that is not the case.\r
+!if "$(MAKEFILEVC)" == ""\r
+\r
+!if exist("$(PROJECT).vc")\r
+MAKEFILEVC = $(PROJECT).vc\r
+!elseif exist("makefile.vc")\r
+MAKEFILEVC = makefile.vc\r
+!endif\r
+!endif # "$(MAKEFILEVC)" == ""\r
+\r
+!if !exist("$(MAKEFILEVC)")\r
+MSG = ^\r
+You must run nmake from the directory containing the project makefile.^\r
+If you are doing that and getting this message, set the MAKEFILEVC^\r
+macro to the name of the project makefile.\r
+!message WARNING: $(MSG)\r
+!endif\r
+\r
+!if "$(PROJECT)" == "tcl"\r
+!error The rules-ext.vc file is not intended for Tcl itself.\r
+!endif\r
+\r
+# We extract version numbers using the nmakehlp program. For now use\r
+# the local copy of nmakehlp. Once we locate Tcl, we will use that\r
+# one if it is newer.\r
+!if [$(CC) -nologo "nmakehlp.c" -link -subsystem:console > nul]\r
+!endif\r
+\r
+# First locate the Tcl directory that we are working with.\r
+!ifdef TCLDIR\r
+\r
+_RULESDIR = $(TCLDIR:/=\)\r
+\r
+!else\r
+\r
+# If an installation path is specified, that is also the Tcl directory.\r
+# Also Tk never builds against an installed Tcl, it needs Tcl sources\r
+!if defined(INSTALLDIR) && "$(PROJECT)" != "tk"\r
+_RULESDIR=$(INSTALLDIR:/=\)\r
+!else\r
+# Locate Tcl sources\r
+!if [echo _RULESDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]\r
+_RULESDIR = ..\..\tcl\r
+!else\r
+!include nmakehlp.out\r
+!endif\r
+\r
+!endif # defined(INSTALLDIR)....\r
+\r
+!endif # ifndef TCLDIR\r
+\r
+# Now look for the targets.vc file under the Tcl root. Note we check this\r
+# file and not rules.vc because the latter also exists on older systems.\r
+!if exist("$(_RULESDIR)\lib\nmake\targets.vc") # Building against installed Tcl\r
+_RULESDIR = $(_RULESDIR)\lib\nmake\r
+!elseif exist("$(_RULESDIR)\win\targets.vc")   # Building against Tcl sources\r
+_RULESDIR = $(_RULESDIR)\win\r
+!else\r
+# If we have not located Tcl's targets file, most likely we are compiling\r
+# against an older version of Tcl and so must use our own support files.\r
+_RULESDIR = .\r
+!endif\r
+\r
+!if "$(_RULESDIR)" != "."\r
+# Potentially using Tcl's support files. If this extension has its own\r
+# nmake support files, need to compare the versions and pick newer.\r
+\r
+!if exist("rules.vc") # The extension has its own copy\r
+\r
+!if [echo TCL_RULES_MAJOR = \> versions.vc] \\r
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MAJOR >> versions.vc]\r
+!endif\r
+!if [echo TCL_RULES_MINOR = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_RULESDIR)\rules.vc" RULES_VERSION_MINOR >> versions.vc]\r
+!endif\r
+\r
+!if [echo OUR_RULES_MAJOR = \>> versions.vc] \\r
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MAJOR >> versions.vc]\r
+!endif\r
+!if [echo OUR_RULES_MINOR = \>> versions.vc] \\r
+   && [nmakehlp -V "rules.vc" RULES_VERSION_MINOR >> versions.vc]\r
+!endif\r
+!include versions.vc\r
+# We have a newer version of the support files, use them\r
+!if ($(TCL_RULES_MAJOR) != $(OUR_RULES_MAJOR)) || ($(TCL_RULES_MINOR) < $(OUR_RULES_MINOR))\r
+_RULESDIR = .\r
+!endif\r
+\r
+!endif # if exist("rules.vc")\r
+\r
+!endif # if $(_RULESDIR) != "."\r
+\r
+# Let rules.vc know what copy of nmakehlp.c to use.\r
+NMAKEHLPC = $(_RULESDIR)\nmakehlp.c\r
+\r
+# Get rid of our internal defines before calling rules.vc\r
+!undef TCL_RULES_MAJOR\r
+!undef TCL_RULES_MINOR\r
+!undef OUR_RULES_MAJOR\r
+!undef OUR_RULES_MINOR\r
+\r
+!if exist("$(_RULESDIR)\rules.vc")\r
+!message *** Using $(_RULESDIR)\rules.vc\r
+!include "$(_RULESDIR)\rules.vc"\r
+!else\r
+!error *** Could not locate rules.vc in $(_RULESDIR)\r
+!endif\r
+\r
+!endif # _RULES_EXT_VC
\ No newline at end of file
index 4a3ae26..7fc51c1 100644 (file)
-#------------------------------------------------------------------------------\r
+#------------------------------------------------------------- -*- makefile -*-\r
 # rules.vc --\r
 #\r
-#      Microsoft Visual C++ makefile include for decoding the commandline\r
-#      macros.  This file does not need editing to build Tcl.\r
+# Part of the nmake based build system for Tcl and its extensions.\r
+# This file does all the hard work in terms of parsing build options,\r
+# compiler switches, defining common targets and macros. The Tcl makefile\r
+# directly includes this. Extensions include it via "rules-ext.vc".\r
+#\r
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for\r
+# detailed documentation.\r
 #\r
 # See the file "license.terms" for information on usage and redistribution\r
 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.\r
 #\r
 # Copyright (c) 2001-2003 David Gravereaux.\r
 # Copyright (c) 2003-2008 Patrick Thoyts\r
+# Copyright (c) 2017      Ashok P. Nadkarni\r
 #------------------------------------------------------------------------------\r
 \r
 !ifndef _RULES_VC\r
 _RULES_VC = 1\r
 \r
-cc32           = $(CC)   # built-in default.\r
-link32         = link\r
-lib32          = lib\r
-rc32           = $(RC)   # built-in default.\r
+# The following macros define the version of the rules.vc nmake build system\r
+# For modifications that are not backward-compatible, you *must* change\r
+# the major version.\r
+RULES_VERSION_MAJOR = 1\r
+RULES_VERSION_MINOR = 0\r
 \r
-!ifndef INSTALLDIR\r
-### Assume the normal default.\r
-_INSTALLDIR    = C:\Program Files\Tcl\r
+# The PROJECT macro must be defined by parent makefile.\r
+!if "$(PROJECT)" == ""\r
+!error *** Error: Macro PROJECT not defined! Please define it before including rules.vc\r
+!endif\r
+\r
+!if "$(PRJ_PACKAGE_TCLNAME)" == ""\r
+PRJ_PACKAGE_TCLNAME = $(PROJECT)\r
+!endif\r
+\r
+# Also special case Tcl and Tk to save some typing later\r
+DOING_TCL = 0\r
+DOING_TK  = 0\r
+!if "$(PROJECT)" == "tcl"\r
+DOING_TCL = 1\r
+!elseif "$(PROJECT)" == "tk"\r
+DOING_TK = 1\r
+!endif\r
+\r
+!ifndef NEED_TK\r
+# Backwards compatibility\r
+!ifdef PROJECT_REQUIRES_TK\r
+NEED_TK = $(PROJECT_REQUIRES_TK)\r
 !else\r
-### Fix the path separators.\r
-_INSTALLDIR    = $(INSTALLDIR:/=\)\r
+NEED_TK = 0\r
+!endif\r
+!endif\r
+\r
+!ifndef NEED_TCL_SOURCE\r
+NEED_TCL_SOURCE = 0\r
+!endif\r
+\r
+!ifdef NEED_TK_SOURCE\r
+!if $(NEED_TK_SOURCE)\r
+NEED_TK = 1\r
+!endif\r
+!else\r
+NEED_TK_SOURCE = 0\r
+!endif\r
+\r
+################################################################\r
+# Nmake is a pretty weak environment in syntax and capabilities\r
+# so this file is necessarily verbose. It's broken down into\r
+# the following parts.\r
+#\r
+# 0. Sanity check that compiler environment is set up and initialize\r
+#    any built-in settings from the parent makefile\r
+# 1. First define the external tools used for compiling, copying etc.\r
+#    as this is independent of everything else.\r
+# 2. Figure out our build structure in terms of the directory, whether\r
+#    we are building Tcl or an extension, etc.\r
+# 3. Determine the compiler and linker versions\r
+# 4. Build the nmakehlp helper application\r
+# 5. Determine the supported compiler options and features\r
+# 6. Parse the OPTS macro value for user-specified build configuration\r
+# 7. Parse the STATS macro value for statistics instrumentation\r
+# 8. Parse the CHECKS macro for additional compilation checks\r
+# 9. Extract Tcl, and possibly Tk, version numbers from the headers\r
+# 10. Based on this selected configuration, construct the output\r
+#     directory and file paths\r
+# 11. Construct the paths where the package is to be installed\r
+# 12. Set up the actual options passed to compiler and linker based\r
+#     on the information gathered above.\r
+# 13. Define some standard build targets and implicit rules. These may\r
+#     be optionally disabled by the parent makefile.\r
+# 14. (For extensions only.) Compare the configuration of the target\r
+#     Tcl and the extensions and warn against discrepancies.\r
+#\r
+# One final note about the macro names used. They are as they are\r
+# for historical reasons. We would like legacy extensions to\r
+# continue to work with this make include file so be wary of\r
+# changing them for consistency or clarity.\r
+\r
+# 0. Sanity check compiler environment\r
+\r
+# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or\r
+# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)\r
+\r
+!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR)\r
+MSG = ^\r
+Visual C++ compiler environment not initialized.\r
+!error $(MSG)\r
 !endif\r
 \r
+# We need to run from the directory the parent makefile is located in.\r
+# nmake does not tell us what makefile was used to invoke it so parent\r
+# makefile has to set the MAKEFILEVC macro or we just make a guess and\r
+# warn if we think that is not the case.\r
+!if "$(MAKEFILEVC)" == ""\r
+\r
+!if exist("$(PROJECT).vc")\r
+MAKEFILEVC = $(PROJECT).vc\r
+!elseif exist("makefile.vc")\r
+MAKEFILEVC = makefile.vc\r
+!endif\r
+!endif # "$(MAKEFILEVC)" == ""\r
+\r
+!if !exist("$(MAKEFILEVC)")\r
+MSG = ^\r
+You must run nmake from the directory containing the project makefile.^\r
+If you are doing that and getting this message, set the MAKEFILEVC^\r
+macro to the name of the project makefile.\r
+!message WARNING: $(MSG)\r
+!endif\r
+\r
+\r
+################################################################\r
+# 1. Define external programs being used\r
+\r
 #----------------------------------------------------------\r
 # Set the proper copy method to avoid overwrite questions\r
 # to the user when copying files and selecting the right\r
 # "delete all" method.\r
 #----------------------------------------------------------\r
 \r
-!if "$(OS)" == "Windows_NT"\r
 RMDIR  = rmdir /S /Q\r
-ERRNULL  = 2>NUL\r
-!if ![ver | find "4.0" > nul]\r
-CPY    = echo y | xcopy /i >NUL\r
-COPY   = copy >NUL\r
-!else\r
 CPY    = xcopy /i /y >NUL\r
+CPYDIR  = xcopy /e /i /y >NUL\r
 COPY   = copy /y >NUL\r
+MKDIR   = mkdir\r
+\r
+######################################################################\r
+# 2. Figure out our build environment in terms of what we're building.\r
+#\r
+# (a) Tcl itself\r
+# (b) Tk\r
+# (c) a Tcl extension using libraries/includes from an *installed* Tcl\r
+# (d) a Tcl extension using libraries/includes from Tcl source directory\r
+#\r
+# This last is needed because some extensions still need\r
+# some Tcl interfaces that are not publicly exposed.\r
+#\r
+# The fragment will set the following macros:\r
+# ROOT - root of this module sources\r
+# COMPATDIR - source directory that holds compatibility sources\r
+# DOCDIR - source directory containing documentation files\r
+# GENERICDIR - platform-independent source directory\r
+# WINDIR - Windows-specific source directory\r
+# TESTDIR - directory containing test files\r
+# TOOLSDIR - directory containing build tools\r
+# _TCLDIR - root of the Tcl installation OR the Tcl sources. Not set\r
+#    when building Tcl itself.\r
+# _INSTALLDIR - native form of the installation path. For Tcl\r
+#    this will be the root of the Tcl installation. For extensions\r
+#    this will be the lib directory under the root.\r
+# TCLINSTALL  - set to 1 if _TCLDIR refers to\r
+#    headers and libraries from an installed Tcl, and 0 if built against\r
+#    Tcl sources. Not set when building Tcl itself. Yes, not very well\r
+#    named.\r
+# _TCL_H - native path to the tcl.h file\r
+#\r
+# If Tk is involved, also sets the following\r
+# _TKDIR - native form Tk installation OR Tk source. Not set if building\r
+#    Tk itself.\r
+# TKINSTALL - set 1 if _TKDIR refers to installed Tk and 0 if Tk sources\r
+# _TK_H - native path to the tk.h file\r
+\r
+# Root directory for sources and assumed subdirectories\r
+ROOT = $(MAKEDIR)\..\r
+# The following paths CANNOT have spaces in them as they appear on the\r
+# left side of implicit rules.\r
+!ifndef COMPATDIR\r
+COMPATDIR      = $(ROOT)\compat\r
+!endif\r
+!ifndef DOCDIR\r
+DOCDIR         = $(ROOT)\doc\r
+!endif\r
+!ifndef GENERICDIR\r
+GENERICDIR     = $(ROOT)\generic\r
+!endif\r
+!ifndef TOOLSDIR\r
+TOOLSDIR       = $(ROOT)\tools\r
+!endif\r
+!ifndef TESTDIR\r
+TESTDIR        = $(ROOT)\tests\r
+!endif\r
+!ifndef LIBDIR\r
+!if exist("$(ROOT)\library")\r
+LIBDIR          = $(ROOT)\library\r
+!else\r
+LIBDIR          = $(ROOT)\lib\r
 !endif\r
-!else # "$(OS)" != "Windows_NT"\r
-CPY    = xcopy /i >_JUNK.OUT # On Win98 NUL does not work here.\r
-COPY   = copy >_JUNK.OUT # On Win98 NUL does not work here.\r
-RMDIR  = deltree /Y\r
-NULL    = \NUL # Used in testing directory existence\r
-ERRNULL = >NUL # Win9x shell cannot redirect stderr\r
 !endif\r
-MKDIR   = mkdir\r
+!ifndef DEMODIR\r
+!if exist("$(LIBDIR)\demos")\r
+DEMODIR                = $(LIBDIR)\demos\r
+!else\r
+DEMODIR                = $(ROOT)\demos\r
+!endif\r
+!endif # ifndef DEMODIR\r
+# Do NOT enclose WINDIR in a !ifndef because Windows always defines\r
+# WINDIR env var to point to c:\windows!\r
+# TBD - This is a potentially dangerous conflict, rename WINDIR to\r
+# something else\r
+WINDIR         = $(ROOT)\win\r
+\r
+!ifndef RCDIR\r
+!if exist("$(WINDIR)\rc")\r
+RCDIR           = $(WINDIR)\rc\r
+!else\r
+RCDIR           = $(WINDIR)\r
+!endif\r
+!endif\r
+RCDIR = $(RCDIR:/=\)\r
 \r
-#------------------------------------------------------------------------------\r
-# Determine the host and target architectures and compiler version.\r
-#------------------------------------------------------------------------------\r
+# The target directory where the built packages and binaries will be installed.\r
+# INSTALLDIR is the (optional) path specified by the user.\r
+# _INSTALLDIR is INSTALLDIR using the backslash separator syntax\r
+!ifdef INSTALLDIR\r
+### Fix the path separators.\r
+_INSTALLDIR    = $(INSTALLDIR:/=\)\r
+!else\r
+### Assume the normal default.\r
+_INSTALLDIR    = $(HOMEDRIVE)\Tcl\r
+!endif\r
+\r
+!if $(DOING_TCL)\r
+\r
+# BEGIN Case 2(a) - Building Tcl itself\r
+\r
+# Only need to define _TCL_H\r
+_TCL_H = ..\generic\tcl.h\r
+\r
+# END Case 2(a) - Building Tcl itself\r
+\r
+!elseif $(DOING_TK)\r
+\r
+# BEGIN Case 2(b) - Building Tk\r
+\r
+TCLINSTALL = 0 # Tk always builds against Tcl source, not an installed Tcl\r
+!if "$(TCLDIR)" == ""\r
+!if [echo TCLDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]\r
+!error *** Could not locate Tcl source directory.\r
+!endif\r
+!include nmakehlp.out\r
+!endif # TCLDIR == ""\r
+\r
+_TCLDIR        = $(TCLDIR:/=\)\r
+_TCL_H  = $(_TCLDIR)\generic\tcl.h\r
+!if !exist("$(_TCL_H)")\r
+!error Could not locate tcl.h. Please set the TCLDIR macro to point to the Tcl *source* directory.\r
+!endif\r
+\r
+_TK_H = ..\generic\tk.h\r
+\r
+# END Case 2(b) - Building Tk\r
+\r
+!else\r
+\r
+# BEGIN Case 2(c) or (d) - Building an extension other than Tk\r
+\r
+# If command line has specified Tcl location through TCLDIR, use it\r
+# else default to the INSTALLDIR setting\r
+!if "$(TCLDIR)" != ""\r
+\r
+_TCLDIR        = $(TCLDIR:/=\)\r
+!if exist("$(_TCLDIR)\include\tcl.h") # Case 2(c) with TCLDIR defined\r
+TCLINSTALL     = 1\r
+_TCL_H          = $(_TCLDIR)\include\tcl.h\r
+!elseif exist("$(_TCLDIR)\generic\tcl.h") # Case 2(d) with TCLDIR defined\r
+TCLINSTALL     = 0\r
+_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
+!endif\r
+\r
+!else  #  # Case 2(c) for extensions with TCLDIR undefined\r
+\r
+# Need to locate Tcl depending on whether it needs Tcl source or not.\r
+# If we don't, check the INSTALLDIR for an installed Tcl first\r
+\r
+!if exist("$(_INSTALLDIR)\include\tcl.h") && !$(NEED_TCL_SOURCE)\r
+\r
+TCLINSTALL     = 1\r
+TCLDIR          = $(_INSTALLDIR)\..\r
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions\r
+# later so the \.. accounts for the /lib\r
+_TCLDIR                = $(_INSTALLDIR)\..\r
+_TCL_H          = $(_TCLDIR)\include\tcl.h\r
+\r
+!else # exist(...) && ! $(NEED_TCL_SOURCE)\r
+\r
+!if [echo _TCLDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tcl.h >> nmakehlp.out]\r
+!error *** Could not locate Tcl source directory.\r
+!endif\r
+!include nmakehlp.out\r
+TCLINSTALL      = 0\r
+TCLDIR         = $(_TCLDIR)\r
+_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
+\r
+!endif # exist(...) && ! $(NEED_TCL_SOURCE)\r
+\r
+!endif # TCLDIR\r
+\r
+!ifndef _TCL_H\r
+MSG =^\r
+Failed to find tcl.h. The TCLDIR macro is set incorrectly or is not set and default path does not contain tcl.h.\r
+!error $(MSG)\r
+!endif\r
+\r
+# Now do the same to locate Tk headers and libs if project requires Tk\r
+!if $(NEED_TK)\r
+\r
+!if "$(TKDIR)" != ""\r
+\r
+_TKDIR = $(TKDIR:/=\)\r
+!if exist("$(_TKDIR)\include\tk.h")\r
+TKINSTALL      = 1\r
+_TK_H          = $(_TKDIR)\include\tk.h\r
+!elseif exist("$(_TKDIR)\generic\tk.h")\r
+TKINSTALL      = 0\r
+_TK_H          = $(_TKDIR)\generic\tk.h\r
+!endif\r
+\r
+!else # TKDIR not defined\r
+\r
+# Need to locate Tcl depending on whether it needs Tcl source or not.\r
+# If we don't, check the INSTALLDIR for an installed Tcl first\r
+\r
+!if exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)\r
+\r
+TKINSTALL      = 1\r
+# NOTE: we will be resetting _INSTALLDIR to _INSTALLDIR/lib for extensions\r
+# later so the \.. accounts for the /lib\r
+_TKDIR         = $(_INSTALLDIR)\..\r
+_TK_H          = $(_TKDIR)\include\tk.h\r
+TKDIR          = $(_TKDIR)\r
+\r
+!else # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)\r
+\r
+!if [echo _TKDIR = \> nmakehlp.out] \\r
+   || [nmakehlp -L generic\tk.h >> nmakehlp.out]\r
+!error *** Could not locate Tk source directory.\r
+!endif\r
+!include nmakehlp.out\r
+TKINSTALL      = 0\r
+TKDIR          = $(_TKDIR)\r
+_TK_H          = $(_TKDIR)\generic\tk.h\r
+\r
+!endif # exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE)\r
+\r
+!endif # TKDIR\r
+\r
+!ifndef _TK_H\r
+MSG =^\r
+Failed to find tk.h. The TKDIR macro is set incorrectly or is not set and default path does not contain tk.h.\r
+!error $(MSG)\r
+!endif\r
+\r
+!endif # NEED_TK\r
+\r
+!if $(NEED_TCL_SOURCE) && $(TCLINSTALL)\r
+MSG = ^\r
+*** Warning: This extension requires the source distribution of Tcl.^\r
+*** Please set the TCLDIR macro to point to the Tcl sources.\r
+!error $(MSG)\r
+!endif\r
+\r
+!if $(NEED_TK_SOURCE)\r
+!if $(TKINSTALL)\r
+MSG = ^\r
+*** Warning: This extension requires the source distribution of Tk.^\r
+*** Please set the TKDIR macro to point to the Tk sources.\r
+!error $(MSG)\r
+!endif\r
+!endif\r
+\r
+\r
+# If INSTALLDIR set to tcl installation root dir then reset to the\r
+# lib dir for installing extensions \r
+!if exist("$(_INSTALLDIR)\include\tcl.h")\r
+_INSTALLDIR=$(_INSTALLDIR)\lib\r
+!endif\r
+\r
+# END Case 2(c) or (d) - Building an extension\r
+!endif # if $(DOING_TCL)\r
+\r
+################################################################\r
+# 3. Determine compiler version and architecture\r
+# In this section, we figure out the compiler version and the\r
+# architecture for which we are building. This sets the\r
+# following macros:\r
+# VCVERSION - the internal compiler version as 1200, 1400, 1910 etc.\r
+#     This is also printed by the compiler in dotted form 19.10 etc.\r
+# VCVER - the "marketing version", for example Visual C++ 6 for internal\r
+#     compiler version 1200. This is kept only for legacy reasons as it\r
+#     does not make sense for recent Microsoft compilers. Only used for\r
+#     output directory names.\r
+# ARCH - set to IX86 or AMD64 depending on 32- or 64-bit target\r
+# NATIVE_ARCH - set to IX86 or AMD64 for the host machine\r
+# MACHINE - same as $(ARCH) - legacy\r
+# _VC_MANIFEST_EMBED_{DLL,EXE} - commands for embedding a manifest if needed\r
+# CFG_ENCODING - set to an character encoding.\r
+#   TBD - this is passed to compiler as TCL_CFGVAL_ENCODING but can't\r
+#   see where it is used\r
+\r
+cc32           = $(CC)   # built-in default.\r
+link32         = link\r
+lib32          = lib\r
+rc32           = $(RC)   # built-in default.\r
+\r
+#----------------------------------------------------------------\r
+# Figure out the compiler architecture and version by writing\r
+# the C macros to a file, preprocessing them with the C\r
+# preprocessor and reading back the created file\r
 \r
 _HASH=^#\r
 _VC_MANIFEST_EMBED_EXE=\r
@@ -66,16 +441,43 @@ VCVER=0
     && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \\r
     && ![echo ARCH=AMD64 >> vercl.x] \\r
     && ![echo $(_HASH)endif >> vercl.x] \\r
-    && ![cl -nologo -TC -P vercl.x $(ERRNULL)]\r
+    && ![$(cc32) -nologo -TC -P vercl.x 2>NUL]\r
 !include vercl.i\r
+!if $(VCVERSION) < 1900\r
 !if ![echo VCVER= ^\> vercl.vc] \\r
     && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]\r
 !include vercl.vc\r
 !endif\r
+!else\r
+# The simple calculation above does not apply to new Visual Studio releases\r
+# Keep the compiler version in its native form.\r
+VCVER = $(VCVERSION)\r
+!endif\r
+!endif\r
+\r
+!if ![del 2>NUL /q/f vercl.x vercl.i vercl.vc]\r
+!endif\r
+\r
+#----------------------------------------------------------------\r
+# The MACHINE macro is used by legacy makefiles so set it as well\r
+!ifdef MACHINE\r
+!if "$(MACHINE)" == "x86"\r
+!undef MACHINE\r
+MACHINE = IX86\r
+!elseif "$(MACHINE)" == "x64"\r
+!undef MACHINE\r
+MACHINE = AMD64\r
+!endif\r
+!if "$(MACHINE)" != "$(ARCH)"\r
+!error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH).\r
 !endif\r
-!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]\r
+!else\r
+MACHINE=$(ARCH)\r
 !endif\r
 \r
+#------------------------------------------------------------\r
+# Figure out the *host* architecture by reading the registry\r
+\r
 !if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86]\r
 NATIVE_ARCH=IX86\r
 !else\r
@@ -88,135 +490,192 @@ _VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -ou
 _VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2\r
 !endif\r
 \r
-!ifndef MACHINE\r
-MACHINE=$(ARCH)\r
-!endif\r
-\r
 !ifndef CFG_ENCODING\r
 CFG_ENCODING   = \"cp1252\"\r
 !endif\r
 \r
-!message ===============================================================================\r
+################################################################\r
+# 4. Build the nmakehlp program\r
+# This is a helper app we need to overcome nmake's limiting\r
+# environment. We will call out to it to get various bits of\r
+# information about supported compiler options etc.\r
+#\r
+# Tcl itself will always use the nmakehlp.c program which is\r
+# in its own source. This is the "master" copy and kept updated.\r
+#\r
+# Extensions built against an installed Tcl will use the installed\r
+# copy of Tcl's nmakehlp.c if there is one and their own version\r
+# otherwise. In the latter case, they would also be using their own\r
+# rules.vc. Note that older versions of Tcl do not install nmakehlp.c\r
+# or rules.vc.\r
+#\r
+# Extensions built against Tcl sources will use the one from the Tcl source.\r
+#\r
+# When building an extension using a sufficiently new version of Tcl,\r
+# rules-ext.vc will define NMAKEHLPC appropriately to point to the\r
+# copy of nmakehlp.c to be used.\r
 \r
-#----------------------------------------------------------\r
-# build the helper app we need to overcome nmake's limiting\r
-# environment.\r
-#----------------------------------------------------------\r
+!ifndef NMAKEHLPC\r
+# Default to the one in the current directory (the extension's own nmakehlp.c)\r
+NMAKEHLPC = nmakehlp.c\r
 \r
-!if !exist(nmakehlp.exe)\r
-!if [$(cc32) -nologo nmakehlp.c -link -subsystem:console > nul]\r
+!if !$(DOING_TCL)\r
+!if $(TCLINSTALL)\r
+!if exist("$(_TCLDIR)\lib\nmake\nmakehlp.c")\r
+NMAKEHLPC = $(_TCLDIR)\lib\nmake\nmakehlp.c\r
 !endif\r
+!else # ! $(TCLINSTALL)\r
+!if exist("$(_TCLDIR)\win\nmakehlp.c")\r
+NMAKEHLPC = $(_TCLDIR)\win\nmakehlp.c\r
 !endif\r
+!endif # $(TCLINSTALL)\r
+!endif # !$(DOING_TCL)\r
 \r
-#----------------------------------------------------------\r
-# Test for compiler features\r
-#----------------------------------------------------------\r
+!endif # NMAKEHLPC\r
 \r
-### test for optimizations\r
-!if [nmakehlp -c -Ot]\r
-!message *** Compiler has 'Optimizations'\r
-OPTIMIZING     = 1\r
-!else\r
-!message *** Compiler does not have 'Optimizations'\r
-OPTIMIZING     = 0\r
+# We always build nmakehlp even if it exists since we do not know\r
+# what source it was built from.\r
+!message *** Using $(NMAKEHLPC)\r
+!if [$(cc32) -nologo "$(NMAKEHLPC)" -link -subsystem:console > nul]\r
 !endif\r
 \r
-OPTIMIZATIONS   =\r
+################################################################\r
+# 5. Test for compiler features\r
+# Visual C++ compiler options have changed over the years. Check\r
+# which options are supported by the compiler in use.\r
+#\r
+# The following macros are set:\r
+# OPTIMIZATIONS - the compiler flags to be used for optimized builds\r
+# DEBUGFLAGS - the compiler flags to be used for debug builds\r
+# LINKERFLAGS - Flags passed to the linker \r
+#\r
+# Note that these are the compiler settings *available*, not those\r
+# that will be *used*. The latter depends on the OPTS macro settings\r
+# which we have not yet parsed.\r
+#\r
+# Also note that some of the flags in OPTIMIZATIONS are not really\r
+# related to optimization. They are placed there only for legacy reasons\r
+# as some extensions expect them to be included in that macro.\r
 \r
-!if [nmakehlp -c -Ot]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Ot\r
+# -Op improves float consistency. Note only needed for older compilers\r
+# Newer compilers do not need or support this option.\r
+!if [nmakehlp -c -Op]\r
+FPOPTS  = -Op\r
 !endif\r
 \r
-!if [nmakehlp -c -Oi]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Oi\r
+# Strict floating point semantics - present in newer compilers in lieu of -Op\r
+!if [nmakehlp -c -fp:strict]\r
+FPOPTS  = $(FPOPTS) -fp:strict\r
 !endif\r
 \r
-!if [nmakehlp -c -Op]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Op\r
+!if "$(MACHINE)" == "IX86"\r
+### test for pentium errata\r
+!if [nmakehlp -c -QI0f]\r
+!message *** Compiler has 'Pentium 0x0f fix'\r
+FPOPTS  = $(FPOPTS) -QI0f\r
+!else\r
+!message *** Compiler does not have 'Pentium 0x0f fix'\r
 !endif\r
-\r
-!if [nmakehlp -c -fp:strict]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -fp:strict\r
 !endif\r
 \r
-!if [nmakehlp -c -Gs]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -Gs\r
+### test for optimizations\r
+# /O2 optimization includes /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy as per\r
+# documentation. Note we do NOT want /Gs as that inserts a _chkstk\r
+# stack probe at *every* function entry, not just those with more than\r
+# a page of stack allocation resulting in a performance hit.  However,\r
+# /O2 documentation is misleading as its stack probes are simply the\r
+# default page size locals allocation probes and not what is implied\r
+# by an explicit /Gs option.\r
+\r
+OPTIMIZATIONS = $(FPOPTS)\r
+\r
+!if [nmakehlp -c -O2]\r
+!message *** Compiler has 'Optimizations'\r
+OPTIMIZING = 1\r
+OPTIMIZATIONS   = $(OPTIMIZATIONS) -O2\r
+!else\r
+# Legacy, really. All modern compilers support this\r
+!message *** Compiler does not have 'Optimizations'\r
+OPTIMIZING = 0\r
 !endif\r
 \r
+# Checks for buffer overflows in local arrays\r
 !if [nmakehlp -c -GS]\r
 OPTIMIZATIONS  = $(OPTIMIZATIONS) -GS\r
 !endif\r
 \r
+# Link time optimization. Note that this option (potentially) makes\r
+# generated libraries only usable by the specific VC++ version that\r
+# created it. Requires /LTCG linker option\r
 !if [nmakehlp -c -GL]\r
 OPTIMIZATIONS  = $(OPTIMIZATIONS) -GL\r
+CC_GL_OPT_ENABLED = 1\r
+!else\r
+# In newer compilers -GL and -YX are incompatible.\r
+!if [nmakehlp -c -YX]\r
+OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX\r
 !endif\r
+!endif # [nmakehlp -c -GL]\r
 \r
-DEBUGFLAGS     =\r
+DEBUGFLAGS     = $(FPOPTS)\r
 \r
+# Run time error checks. Not available or valid in a release, non-debug build\r
+# RTC is for modern compilers, -GZ is legacy\r
 !if [nmakehlp -c -RTC1]\r
 DEBUGFLAGS     = $(DEBUGFLAGS) -RTC1\r
 !elseif [nmakehlp -c -GZ]\r
 DEBUGFLAGS     = $(DEBUGFLAGS) -GZ\r
 !endif\r
 \r
-COMPILERFLAGS  =-W3 /DUNICODE /D_UNICODE /D_ATL_XP_TARGETING\r
-\r
-# In v13 -GL and -YX are incompatible.\r
-!if [nmakehlp -c -YX]\r
-!if ![nmakehlp -c -GL]\r
-OPTIMIZATIONS  = $(OPTIMIZATIONS) -YX\r
-!endif\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for pentium errata\r
-!if [nmakehlp -c -QI0f]\r
-!message *** Compiler has 'Pentium 0x0f fix'\r
-COMPILERFLAGS  = $(COMPILERFLAGS) -QI0f\r
-!else\r
-!message *** Compiler does not have 'Pentium 0x0f fix'\r
-!endif\r
-!endif\r
+#----------------------------------------------------------------\r
+# Linker flags\r
 \r
-!if "$(MACHINE)" == "IA64"\r
-### test for Itanium errata\r
-!if [nmakehlp -c -QIA64_Bx]\r
-!message *** Compiler has 'B-stepping errata workarounds'\r
-COMPILERFLAGS   = $(COMPILERFLAGS) -QIA64_Bx\r
-!else\r
-!message *** Compiler does not have 'B-stepping errata workarounds'\r
-!endif\r
-!endif\r
-\r
-# Prevents "LNK1561: entry point must be defined" error compiling from VS-IDE:\r
+# LINKER_TESTFLAGS are for internal use when we call nmakehlp to test\r
+# if the linker supports a specific option. Without these flags link will\r
+# return "LNK1561: entry point must be defined" error compiling from VS-IDE:\r
+# They are not passed through to the actual application / extension\r
+# link rules.\r
 !ifndef LINKER_TESTFLAGS\r
-LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmhlp-out.txt\r
-!endif\r
-\r
-!if "$(MACHINE)" == "IX86"\r
-### test for -align:4096, when align:512 will do.\r
-!if [nmakehlp -l -opt:nowin98 $(LINKER_TESTFLAGS)]\r
-!message *** Linker has 'Win98 alignment problem'\r
-ALIGN98_HACK   = 1\r
-!else\r
-!message *** Linker does not have 'Win98 alignment problem'\r
-ALIGN98_HACK   = 0\r
-!endif\r
-!else\r
-ALIGN98_HACK   = 0\r
+LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmakehlp.out\r
 !endif\r
 \r
 LINKERFLAGS     =\r
 \r
+# If compiler has enabled link time optimization, linker must too with -ltcg\r
+!ifdef CC_GL_OPT_ENABLED\r
 !if [nmakehlp -l -ltcg $(LINKER_TESTFLAGS)]\r
-LINKERFLAGS     =-ltcg\r
-!endif\r
-\r
-#----------------------------------------------------------\r
-# Decode the options requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]\r
+LINKERFLAGS     = $(LINKERFLAGS) -ltcg\r
+!endif\r
+!endif\r
+\r
+########################################################################\r
+# 6. Parse the OPTS macro to work out the requested build configuration.\r
+# Based on this, we will construct the actual switches to be passed to the\r
+# compiler and linker using the macros defined in the previous section.\r
+# The following macros are defined by this section based on OPTS\r
+# STATIC_BUILD - 0 -> Tcl is to be built as a shared library\r
+#                1 -> build as a static library and shell\r
+# TCL_THREADS - legacy but always 1 on Windows since winsock requires it.\r
+# DEBUG - 1 -> debug build, 0 -> release builds\r
+# SYMBOLS - 1 -> generate PDB's, 0 -> no PDB's\r
+# PROFILE - 1 -> generate profiling info, 0 -> no profiling\r
+# PGO     - 1 -> profile based optimization, 0 -> no\r
+# MSVCRT  - 1 -> link to dynamic C runtime even when building static Tcl build\r
+#           0 -> link to static C runtime for static Tcl build.\r
+#           Does not impact shared Tcl builds (STATIC_BUILD == 0)\r
+# TCL_USE_STATIC_PACKAGES - 1 -> statically link the registry and dde extensions\r
+#           in the Tcl shell. 0 -> keep them as shared libraries\r
+#           Does not impact shared Tcl builds.\r
+# USE_THREAD_ALLOC - 1 -> Use a shared global free pool for allocation.\r
+#           0 -> Use the non-thread allocator.\r
+# UNCHECKED - 1 -> when doing a debug build with symbols, use the release\r
+#           C runtime, 0 -> use the debug C runtime.\r
+# USE_STUBS - 1 -> compile to use stubs interfaces, 0 -> direct linking\r
+# CONFIG_CHECK - 1 -> check current build configuration against Tcl\r
+#           configuration (ignored for Tcl itself)\r
+# Further, LINKERFLAGS are modified based on above.\r
+\r
+# Default values for all the above\r
 STATIC_BUILD   = 0\r
 TCL_THREADS    = 1\r
 DEBUG          = 0\r
@@ -224,17 +683,32 @@ SYMBOLS           = 0
 PROFILE                = 0\r
 PGO            = 0\r
 MSVCRT         = 1\r
-LOIMPACT       = 0\r
 TCL_USE_STATIC_PACKAGES        = 0\r
 USE_THREAD_ALLOC = 1\r
 UNCHECKED      = 0\r
+CONFIG_CHECK    = 1\r
+!if $(DOING_TCL)\r
+USE_STUBS       = 0\r
 !else\r
+USE_STUBS       = 1\r
+!endif\r
+\r
+# If OPTS is not empty AND does not contain "none" which turns off all OPTS\r
+# set the above macros based on OPTS content\r
+!if "$(OPTS)" != "" && ![nmakehlp -f "$(OPTS)" "none"]\r
+\r
+# OPTS are specified, parse them\r
+\r
 !if [nmakehlp -f $(OPTS) "static"]\r
 !message *** Doing static\r
 STATIC_BUILD   = 1\r
-!else\r
-STATIC_BUILD   = 0\r
 !endif\r
+\r
+!if [nmakehlp -f $(OPTS) "nostubs"]\r
+!message *** Not using stubs\r
+USE_STUBS      = 0\r
+!endif\r
+\r
 !if [nmakehlp -f $(OPTS) "nomsvcrt"]\r
 !message *** Doing nomsvcrt\r
 MSVCRT         = 0\r
@@ -249,13 +723,15 @@ MSVCRT            = 1
 MSVCRT         = 0\r
 !endif\r
 !endif\r
-!endif\r
+!endif # [nmakehlp -f $(OPTS) "nomsvcrt"]\r
+\r
 !if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD)\r
 !message *** Doing staticpkg\r
 TCL_USE_STATIC_PACKAGES        = 1\r
 !else\r
 TCL_USE_STATIC_PACKAGES        = 0\r
 !endif\r
+\r
 !if [nmakehlp -f $(OPTS) "nothreads"]\r
 !message *** Compile explicitly for non-threaded tcl\r
 TCL_THREADS    = 0\r
@@ -264,24 +740,28 @@ USE_THREAD_ALLOC= 0
 TCL_THREADS    = 1\r
 USE_THREAD_ALLOC= 1\r
 !endif\r
+\r
 !if [nmakehlp -f $(OPTS) "symbols"]\r
 !message *** Doing symbols\r
 DEBUG          = 1\r
 !else\r
 DEBUG          = 0\r
 !endif\r
+\r
 !if [nmakehlp -f $(OPTS) "pdbs"]\r
 !message *** Doing pdbs\r
 SYMBOLS                = 1\r
 !else\r
 SYMBOLS                = 0\r
 !endif\r
+\r
 !if [nmakehlp -f $(OPTS) "profile"]\r
 !message *** Doing profile\r
 PROFILE                = 1\r
 !else\r
 PROFILE                = 0\r
 !endif\r
+\r
 !if [nmakehlp -f $(OPTS) "pgi"]\r
 !message *** Doing profile guided optimization instrumentation\r
 PGO            = 1\r
@@ -291,44 +771,229 @@ PGO              = 2
 !else\r
 PGO            = 0\r
 !endif\r
+\r
 !if [nmakehlp -f $(OPTS) "loimpact"]\r
-!message *** Doing loimpact\r
-LOIMPACT       = 1\r
-!else\r
-LOIMPACT       = 0\r
+!message *** Warning: ignoring option "loimpact" - deprecated on modern Windows.\r
 !endif\r
+\r
+# TBD - should get rid of this option\r
 !if [nmakehlp -f $(OPTS) "thrdalloc"]\r
 !message *** Doing thrdalloc\r
 USE_THREAD_ALLOC = 1\r
 !endif\r
+\r
 !if [nmakehlp -f $(OPTS) "tclalloc"]\r
-!message *** Doing tclalloc\r
 USE_THREAD_ALLOC = 0\r
 !endif\r
+\r
 !if [nmakehlp -f $(OPTS) "unchecked"]\r
 !message *** Doing unchecked\r
 UNCHECKED = 1\r
 !else\r
 UNCHECKED = 0\r
 !endif\r
+\r
+!if [nmakehlp -f $(OPTS) "noconfigcheck"]\r
+CONFIG_CHECK = 1\r
+!else\r
+CONFIG_CHECK = 0\r
 !endif\r
 \r
-#----------------------------------------------------------\r
-# Figure-out how to name our intermediate and output directories.\r
-# We wouldn't want different builds to use the same .obj files\r
-# by accident.\r
-#----------------------------------------------------------\r
+!endif # "$(OPTS)" != ""  && ... parsing of OPTS\r
+\r
+# Set linker flags based on above\r
+\r
+!if $(PGO) > 1\r
+!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)]\r
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize\r
+!else\r
+MSG=^\r
+This compiler does not support profile guided optimization.\r
+!error $(MSG)\r
+!endif\r
+!elseif $(PGO) > 0\r
+!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)]\r
+LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument\r
+!else\r
+MSG=^\r
+This compiler does not support profile guided optimization.\r
+!error $(MSG)\r
+!endif\r
+!endif\r
+\r
+################################################################\r
+# 7. Parse the STATS macro to configure code instrumentation\r
+# The following macros are set by this section:\r
+# TCL_MEM_DEBUG - 1 -> enables memory allocation instrumentation\r
+#                 0 -> disables\r
+# TCL_COMPILE_DEBUG - 1 -> enables byte compiler logging\r
+#                     0 -> disables\r
+\r
+# Default both are off\r
+TCL_MEM_DEBUG      = 0\r
+TCL_COMPILE_DEBUG   = 0\r
+\r
+!if "$(STATS)" != "" && ![nmakehlp -f "$(STATS)" "none"]\r
+\r
+!if [nmakehlp -f $(STATS) "memdbg"]\r
+!message *** Doing memdbg\r
+TCL_MEM_DEBUG      = 1\r
+!else\r
+TCL_MEM_DEBUG      = 0\r
+!endif\r
+\r
+!if [nmakehlp -f $(STATS) "compdbg"]\r
+!message *** Doing compdbg\r
+TCL_COMPILE_DEBUG   = 1\r
+!else\r
+TCL_COMPILE_DEBUG   = 0\r
+!endif\r
+\r
+!endif\r
+\r
+####################################################################\r
+# 8. Parse the CHECKS macro to configure additional compiler checks\r
+# The following macros are set by this section:\r
+# WARNINGS - compiler switches that control the warnings level\r
+# TCL_NO_DEPRECATED - 1 -> disable support for deprecated functions\r
+#                     0 -> enable deprecated functions\r
+\r
+# Defaults - Permit deprecated functions and warning level 3\r
+TCL_NO_DEPRECATED          = 0\r
+WARNINGS                   = -W3\r
+\r
+!if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"]\r
+\r
+!if [nmakehlp -f $(CHECKS) "nodep"]\r
+!message *** Doing nodep check\r
+TCL_NO_DEPRECATED          = 1\r
+!endif\r
+\r
+!if [nmakehlp -f $(CHECKS) "fullwarn"]\r
+!message *** Doing full warnings check\r
+WARNINGS                   = -W4\r
+!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)]\r
+LINKERFLAGS                = $(LINKERFLAGS) -warn:3\r
+!endif\r
+!endif\r
+\r
+!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]\r
+!message *** Doing 64bit portability warnings\r
+WARNINGS                   = $(WARNINGS) -Wp64\r
+!endif\r
+\r
+!endif\r
+\r
+################################################################\r
+# 9. Extract various version numbers\r
+# For Tcl and Tk, version numbers are extracted from tcl.h and tk.h\r
+# respectively. For extensions, versions are extracted from the\r
+# configure.in or configure.ac from the TEA configuration if it\r
+# exists, and unset otherwise.\r
+# Sets the following macros:\r
+# TCL_MAJOR_VERSION\r
+# TCL_MINOR_VERSION\r
+# TCL_PATCH_LEVEL\r
+# TCL_VERSION\r
+# TK_MAJOR_VERSION\r
+# TK_MINOR_VERSION\r
+# TK_PATCH_LEVEL\r
+# TK_VERSION\r
+# DOTVERSION - set as (for example) 2.5\r
+# VERSION - set as (for example 25)\r
+#--------------------------------------------------------------\r
+\r
+!if [echo REM = This file is generated from rules.vc > versions.vc]\r
+!endif\r
+!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TCL_MINOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \\r
+   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]\r
+!endif\r
+\r
+!if defined(_TK_H)\r
+!if [echo TK_MAJOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TK_MINOR_VERSION = \>> versions.vc] \\r
+   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]\r
+!endif\r
+!if [echo TK_PATCH_LEVEL = \>> versions.vc] \\r
+   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]\r
+!endif\r
+!endif # _TK_H\r
+\r
+!include versions.vc\r
+\r
+TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)\r
+TCL_DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)\r
+!if defined(_TK_H)\r
+TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)\r
+TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)\r
+!endif\r
+\r
+# Set DOTVERSION and VERSION\r
+!if $(DOING_TCL)\r
 \r
-#----------------------------------------\r
-# Naming convention:\r
+DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)\r
+VERSION = $(TCL_VERSION)\r
+\r
+!elseif $(DOING_TK)\r
+\r
+DOTVERSION = $(TK_DOTVERSION)\r
+VERSION = $(TK_VERSION)\r
+\r
+!else # Doing a non-Tk extension\r
+\r
+# If parent makefile has not defined DOTVERSION, try to get it from TEA\r
+# first from a configure.in file, and then from configure.ac\r
+!ifndef DOTVERSION\r
+!if [echo DOTVERSION = \> versions.vc] \\r
+   || [nmakehlp -V $(ROOT)\configure.in ^[$(PROJECT)^] >> versions.vc]\r
+!if [echo DOTVERSION = \> versions.vc] \\r
+   || [nmakehlp -V $(ROOT)\configure.ac ^[$(PROJECT)^] >> versions.vc]\r
+!error *** Could not figure out extension version. Please define DOTVERSION in parent makefile before including rules.vc.\r
+!endif\r
+!endif\r
+!include versions.vc\r
+!endif # DOTVERSION\r
+VERSION         = $(DOTVERSION:.=)\r
+\r
+!endif # $(DOING_TCL) ... etc.\r
+\r
+################################################################\r
+# 10. Construct output directory and file paths\r
+# Figure-out how to name our intermediate and output directories.\r
+# In order to avoid inadvertent mixing of object files built using\r
+# different compilers, build configurations etc.,\r
+#\r
+# Naming convention (suffixes):\r
 #   t = full thread support.\r
-#   s = static library (as opposed to an\r
-#      import library)\r
-#   g = linked to the debug enabled C\r
-#      run-time.\r
-#   x = special static build when it\r
-#      links to the dynamic C run-time.\r
-#----------------------------------------\r
+#   s = static library (as opposed to an import library)\r
+#   g = linked to the debug enabled C run-time.\r
+#   x = special static build when it links to the dynamic C run-time.\r
+#\r
+# The following macros are set in this section:\r
+# SUFX - the suffix to use for binaries based on above naming convention\r
+# BUILDDIRTOP - the toplevel default output directory\r
+#      is of the form {Release,Debug}[_AMD64][_COMPILERVERSION]\r
+# TMP_DIR - directory where object files are created\r
+# OUT_DIR - directory where output executables are created\r
+# Both TMP_DIR and OUT_DIR are defaulted only if not defined by the\r
+# parent makefile (or command line). The default values are\r
+# based on BUILDDIRTOP.\r
+# STUBPREFIX - name of the stubs library for this project\r
+# PRJIMPLIB - output path of the generated project import library\r
+# PRJLIBNAME - name of generated project library\r
+# PRJLIB     - output path of generated project library\r
+# PRJSTUBLIBNAME - name of the generated project stubs library\r
+# PRJSTUBLIB - output path of the generated project stubs library\r
+# RESFILE - output resource file (only if not static build)\r
+\r
 SUFX       = tsgx\r
 \r
 !if $(DEBUG)\r
@@ -381,80 +1046,185 @@ OUT_DIR     = $(TMP_DIR)
 !endif\r
 !endif\r
 \r
-\r
-#----------------------------------------------------------\r
-# Decode the statistics requested.\r
-#----------------------------------------------------------\r
-\r
-!if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"]\r
-TCL_MEM_DEBUG      = 0\r
-TCL_COMPILE_DEBUG   = 0\r
-!else\r
-!if [nmakehlp -f $(STATS) "memdbg"]\r
-!message *** Doing memdbg\r
-TCL_MEM_DEBUG      = 1\r
-!else\r
-TCL_MEM_DEBUG      = 0\r
-!endif\r
-!if [nmakehlp -f $(STATS) "compdbg"]\r
-!message *** Doing compdbg\r
-TCL_COMPILE_DEBUG   = 1\r
-!else\r
-TCL_COMPILE_DEBUG   = 0\r
+# Relative paths -> absolute\r
+!if [echo OUT_DIR = \> nmakehlp.out] \\r
+   || [nmakehlp -Q "$(OUT_DIR)" >> nmakehlp.out]\r
+!error *** Could not fully qualify path OUT_DIR=$(OUT_DIR)\r
 !endif\r
+!if [echo TMP_DIR = \>> nmakehlp.out] \\r
+   || [nmakehlp -Q "$(TMP_DIR)" >> nmakehlp.out]\r
+!error *** Could not fully qualify path TMP_DIR=$(TMP_DIR)\r
 !endif\r
+!include nmakehlp.out\r
 \r
+# The name of the stubs library for the project being built\r
+STUBPREFIX      = $(PROJECT)stub\r
 \r
-#----------------------------------------------------------\r
-# Decode the checks requested.\r
-#----------------------------------------------------------\r
+# Set up paths to various Tcl executables and libraries needed by extensions\r
+!if $(DOING_TCL)\r
 \r
-!if "$(CHECKS)" == "" || [nmakehlp -f "$(CHECKS)" "none"]\r
-TCL_NO_DEPRECATED          = 0\r
-WARNINGS                   = -W3\r
-!else\r
-!if [nmakehlp -f $(CHECKS) "nodep"]\r
-!message *** Doing nodep check\r
-TCL_NO_DEPRECATED          = 1\r
-!else\r
-TCL_NO_DEPRECATED          = 0\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "fullwarn"]\r
-!message *** Doing full warnings check\r
-WARNINGS                   = -W4\r
-!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)]\r
-LINKERFLAGS                = $(LINKERFLAGS) -warn:3\r
-!endif\r
-!else\r
-WARNINGS                   = -W3\r
-!endif\r
-!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64]\r
-!message *** Doing 64bit portability warnings\r
-WARNINGS                   = $(WARNINGS) -Wp64\r
-!endif\r
+TCLSHNAME       = $(PROJECT)sh$(TCL_VERSION)$(SUFX).exe\r
+TCLSH          = $(OUT_DIR)\$(TCLSHNAME)\r
+TCLIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib\r
+TCLLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)\r
+TCLLIB         = $(OUT_DIR)\$(TCLLIBNAME)\r
+\r
+TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
+TCLSTUBLIB     = $(OUT_DIR)\$(TCLSTUBLIBNAME)\r
+TCL_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"\r
+\r
+!else # ! $(DOING_TCL)\r
+\r
+!if $(TCLINSTALL) # Building against an installed Tcl\r
+\r
+TCLSH          = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe\r
+!if !exist("$(TCLSH)") && $(TCL_THREADS)\r
+TCLSH           = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe\r
 !endif\r
+TCLSTUBLIB     = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib\r
+TCLIMPLIB      = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib\r
+TCL_LIBRARY    = $(_TCLDIR)\lib\r
+TCLREGLIB      = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib\r
+TCLDDELIB      = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib\r
+TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target\r
+TCL_INCLUDES    = -I"$(_TCLDIR)\include"\r
 \r
-!if $(PGO) > 1\r
-!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)]\r
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize\r
-!else\r
-MSG=^\r
-This compiler does not support profile guided optimization.\r
-!error $(MSG)\r
+!else # Building against Tcl sources\r
+\r
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe\r
+!if !exist($(TCLSH)) && $(TCL_THREADS)\r
+TCLSH          = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe\r
 !endif\r
-!elseif $(PGO) > 0\r
-!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)]\r
-LINKERFLAGS    = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument\r
+TCLSTUBLIB     = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib\r
+TCLIMPLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib\r
+TCL_LIBRARY    = $(_TCLDIR)\library\r
+TCLREGLIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib\r
+TCLDDELIB      = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib\r
+TCLTOOLSDIR    = $(_TCLDIR)\tools\r
+TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"\r
+\r
+!endif # TCLINSTALL\r
+\r
+tcllibs = "$(TCLSTUBLIB)" "$(TCLIMPLIB)"\r
+\r
+!endif # $(DOING_TCL)\r
+\r
+# We need a tclsh that will run on the host machine as part of the build.\r
+# IX86 runs on all architectures.\r
+!ifndef TCLSH_NATIVE\r
+!if "$(MACHINE)" == "IX86" || "$(MACHINE)" == "$(NATIVE_ARCH)"\r
+TCLSH_NATIVE   = $(TCLSH)\r
 !else\r
-MSG=^\r
-This compiler does not support profile guided optimization.\r
-!error $(MSG)\r
+!error You must explicitly set TCLSH_NATIVE for cross-compilation\r
 !endif\r
 !endif\r
 \r
-#----------------------------------------------------------\r
-# Set our defines now armed with our options.\r
-#----------------------------------------------------------\r
+# Do the same for Tk and Tk extensions that require the Tk libraries\r
+!if $(DOING_TK) || $(NEED_TK)\r
+WISHNAMEPREFIX = wish\r
+WISHNAME = $(WISHNAMEPREFIX)$(TK_VERSION)$(SUFX).exe\r
+TKLIBNAME      = $(PROJECT)$(TK_VERSION)$(SUFX).$(EXT)\r
+TKSTUBLIBNAME  = tkstub$(TK_VERSION).lib\r
+TKIMPLIBNAME   = tk$(TK_VERSION)$(SUFX).lib\r
+\r
+!if $(DOING_TK)\r
+WISH           = $(OUT_DIR)\$(WISHNAME)\r
+TKSTUBLIB      = $(OUT_DIR)\$(TKSTUBLIBNAME)\r
+TKIMPLIB       = $(OUT_DIR)\$(TKIMPLIBNAME)\r
+TKLIB          = $(OUT_DIR)\$(TKLIBNAME)\r
+TK_INCLUDES    = -I"$(WINDIR)" -I"$(GENERICDIR)"\r
+\r
+!else # effectively NEED_TK\r
+\r
+!if $(TKINSTALL) # Building against installed Tk\r
+WISH           = $(_TKDIR)\bin\$(WISHNAME)\r
+TKSTUBLIB      = $(_TKDIR)\lib\$(TKSTUBLIBNAME)\r
+TKIMPLIB       = $(_TKDIR)\lib\$(TKIMPLIBNAME)\r
+TK_INCLUDES     = -I"$(_TKDIR)\include"\r
+!else # Building against Tk sources\r
+WISH           = $(_TKDIR)\win\$(BUILDDIRTOP)\$(WISHNAME)\r
+TKSTUBLIB      = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKSTUBLIBNAME)\r
+TKIMPLIB       = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKIMPLIBNAME)\r
+TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"\r
+!endif # TKINSTALL\r
+tklibs = "$(TKSTUBLIB)" "$(TKIMPLIB)"\r
+\r
+!endif # $(DOING_TK)\r
+!endif # $(DOING_TK) || $(NEED_TK)\r
+\r
+# Various output paths\r
+PRJIMPLIB      = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib\r
+PRJLIBNAME     = $(PROJECT)$(VERSION)$(SUFX).$(EXT)\r
+PRJLIB         = $(OUT_DIR)\$(PRJLIBNAME)\r
+\r
+PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib\r
+PRJSTUBLIB     = $(OUT_DIR)\$(PRJSTUBLIBNAME)\r
+\r
+# If extension parent makefile has not defined a resource definition file,\r
+# we will generate one from standard template.\r
+!if !$(DOING_TCL) && !$(DOING_TK) && !$(STATIC_BUILD)\r
+!ifdef RCFILE\r
+RESFILE = $(TMP_DIR)\$(RCFILE:.rc=.res)\r
+!else\r
+RESFILE = $(TMP_DIR)\$(PROJECT).res\r
+!endif\r
+!endif\r
+\r
+###################################################################\r
+# 11. Construct the paths for the installation directories\r
+# The following macros get defined in this section:\r
+# LIB_INSTALL_DIR - where libraries should be installed\r
+# BIN_INSTALL_DIR - where the executables should be installed\r
+# DOC_INSTALL_DIR - where documentation should be installed\r
+# SCRIPT_INSTALL_DIR - where scripts should be installed\r
+# INCLUDE_INSTALL_DIR - where C include files should be installed\r
+# DEMO_INSTALL_DIR - where demos should be installed\r
+# PRJ_INSTALL_DIR - where package will be installed (not set for tcl and tk)\r
+\r
+!if $(DOING_TCL) || $(DOING_TK)\r
+LIB_INSTALL_DIR                = $(_INSTALLDIR)\lib\r
+BIN_INSTALL_DIR                = $(_INSTALLDIR)\bin\r
+DOC_INSTALL_DIR                = $(_INSTALLDIR)\doc\r
+!if $(DOING_TCL)\r
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)\r
+!else # DOING_TK\r
+SCRIPT_INSTALL_DIR     = $(_INSTALLDIR)\lib\$(PROJECT)$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)\r
+!endif\r
+DEMO_INSTALL_DIR       = $(SCRIPT_INSTALL_DIR)\demos\r
+INCLUDE_INSTALL_DIR    = $(_INSTALLDIR)\include\r
+\r
+!else # extension other than Tk\r
+\r
+PRJ_INSTALL_DIR         = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)\r
+LIB_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
+BIN_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
+DOC_INSTALL_DIR                = $(PRJ_INSTALL_DIR)\r
+SCRIPT_INSTALL_DIR     = $(PRJ_INSTALL_DIR)\r
+DEMO_INSTALL_DIR       = $(PRJ_INSTALL_DIR)\demos\r
+INCLUDE_INSTALL_DIR    = $(_TCLDIR)\include\r
+\r
+!endif\r
+\r
+###################################################################\r
+# 12. Set up actual options to be passed to the compiler and linker\r
+# Now we have all the information we need, set up the actual flags and\r
+# options that we will pass to the compiler and linker. The main\r
+# makefile should use these in combination with whatever other flags\r
+# and switches are specific to it.\r
+# The following macros are defined, names are for historical compatibility:\r
+# OPTDEFINES - /Dxxx C macro flags based on user-specified OPTS\r
+# COMPILERFLAGS - /Dxxx C macro flags independent of any configuration opttions\r
+# crt - Compiler switch that selects the appropriate C runtime\r
+# cdebug - Compiler switches related to debug AND optimizations\r
+# cwarn - Compiler switches that set warning levels\r
+# cflags - complete compiler switches (subsumes cdebug and cwarn)\r
+# ldebug - Linker switches controlling debug information and optimization\r
+# lflags - complete linker switches (subsumes ldebug) except subsystem type\r
+# dlllflags - complete linker switches to build DLLs (subsumes lflags)\r
+# conlflags - complete linker switches for console program (subsumes lflags)\r
+# guilflags - complete linker switches for GUI program (subsumes lflags)\r
+# baselibs - minimum Windows libraries required. Parent makefile can\r
+#    define PRJ_LIBS before including rules.rc if additional libs are needed\r
 \r
 OPTDEFINES     = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) -DSTDC_HEADERS\r
 \r
@@ -477,6 +1247,17 @@ OPTDEFINES        = $(OPTDEFINES) -DSTATIC_BUILD
 OPTDEFINES     = $(OPTDEFINES) -DTCL_NO_DEPRECATED\r
 !endif\r
 \r
+!if $(USE_STUBS)\r
+# Note we do not define USE_TCL_STUBS even when building tk since some\r
+# test targets in tk do not use stubs\r
+!if ! $(DOING_TCL)\r
+USE_STUBS_DEFS  = -DUSE_TCL_STUBS -DUSE_TCLOO_STUBS\r
+!if $(NEED_TK)\r
+USE_STUBS_DEFS  = $(USE_STUBS_DEFS) -DUSE_TK_STUBS\r
+!endif\r
+!endif\r
+!endif # USE_STUBS\r
+\r
 !if !$(DEBUG)\r
 OPTDEFINES     = $(OPTDEFINES) -DNDEBUG\r
 !if $(OPTIMIZING)\r
@@ -486,223 +1267,457 @@ OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
 !if $(PROFILE)\r
 OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_PROFILED\r
 !endif\r
-!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"\r
+!if "$(MACHINE)" == "AMD64"\r
 OPTDEFINES     = $(OPTDEFINES) -DTCL_CFG_DO64BIT\r
 !endif\r
 !if $(VCVERSION) < 1300\r
 OPTDEFINES     = $(OPTDEFINES) -DNO_STRTOI64\r
 !endif\r
 \r
-#----------------------------------------------------------\r
-# Locate the Tcl headers to build against\r
-#----------------------------------------------------------\r
-\r
-!if "$(PROJECT)" == "tcl"\r
-\r
-_TCL_H          = ..\generic\tcl.h\r
+# _ATL_XP_TARGETING - Newer SDK's need this to build for XP\r
+COMPILERFLAGS  = /D_ATL_XP_TARGETING\r
 \r
+# Following is primarily for the benefit of extensions. Tcl 8.5 builds\r
+# Tcl without /DUNICODE, while 8.6 builds with it defined. When building\r
+# an extension, it is advisable (but not mandated) to use the same Windows\r
+# API as the Tcl build. This is accordingly defaulted below. A particular\r
+# extension can override this by pre-definining USE_WIDECHAR_API.\r
+!ifndef USE_WIDECHAR_API\r
+!if $(TCL_VERSION) > 85\r
+USE_WIDECHAR_API = 1\r
 !else\r
+USE_WIDECHAR_API = 0\r
+!endif\r
+!endif\r
 \r
-# If INSTALLDIR set to tcl root dir then reset to the lib dir.\r
-!if exist("$(_INSTALLDIR)\include\tcl.h")\r
-_INSTALLDIR=$(_INSTALLDIR)\lib\r
+!if $(USE_WIDECHAR_API)\r
+COMPILERFLAGS = $(COMPILERFLAGS) /DUNICODE /D_UNICODE \r
 !endif\r
 \r
-!if !defined(TCLDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCLDIR                = $(_INSTALLDIR)\..\r
-_TCL_H          = $(_INSTALLDIR)\..\include\tcl.h\r
-TCLDIR          = $(_INSTALLDIR)\..\r
+# Like the TEA system only set this non empty for non-Tk extensions\r
+# Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME\r
+# so we pass both\r
+!if !$(DOING_TCL) && !$(DOING_TK)\r
+PKGNAMEFLAGS = -DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \\r
+               -DPACKAGE_TCLNAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \\r
+               -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \\r
+               -DMODULE_SCOPE=extern \r
+!endif\r
+\r
+# crt picks the C run time based on selected OPTS\r
+!if $(MSVCRT)\r
+!if $(DEBUG) && !$(UNCHECKED)\r
+crt = -MDd\r
 !else\r
-MSG=^\r
-Failed to find tcl.h.  Set the TCLDIR macro.\r
-!error $(MSG)\r
+crt = -MD\r
 !endif\r
 !else\r
-_TCLDIR        = $(TCLDIR:/=\)\r
-!if exist("$(_TCLDIR)\include\tcl.h")\r
-TCLINSTALL     = 1\r
-_TCL_H          = $(_TCLDIR)\include\tcl.h\r
-!elseif exist("$(_TCLDIR)\generic\tcl.h")\r
-TCLINSTALL     = 0\r
-_TCL_H          = $(_TCLDIR)\generic\tcl.h\r
+!if $(DEBUG) && !$(UNCHECKED)\r
+crt = -MTd\r
 !else\r
-MSG =^\r
-Failed to find tcl.h.  The TCLDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
+crt = -MT\r
 !endif\r
 !endif\r
 \r
-#--------------------------------------------------------------\r
-# Extract various version numbers from tcl headers\r
-# The generated file is then included in the makefile.\r
-#--------------------------------------------------------------\r
+# cdebug includes compiler options for debugging as well as optimization.\r
+!if $(DEBUG)\r
 \r
-!if [echo REM = This file is generated from rules.vc > versions.vc]\r
-!endif\r
-!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TCL_MINOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc]\r
-!endif\r
-!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \\r
-   && [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc]\r
+# In debugging mode, optimizations need to be disabled\r
+cdebug = -Zi -Od $(DEBUGFLAGS)\r
+\r
+!else\r
+\r
+cdebug = $(OPTIMIZATIONS)\r
+!if $(SYMBOLS)\r
+cdebug = $(cdebug) -Zi\r
 !endif\r
 \r
-# If building the tcl core then we need additional package versions\r
-!if "$(PROJECT)" == "tcl"\r
-!if [echo PKG_HTTP_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\http\pkgIndex.tcl http >> versions.vc]\r
+!endif # $(DEBUG)\r
+\r
+# cwarn includes default warning levels.\r
+cwarn = $(WARNINGS)\r
+\r
+!if "$(MACHINE)" == "AMD64"\r
+# Disable pointer<->int warnings related to cast between different sizes\r
+# There are a gadzillion of these due to use of ClientData and\r
+# clutter up compiler\r
+# output increasing chance of a real warning getting lost. So disable them.\r
+# Eventually some day, Tcl will be 64-bit clean.\r
+cwarn = $(cwarn) -wd4311 -wd4312\r
 !endif\r
-!if [echo PKG_TCLTEST_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\tcltest\pkgIndex.tcl tcltest >> versions.vc]\r
+\r
+### Common compiler options that are architecture specific\r
+!if "$(MACHINE)" == "ARM"\r
+carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE\r
+!else\r
+carch =\r
 !endif\r
-!if [echo PKG_MSGCAT_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\msgcat\pkgIndex.tcl msgcat >> versions.vc]\r
+\r
+!if $(DEBUG)\r
+# Turn warnings into errors\r
+cwarn = $(cwarn) -WX\r
 !endif\r
-!if [echo PKG_PLATFORM_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform " >> versions.vc]\r
+\r
+INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES)\r
+!if !$(DOING_TCL) && !$(DOING_TK)\r
+INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WINDIR)" -I"$(COMPATDIR)"\r
 !endif\r
-!if [echo PKG_SHELL_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\platform\pkgIndex.tcl "platform::shell" >> versions.vc]\r
+\r
+# These flags are defined roughly in the order of the pre-reform\r
+# rules.vc/makefile.vc to help visually compare that the pre- and\r
+# post-reform build logs\r
+\r
+# cflags contains generic flags used for building practically all object files\r
+cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\ $(cdebug)\r
+\r
+# appcflags contains $(cflags) and flags for building the application\r
+# object files (e.g. tclsh, or wish) pkgcflags contains $(cflags) plus\r
+# flags used for building shared object files The two differ in the\r
+# BUILD_$(PROJECT) macro which should be defined only for the shared\r
+# library *implementation* and not for its caller interface\r
+\r
+appcflags = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES) $(USE_STUBS_DEFS)\r
+appcflags_nostubs = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES)\r
+pkgcflags = $(appcflags) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)\r
+pkgcflags_nostubs = $(appcflags_nostubs) $(PKGNAMEFLAGS) -DBUILD_$(PROJECT)\r
+\r
+# stubscflags contains $(cflags) plus flags used for building a stubs\r
+# library for the package.  Note: -DSTATIC_BUILD is defined in\r
+# $(OPTDEFINES) only if the OPTS configuration indicates a static\r
+# library. However the stubs library is ALWAYS static hence included\r
+# here irrespective of the OPTS setting.\r
+#\r
+# TBD - tclvfs has a comment that stubs libs should not be compiled with -GL\r
+# without stating why. Tcl itself compiled stubs libs with this flag.\r
+# so we do not remove it from cflags. -GL may prevent extensions\r
+# compiled with one VC version to fail to link against stubs library\r
+# compiled with another VC version. Check for this and fix accordingly.\r
+stubscflags = $(cflags) $(PKGNAMEFLAGS) $(PRJ_DEFINES) $(OPTDEFINES) -Zl -DSTATIC_BUILD $(INCLUDES)\r
+\r
+# Link flags \r
+\r
+!if $(DEBUG)\r
+ldebug = -debug -debugtype:cv\r
+!else\r
+ldebug = -release -opt:ref -opt:icf,3\r
+!if $(SYMBOLS)\r
+ldebug = $(ldebug) -debug -debugtype:cv\r
 !endif\r
-!if [echo PKG_DDE_VER = \>> versions.vc] \\r
-   && [nmakehlp -V ..\library\dde\pkgIndex.tcl "dde " >> versions.vc]\r
 !endif\r
-!if [echo PKG_REG_VER =\>> versions.vc] \\r
-   && [nmakehlp -V ..\library\reg\pkgIndex.tcl registry >> versions.vc]\r
+\r
+# Note: Profiling is currently only possible with the Visual Studio Enterprise\r
+!if $(PROFILE)\r
+ldebug= $(ldebug) -profile\r
 !endif\r
+\r
+### Declarations common to all linker versions \r
+lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)\r
+\r
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900\r
+lflags = $(lflags) -nodefaultlib:libucrt.lib\r
 !endif\r
 \r
-!include versions.vc\r
+# Old linkers (Visual C++ 6 in particular) will link for fast loading\r
+# on Win98. Since we do not support Win98 any more, we specify nowin98\r
+# as recommended for NT and later. However, this is only required by\r
+# IX86 on older compilers and only needed if we are not doing a static build.\r
 \r
-#--------------------------------------------------------------\r
-# Setup tcl version dependent stuff headers\r
-#--------------------------------------------------------------\r
+!if "$(MACHINE)" == "IX86" && !$(STATIC_BUILD)\r
+!if [nmakehlp -l -opt:nowin98 $(LINKER_TESTFLAGS)]\r
+# Align sections for PE size savings.\r
+lflags = $(lflags) -opt:nowin98\r
+!endif\r
+!endif\r
 \r
-!if "$(PROJECT)" != "tcl"\r
+dlllflags = $(lflags) -dll\r
+conlflags = $(lflags) -subsystem:console\r
+guilflags = $(lflags) -subsystem:windows\r
 \r
-TCL_VERSION    = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION)\r
+# Libraries that are required for every image.\r
+# Extensions should define any additional libraries with $(PRJ_LIBS)\r
+winlibs   = kernel32.lib advapi32.lib\r
 \r
-!if $(TCLINSTALL)\r
-TCLSH          = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH           = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
+!if $(NEED_TK)\r
+winlibs = $(winlibs) gdi32.lib user32.lib uxtheme.lib\r
 !endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\lib\r
-TCLREGLIB      = "$(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib"\r
-TCLDDELIB      = "$(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib"\r
-COFFBASE       = \must\have\tcl\sources\to\build\this\target\r
-TCLTOOLSDIR    = \must\have\tcl\sources\to\build\this\target\r
-TCL_INCLUDES    = -I"$(_TCLDIR)\include"\r
-!else\r
-TCLSH          = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe"\r
-!if !exist($(TCLSH)) && $(TCL_THREADS)\r
-TCLSH          = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe"\r
+\r
+# Avoid 'unresolved external symbol __security_cookie' errors.\r
+# c.f. http://support.microsoft.com/?id=894573\r
+!if "$(MACHINE)" == "AMD64"\r
+!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500\r
+winlibs   = $(winlibs) bufferoverflowU.lib\r
 !endif\r
-TCLSTUBLIB     = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"\r
-TCLIMPLIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"\r
-TCL_LIBRARY    = $(_TCLDIR)\library\r
-TCLREGLIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib"\r
-TCLDDELIB      = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib"\r
-COFFBASE       = "$(_TCLDIR)\win\coffbase.txt"\r
-TCLTOOLSDIR    = $(_TCLDIR)\tools\r
-TCL_INCLUDES   = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"\r
 !endif\r
 \r
+baselibs = $(winlibs) $(PRJ_LIBS)\r
+\r
+!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900\r
+baselibs   = $(baselibs) ucrt.lib\r
 !endif\r
 \r
-#-------------------------------------------------------------------------\r
-# Locate the Tk headers to build against\r
-#-------------------------------------------------------------------------\r
+################################################################\r
+# 13. Define standard commands, common make targets and implicit rules\r
 \r
-!if "$(PROJECT)" == "tk"\r
-_TK_H          = ..\generic\tk.h\r
-_INSTALLDIR    = $(_INSTALLDIR)\..\r
-!endif\r
+CCPKGCMD = $(cc32) $(pkgcflags) -Fo$(TMP_DIR)^\\r
+CCAPPCMD = $(cc32) $(appcflags) -Fo$(TMP_DIR)^\\r
+CCSTUBSCMD = $(cc32) $(stubscflags) -Fo$(TMP_DIR)^\\r
 \r
-!ifdef PROJECT_REQUIRES_TK\r
-!if !defined(TKDIR)\r
-!if exist("$(_INSTALLDIR)\..\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_INSTALLDIR)\..\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
-!elseif exist("$(_TCLDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TKDIR         = $(_TCLDIR)\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-TKDIR          = $(_TKDIR)\r
+LIBCMD = $(lib32) -nologo $(LINKERFLAGS) -out:$@\r
+DLLCMD = $(link32) $(dlllflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)\r
+\r
+CONEXECMD = $(link32) $(conlflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)\r
+GUIEXECMD = $(link32) $(guilflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs)\r
+RESCMD  = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \\r
+           $(TCL_INCLUDES) \\r
+           -DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \\r
+           -DCOMMAVERSION=$(DOTVERSION:.=,),0 \\r
+           -DDOTVERSION=\"$(DOTVERSION)\" \\r
+           -DVERSION=\"$(VERSION)\" \\r
+           -DSUFX=\"$(SUFX)\" \\r
+            -DPROJECT=\"$(PROJECT)\" \\r
+            -DPRJLIBNAME=\"$(PRJLIBNAME)\" \r
+\r
+!ifndef DEFAULT_BUILD_TARGET\r
+DEFAULT_BUILD_TARGET = $(PROJECT)\r
 !endif\r
+\r
+default-target: $(DEFAULT_BUILD_TARGET)\r
+\r
+default-pkgindex:\r
+       @echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \\r
+           [list load [file join $$dir $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl\r
+\r
+default-pkgindex-tea:\r
+       @if exist $(ROOT)\pkgIndex.tcl.in nmakehlp -s << $(ROOT)\pkgIndex.tcl.in > $(OUT_DIR)\pkgIndex.tcl\r
+@PACKAGE_VERSION@    $(DOTVERSION)\r
+@PACKAGE_NAME@       $(PRJ_PACKAGE_TCLNAME)\r
+@PACKAGE_TCLNAME@    $(PRJ_PACKAGE_TCLNAME)\r
+@PKG_LIB_FILE@       $(PRJLIBNAME)\r
+<<\r
+\r
+\r
+default-install: default-install-binaries default-install-libraries\r
+\r
+default-install-binaries: $(PRJLIB)\r
+       @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"\r
+       @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL\r
+\r
+default-install-libraries: $(OUT_DIR)\pkgIndex.tcl\r
+       @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'\r
+       @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"\r
+       @echo Installing package index in '$(SCRIPT_INSTALL_DIR)'\r
+       @$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)\r
+\r
+default-install-stubs:\r
+       @echo Installing stubs library to '$(SCRIPT_INSTALL_DIR)'\r
+       @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"\r
+       @$(CPY) $(PRJSTUBLIB) "$(SCRIPT_INSTALL_DIR)" >NUL\r
+\r
+default-install-docs-html:\r
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'\r
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"\r
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.html" "$(DOCDIR)\*.css" "$(DOCDIR)\*.png") do @$(COPY) %f "$(DOC_INSTALL_DIR)"\r
+\r
+default-install-docs-n:\r
+       @echo Installing documentation files to '$(DOC_INSTALL_DIR)'\r
+       @if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)"\r
+       @if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.n") do @$(COPY) %f "$(DOC_INSTALL_DIR)"\r
+\r
+default-install-demos:\r
+       @echo Installing demos to '$(DEMO_INSTALL_DIR)'\r
+       @if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)"\r
+       @if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)"\r
+\r
+default-clean:\r
+       @echo Cleaning $(TMP_DIR)\* ...\r
+       @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)\r
+       @echo Cleaning $(WINDIR)\nmakehlp.obj, nmakehlp.exe ...\r
+       @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj\r
+       @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe\r
+       @if exist $(WINDIR)\nmakehlp.out del $(WINDIR)\nmakehlp.out\r
+       @echo Cleaning $(WINDIR)\nmhlp-out.txt ...\r
+       @if exist $(WINDIR)\nmhlp-out.txt del $(WINDIR)\nmhlp-out.txt\r
+       @echo Cleaning $(WINDIR)\_junk.pch ...\r
+       @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch\r
+       @echo Cleaning $(WINDIR)\vercl.x, vercl.i ...\r
+       @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x\r
+       @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i\r
+       @echo Cleaning $(WINDIR)\versions.vc, version.vc ...\r
+       @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc\r
+       @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc\r
+\r
+default-hose: default-clean\r
+       @echo Hosing $(OUT_DIR)\* ...\r
+       @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)\r
+\r
+# Only for backward compatibility\r
+default-distclean: default-hose\r
+\r
+default-setup:\r
+       @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)\r
+       @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)\r
+\r
+!if "$(TESTPAT)" != ""\r
+TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)\r
+!endif\r
+\r
+default-test: default-setup $(PROJECT)\r
+       @set TCLLIBPATH=$(OUT_DIR:\=/)\r
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"\r
+       cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS)\r
+\r
+default-shell: default-setup $(PROJECT)\r
+       @set TCLLIBPATH=$(OUT_DIR:\=/)\r
+       @if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)"\r
+       $(DEBUGGER) $(TCLSH)\r
+\r
+# Generation of Windows version resource \r
+!ifdef RCFILE\r
+\r
+# Note: don't use $** in below rule because there may be other dependencies\r
+# and only the "master" rc must be passed to the resource compiler\r
+$(TMP_DIR)\$(PROJECT).res: $(RCDIR)\$(PROJECT).rc\r
+       $(RESCMD) $(RCDIR)\$(PROJECT).rc\r
+\r
 !else\r
-_TKDIR = $(TKDIR:/=\)\r
-!if exist("$(_TKDIR)\include\tk.h")\r
-TKINSTALL      = 1\r
-_TK_H          = $(_TKDIR)\include\tk.h\r
-!elseif exist("$(_TKDIR)\generic\tk.h")\r
-TKINSTALL      = 0\r
-_TK_H          = $(_TKDIR)\generic\tk.h\r
-!else\r
-MSG =^\r
-Failed to find tk.h. The TKDIR macro does not appear correct.\r
-!error $(MSG)\r
-!endif\r
-!endif\r
+\r
+# If parent makefile has not defined a resource definition file,\r
+# we will generate one from standard template.\r
+$(TMP_DIR)\$(PROJECT).res: $(TMP_DIR)\$(PROJECT).rc\r
+\r
+$(TMP_DIR)\$(PROJECT).rc:\r
+       @$(COPY) << $(TMP_DIR)\$(PROJECT).rc\r
+#include <winver.h>\r
+\r
+VS_VERSION_INFO VERSIONINFO\r
+ FILEVERSION   COMMAVERSION\r
+ PRODUCTVERSION        COMMAVERSION\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef DEBUG\r
+ FILEFLAGS     VS_FF_DEBUG\r
+#else\r
+ FILEFLAGS     0x0L\r
+#endif\r
+ FILEOS                VOS_NT_WINDOWS32\r
+ FILETYPE      VFT_DLL\r
+ FILESUBTYPE   0x0L\r
+BEGIN\r
+    BLOCK "StringFileInfo"\r
+    BEGIN\r
+        BLOCK "040904b0"\r
+        BEGIN\r
+            VALUE "FileDescription",  "Tcl extension " PROJECT\r
+            VALUE "OriginalFilename", PRJLIBNAME\r
+            VALUE "FileVersion",      DOTVERSION\r
+            VALUE "ProductName",      "Package " PROJECT " for Tcl"\r
+            VALUE "ProductVersion",   DOTVERSION \r
+        END\r
+    END\r
+    BLOCK "VarFileInfo"\r
+    BEGIN\r
+        VALUE "Translation", 0x409, 1200\r
+    END\r
+END\r
+\r
+<<\r
+\r
+!endif # ifdef RCFILE\r
+\r
+!ifndef DISABLE_IMPLICIT_RULES\r
+DISABLE_IMPLICIT_RULES = 0\r
 !endif\r
 \r
-#-------------------------------------------------------------------------\r
-# Extract Tk version numbers\r
-#-------------------------------------------------------------------------\r
+!if !$(DISABLE_IMPLICIT_RULES)\r
+# Implicit rule definitions - only for building library objects. For stubs and\r
+# main application, the master makefile should define explicit rules.\r
 \r
-!if defined(PROJECT_REQUIRES_TK) || "$(PROJECT)" == "tk"\r
+{$(ROOT)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(WINDIR)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::\r
+       $(CCPKGCMD) @<<\r
+$<\r
+<<\r
+\r
+{$(RCDIR)}.rc{$(TMP_DIR)}.res:\r
+       $(RESCMD) $<\r
+\r
+{$(WINDIR)}.rc{$(TMP_DIR)}.res:\r
+       $(RESCMD) $<\r
+\r
+{$(TMP_DIR)}.rc{$(TMP_DIR)}.res:\r
+       $(RESCMD) $<\r
+\r
+.SUFFIXES:\r
+.SUFFIXES:.c .rc\r
 \r
-!if [echo TK_MAJOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc]\r
 !endif\r
-!if [echo TK_MINOR_VERSION = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc]\r
+\r
+################################################################\r
+# 14. Sanity check selected options against Tcl build options\r
+# When building an extension, certain configuration options should\r
+# match the ones used when Tcl was built. Here we check and\r
+# warn on a mismatch.\r
+!if ! $(DOING_TCL)\r
+\r
+!if $(TCLINSTALL) # Building against an installed Tcl\r
+!if exist("$(_TCLDIR)\lib\nmake\tcl.nmake")\r
+TCLNMAKECONFIG = "$(_TCLDIR)\lib\nmake\tcl.nmake"\r
 !endif\r
-!if [echo TK_PATCH_LEVEL = \>> versions.vc] \\r
-   && [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc]\r
+!else # ! $(TCLINSTALL) - building against Tcl source\r
+!if exist("$(OUT_DIR)\tcl.nmake")\r
+TCLNMAKECONFIG = "$(OUT_DIR)\tcl.nmake"\r
 !endif\r
+!endif # TCLINSTALL\r
 \r
-!include versions.vc\r
+!if $(CONFIG_CHECK)\r
+!ifdef TCLNMAKECONFIG\r
+!include $(TCLNMAKECONFIG)\r
 \r
-TK_DOTVERSION  = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)\r
-TK_VERSION     = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION)\r
-\r
-!if "$(PROJECT)" != "tk"\r
-!if $(TKINSTALL)\r
-WISH           = "$(_TKDIR)\bin\wish$(TK_VERSION)$(SUFX).exe"\r
-TKSTUBLIB      = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"\r
-TKIMPLIB       = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"\r
-TK_INCLUDES     = -I"$(_TKDIR)\include"\r
-!else\r
-WISH           = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)$(SUFX).exe"\r
-TKSTUBLIB      = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"\r
-TKIMPLIB       = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"\r
-TK_INCLUDES     = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"\r
+!if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)"\r
+!error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)).\r
 !endif\r
+!if defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC)\r
+!message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)).\r
 !endif\r
-\r
+!if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG)\r
+!message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)).\r
 !endif\r
+!endif\r
+\r
+!endif # TCLNMAKECONFIG\r
+\r
+!endif # ! $(DOING_TCL)\r
+\r
 \r
 #----------------------------------------------------------\r
 # Display stats being used.\r
 #----------------------------------------------------------\r
 \r
+!if !$(DOING_TCL)\r
+!message *** Building against Tcl at '$(_TCLDIR)'\r
+!endif\r
+!if !$(DOING_TK) && $(NEED_TK)\r
+!message *** Building against Tk at '$(_TKDIR)'\r
+!endif\r
 !message *** Intermediate directory will be '$(TMP_DIR)'\r
 !message *** Output directory will be '$(OUT_DIR)'\r
+!message *** Installation, if selected, will be in '$(_INSTALLDIR)'\r
 !message *** Suffix for binaries will be '$(SUFX)'\r
-!message *** Optional defines are '$(OPTDEFINES)'\r
 !message *** Compiler version $(VCVER). Target machine is $(MACHINE)\r
 !message *** Host architecture is $(NATIVE_ARCH)\r
-!message *** Compiler options '$(COMPILERFLAGS) $(OPTIMIZATIONS) $(DEBUGFLAGS) $(WARNINGS)'\r
-!message *** Link options '$(LINKERFLAGS)'\r
 \r
-!endif\r
+!endif # ifdef _RULES_VC\r
diff --git a/win/targets.vc b/win/targets.vc
new file mode 100644 (file)
index 0000000..7f1d388
--- /dev/null
@@ -0,0 +1,98 @@
+#------------------------------------------------------------- -*- makefile -*-\r
+# targets.vc --\r
+#\r
+# Part of the nmake based build system for Tcl and its extensions.\r
+# This file defines some standard targets for the convenience of extensions\r
+# and can be optionally included by the extension makefile.\r
+# See TIP 477 (https://core.tcl.tk/tips/doc/trunk/tip/477.md) for docs.\r
+\r
+$(PROJECT): setup pkgindex $(PRJLIB)\r
+\r
+!ifdef PRJ_STUBOBJS\r
+$(PROJECT): $(PRJSTUBLIB)\r
+$(PRJSTUBLIB): $(PRJ_STUBOBJS)\r
+       $(LIBCMD) $**\r
+\r
+$(PRJ_STUBOBJS):\r
+       $(CCSTUBSCMD) %s\r
+!endif # PRJ_STUBOBJS\r
+\r
+!ifdef PRJ_MANIFEST\r
+$(PROJECT): $(PRJLIB).manifest\r
+$(PRJLIB).manifest: $(PRJ_MANIFEST)\r
+       @nmakehlp -s << $** >$@\r
+@MACHINE@        $(MACHINE:IX86=X86)\r
+<<\r
+!endif\r
+\r
+!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"\r
+$(PRJLIB): $(PRJ_OBJS) $(RESFILE)\r
+!if $(STATIC_BUILD)\r
+       $(LIBCMD) $**\r
+!else\r
+       $(DLLCMD) $**\r
+       $(_VC_MANIFEST_EMBED_DLL)\r
+!endif\r
+       -@del $*.exp\r
+!endif\r
+\r
+!if "$(PRJ_HEADERS)" != "" && "$(PRJ_OBJS)" != ""\r
+$(PRJ_OBJS): $(PRJ_HEADERS)\r
+!endif\r
+\r
+# If parent makefile has defined stub objects, add their installation\r
+# to the default install\r
+!if "$(PRJ_STUBOBJS)" != ""\r
+default-install: default-install-stubs\r
+!endif\r
+\r
+# Unlike the other default targets, these cannot be in rules.vc because\r
+# the executed command depends on existence of macro PRJ_HEADERS_PUBLIC\r
+# that the parent makefile will not define until after including rules-ext.vc\r
+!if "$(PRJ_HEADERS_PUBLIC)" != ""\r
+default-install: default-install-headers\r
+default-install-headers:\r
+       @echo Installing headers to '$(INCLUDE_INSTALL_DIR)'\r
+       @for %f in ($(PRJ_HEADERS_PUBLIC)) do @$(COPY) %f "$(INCLUDE_INSTALL_DIR)"\r
+!endif\r
+\r
+!if "$(DISABLE_STANDARD_TARGETS)" == ""\r
+DISABLE_STANDARD_TARGETS = 0\r
+!endif\r
+\r
+!if "$(DISABLE_TARGET_setup)" == ""\r
+DISABLE_TARGET_setup = 0\r
+!endif\r
+!if "$(DISABLE_TARGET_install)" == ""\r
+DISABLE_TARGET_install = 0\r
+!endif\r
+!if "$(DISABLE_TARGET_clean)" == ""\r
+DISABLE_TARGET_clean = 0\r
+!endif\r
+!if "$(DISABLE_TARGET_test)" == ""\r
+DISABLE_TARGET_test = 0\r
+!endif\r
+!if "$(DISABLE_TARGET_shell)" == ""\r
+DISABLE_TARGET_shell = 0\r
+!endif\r
+\r
+!if !$(DISABLE_STANDARD_TARGETS)\r
+!if !$(DISABLE_TARGET_setup)\r
+setup: default-setup\r
+!endif\r
+!if !$(DISABLE_TARGET_install)\r
+install: default-install\r
+!endif\r
+!if !$(DISABLE_TARGET_clean)\r
+clean: default-clean\r
+realclean: hose\r
+hose: default-hose\r
+distclean: realclean default-distclean\r
+!endif\r
+!if !$(DISABLE_TARGET_test)\r
+test: default-test\r
+!endif\r
+!if !$(DISABLE_TARGET_shell)\r
+shell: default-shell\r
+!endif\r
+!endif # DISABLE_STANDARD_TARGETS\r
index 688fa8d..84c7a97 100644 (file)
@@ -29,7 +29,7 @@ static int platformId;                /* Running under NT, or 95/98? */
  * VC++ 5.x has no 'cpuid' assembler instruction, so we must emulate it
  */
 
-#if defined(_MSC_VER) && (_MSC_VER <= 1100)
+#if defined(_MSC_VER) && (_MSC_VER <= 1100) && defined (_M_IX86)
 #define cpuid  __asm __emit 0fh __asm __emit 0a2h
 #endif
 
@@ -735,7 +735,7 @@ TclWinCPUID(
     __cpuid(regsPtr, index);
     status = TCL_OK;
 
-#   else
+#   elif defined (_M_IX86)
     /*
      * Define a structure in the stack frame to hold the registers.
      */
index 30079b9..fea4b0f 100644 (file)
@@ -30,7 +30,7 @@ static const unsigned char errorTable[] = {
     ENOEXEC,   /* ERROR_BAD_FORMAT             11 */
     EACCES,    /* ERROR_INVALID_ACCESS         12 */
     EINVAL,    /* ERROR_INVALID_DATA           13 */
-    EFAULT,    /* ERROR_OUT_OF_MEMORY          14 */
+    ENOMEM,    /* ERROR_OUT_OF_MEMORY          14 */
     ENOENT,    /* ERROR_INVALID_DRIVE          15 */
     EACCES,    /* ERROR_CURRENT_DIRECTORY      16 */
     EXDEV,     /* ERROR_NOT_SAME_DEVICE        17 */
old mode 100755 (executable)
new mode 100644 (file)
index 6662327..7586af1
@@ -828,7 +828,7 @@ tclWinDebugPanic(
     __builtin_trap();
 #elif defined(_WIN64)
     __debugbreak();
-#elif defined(_MSC_VER)
+#elif defined(_MSC_VER) && defined (_M_IX86)
     _asm {int 3}
 #else
     DebugBreak();
index 26512b1..2946ea2 100644 (file)
@@ -63,9 +63,10 @@ TclpDlopen(
                                 * file. */
     int flags)
 {
-    HINSTANCE hInstance;
+    HINSTANCE hInstance = NULL;
     const TCHAR *nativeName;
     Tcl_LoadHandle handlePtr;
+    DWORD firstError;
 
     /*
      * First try the full path the user gave us. This is particularly
@@ -74,7 +75,10 @@ TclpDlopen(
      */
 
     nativeName = Tcl_FSGetNativePath(pathPtr);
-    hInstance = LoadLibraryEx(nativeName,NULL,LOAD_WITH_ALTERED_SEARCH_PATH);
+    if (nativeName != NULL) {
+       hInstance = LoadLibraryEx(nativeName, NULL,
+               LOAD_WITH_ALTERED_SEARCH_PATH);
+    }
     if (hInstance == NULL) {
        /*
         * Let the OS loader examine the binary search path for whatever
@@ -84,6 +88,13 @@ TclpDlopen(
 
        Tcl_DString ds;
 
+        /* 
+         * Remember the first error on load attempt to be used if the
+         * second load attempt below also fails.
+        */
+        firstError = (nativeName == NULL) ?
+               ERROR_MOD_NOT_FOUND : GetLastError();
+
        nativeName = Tcl_WinUtfToTChar(Tcl_GetString(pathPtr), -1, &ds);
        hInstance = LoadLibraryEx(nativeName, NULL,
                LOAD_WITH_ALTERED_SEARCH_PATH);
@@ -91,8 +102,21 @@ TclpDlopen(
     }
 
     if (hInstance == NULL) {
-       DWORD lastError = GetLastError();
-       Tcl_Obj *errMsg = Tcl_ObjPrintf("couldn't load library \"%s\": ",
+       DWORD lastError;
+        Tcl_Obj *errMsg;
+
+        /*
+         * We choose to only use the error from the second call if the first
+         * call failed due to the file not being found. Else stick to the
+         * first error for reporting purposes.
+         */
+        if (firstError == ERROR_MOD_NOT_FOUND ||
+            firstError == ERROR_DLL_NOT_FOUND)
+            lastError = GetLastError();
+        else
+            lastError = firstError;
+
+       errMsg = Tcl_ObjPrintf("couldn't load library \"%s\": ",
                Tcl_GetString(pathPtr));
 
        /*
@@ -129,7 +153,11 @@ TclpDlopen(
                Tcl_AppendToObj(errMsg, "the library initialization"
                        " routine failed", -1);
                break;
-           default:
+            case ERROR_BAD_EXE_FORMAT:
+               Tcl_SetErrorCode(interp, "WIN_LOAD", "BAD_EXE_FORMAT", NULL);
+               Tcl_AppendToObj(errMsg, "Bad exe format. Possibly a 32/64-bit mismatch.", -1);
+                break;
+            default:
                TclWinConvertError(lastError);
                Tcl_AppendToObj(errMsg, Tcl_PosixError(interp), -1);
            }
index fe0ed2d..4b372a5 100644 (file)
@@ -1479,7 +1479,7 @@ BuildCommandLine(
            quote = 1;
        } else {
            int count;
-           Tcl_UniChar ch;
+           Tcl_UniChar ch = 0;
 
            for (start = arg; *start != '\0'; start += count) {
                count = TclUtfToUniChar(start, &ch);