Tcl Source Code

Artifact [40d762576e]
Login

Artifact 40d762576e6f8c370d95ffac8c46d6342112573a:

Attachment "patch.txt" to ticket [533862ffff] added by davygrvy 2002-03-27 17:22:31.
*** win/nmakehlp.c	Wed Dec 31 14:00:00 1969
--- win/nmakehlp.c	Tue Mar 26 20:13:46 2002
***************
*** 0 ****
--- 1,297 ----
+ /* ----------------------------------------------------------------------------
+  * nmakehlp.c --
+  *
+  *	This is used to fix limitations within nmake and the environment.
+  *
+  * Copyright (c) 2002 by David Gravereaux.
+  *
+  * See the file "license.terms" for information on usage and redistribution
+  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+  *
+  * ----------------------------------------------------------------------------
+  * RCS: @(#) $Id: $
+  * ----------------------------------------------------------------------------
+  */
+ #include <windows.h>
+ #pragma comment (lib, "user32.lib")
+ #pragma comment (lib, "kernel32.lib")
+ 
+ /* protos */
+ int CheckForCompilerFeature (const char *option);
+ int CheckForLinkerFeature (const char *option);
+ int IsIn (const char *string, const char *substring);
+ DWORD WINAPI ReadFromPipe (LPVOID args);
+ 
+ /* globals */
+ typedef struct {
+     HANDLE pipe;
+     char buffer[1000];
+ } pipeinfo;
+ 
+ pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'};
+ pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'};
+ 
+ 
+ 
+ /* exitcodes: 0 == no, 1 == yes, 2 == error */
+ int
+ main (int argc, char *argv[])
+ {
+     char msg[300];
+     DWORD dwWritten;
+     int chars;
+ 
+     if (argc > 1 && *argv[1] == '-') {
+ 	switch (*(argv[1]+1)) {
+ 	case 'c':
+ 	    if (argc != 3) {
+ 		chars = wsprintf(msg, "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 = wsprintf(msg, "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 = wsprintf(msg, "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]);
+ 	    }
+ 	}
+     }
+     chars = wsprintf(msg, "usage: %s -c|-l|-f ...\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;
+ }
+ 
+ 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 */
+     strcpy(cmdline, "cl.exe -nologo -c -TC -Fdtemp ");
+     /* append our option for testing */
+     strcat(cmdline, option);
+     /* filename to compile, which exists, but is nothing and empty. */
+     strcat(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 = wsprintf(msg, "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, strlen(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);
+ 
+     /* clean up temporary files before returning */
+     DeleteFile("temp.idb");
+     DeleteFile("temp.pdb");
+ 
+     /* 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. */
+     return !(strstr(Out.buffer, "D4002") != NULL || strstr(Err.buffer, "D4002") != NULL);
+ }
+ 
+ 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 */
+     strcpy(cmdline, "link.exe -nologo ");
+     /* append our option for testing */
+     strcat(cmdline, option);
+     /* filename to compile, which exists, but is nothing and empty. */
+ //    strcat(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 = wsprintf(msg, "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, strlen(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);
+ }
+ 
+ DWORD WINAPI
+ ReadFromPipe (LPVOID args)
+ {
+     pipeinfo *pi = (pipeinfo *) args;
+     char *lastBuf = pi->buffer;
+     DWORD dwRead;
+     BOOL ok;
+ 
+ again:
+     ok = ReadFile(pi->pipe, lastBuf, 25, &dwRead, 0L);
+     if (!ok || dwRead == 0) {
+ 	CloseHandle(pi->pipe);
+ 	return 0;
+     }
+     lastBuf += dwRead;
+     goto again;
+ 
+     return 0;  /* makes the compiler happy */
+ }
+ 
+ int
+ IsIn (const char *string, const char *substring)
+ {
+     return (strstr(string, substring) != NULL);
+ }

*** win/buildall.vc.bat	20 Feb 2002 19:06:53 -0000	1.3
--- win/buildall.vc.bat	27 Mar 2002 10:15:18 -0000
***************
*** 6,16 ****
  ::
  ::  RCS: @(#) $Id: buildall.vc.bat,v 1.3 2002/02/20 19:06:53 davygrvy Exp $
  
! echo Sit back and have a couple cups of coffee while this grinds through ;)
  echo You asked for *everything*, remember?
  echo.
  
! if "%MSVCDir%" == "" call C:\progra~1\micros~4\vc98\bin\vcvars32.bat
  set INSTALLDIR=C:\progra~1\tcl
  
  nmake -nologo -f makefile.vc release winhelp OPTS=none
--- 6,16 ----
  ::
  ::  RCS: @(#) $Id: buildall.vc.bat,v 1.3 2002/02/20 19:06:53 davygrvy Exp $
  
! echo Sit back and have a cup of coffee while this grinds through ;)
  echo You asked for *everything*, remember?
  echo.
  
! if "%MSVCDir%" == "" call C:\dev\devstudio60\vc98\bin\vcvars32.bat
  set INSTALLDIR=C:\progra~1\tcl
  
  nmake -nologo -f makefile.vc release winhelp OPTS=none
***************
*** 28,34 ****
  goto end
  
  :error
! echo **BOOM!**
  
  :end
  pause
--- 28,35 ----
  goto end
  
  :error
! echo *** BOOM! ***
  
  :end
+ echo done!
  pause

*** win/coffbase.txt	22 Feb 2002 03:29:05 -0000	1.3
--- win/coffbase.txt	27 Mar 2002 10:15:19 -0000
***************
*** 10,16 ****
  ; the /headers option to get the "size of image" data (already in hex).  If the
  ; maximum size is too small a linker warning will occur.  Modules can overlap when
  ; they're mutually exclusive.  This info is placed in the DLL's PE header by the
! ; linker when the `-base:@$(TCLDIR)\win\coffbase.txt,XXX` option is used.
  ;
  ; RCS: @(#) $Id: coffbase.txt,v 1.3 2002/02/22 03:29:05 davygrvy Exp $
  
--- 10,16 ----
  ; the /headers option to get the "size of image" data (already in hex).  If the
  ; maximum size is too small a linker warning will occur.  Modules can overlap when
  ; they're mutually exclusive.  This info is placed in the DLL's PE header by the
! ; linker with the `-base:@$(TCLDIR)\win\coffbase.txt,<key>` option.
  ;
  ; RCS: @(#) $Id: coffbase.txt,v 1.3 2002/02/22 03:29:05 davygrvy Exp $
  

*** win/makefile.vc	21 Feb 2002 22:00:58 -0000	1.83
--- win/makefile.vc	27 Mar 2002 10:15:22 -0000
***************
*** 9,15 ****
  # Copyright (c) 1995-1996 Sun Microsystems, Inc.
  # Copyright (c) 1998-2000 Ajuba Solutions.
  # Copyright (c) 2001 ActiveState Corporation.
! # Copyright (c) 2001 Tomasoft Engineering.
  #
  #------------------------------------------------------------------------------
  # RCS: @(#) $Id: makefile.vc,v 1.83 2002/02/21 22:00:58 davygrvy Exp $
--- 9,15 ----
  # Copyright (c) 1995-1996 Sun Microsystems, Inc.
  # Copyright (c) 1998-2000 Ajuba Solutions.
  # Copyright (c) 2001 ActiveState Corporation.
! # Copyright (c) 2001-2002 David Gravereaux.
  #
  #------------------------------------------------------------------------------
  # RCS: @(#) $Id: makefile.vc,v 1.83 2002/02/21 22:00:58 davygrvy Exp $
***************
*** 40,67 ****
  #     the 64-bit compiler, if your SDK has it.
  #
  # 3)  Targets are:
! #	release  -- builds the core, the shell and the dlls. (default)
! #	dlls     -- just builds the windows extensions and the 16-bit DOS
! #		    pipe/thunk driver.
  #	shell    -- Just builds the shell and the core.
! #	core     -- Only builds the core.
! #	all      -- builds everything.
! #	test     -- builds and runs the test suite.
! #	tcltest  -- just builds the binaries for the test suite.
! #	install  -- installs the built binaries and libraries to $(INSTALLDIR)
  #		    as the root of the install tree.
! #	plugin   -- [currently out-dated].
! #	clean    -- removes the contents of $(TMP_DIR) and $(OUT_DIR)
! #	genstubs -- rebuilds the Stubs table and support files (dev only).
! #	winhelp  -- builds the windows .hlp file for Tcl from the troff man
! #		    files.
  #
  # 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=static,msvcrt,linkexten,threads,symbols,profile,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.
--- 40,70 ----
  #     the 64-bit compiler, if your SDK has it.
  #
  # 3)  Targets are:
! #	release  -- Builds the core, the shell and the dlls. (default)
! #	dlls     -- Just builds the windows extensions and the 16-bit DOS
! #		    pipe/thunk helper app.
  #	shell    -- Just builds the shell and the core.
! #	core     -- Only builds the core [tclXX.(dll|lib)].
! #	all      -- Builds everything.
! #	test     -- Builds and runs the test suite.
! #	tcltest  -- Just builds the test shell.
! #	install  -- Installs the built binaries and libraries to $(INSTALLDIR)
  #		    as the root of the install tree.
! #	tidy/clean/hose -- varying levels of cleaning.
! #	genstubs -- Rebuilds the Stubs table and support files (dev only).
! #	depend   -- Generates an accurate set of source dependancies for this
! #		    makefile.  Helpful to avoid problems when the sources are
! #		    refreshed and you rebuild, but can "overbuild" when common
! #		    headers like tclInt.h just get small changes.
! #	winhelp  -- Builds the windows .hlp file for Tcl from the troff man
! #		    files found in $(ROOT)\doc .
  #
  # 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=static,msvcrt,linkexten,threads,symbols,profile,loimpact,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.
***************
*** 144,150 ****
  MSG = ^
  You must run this makefile only from the directory it is in.^
  Please `cd` to its location first.
! !error $(MSG) 
  !endif
  
  PROJECT	= tcl
--- 147,153 ----
  MSG = ^
  You must run this makefile only from the directory it is in.^
  Please `cd` to its location first.
! !error $(MSG)
  !endif
  
  PROJECT	= tcl
***************
*** 176,186 ****
  TCLPIPEDLLNAME	= $(PROJECT)pip$(VERSION).dll
  TCLPIPEDLL	= $(OUT_DIR)\$(TCLPIPEDLLNAME)
  
! TCLREGDLLNAME	= $(PROJECT)reg$(REGVERSION)$(SUFX:t=).$(EXT)
! TCLREGDLL	= $(OUT_DIR)\$(TCLREGDLLNAME)
  
! TCLDDEDLLNAME	= $(PROJECT)dde$(DDEVERSION)$(SUFX:t=).$(EXT)
! TCLDDEDLL	= $(OUT_DIR)\$(TCLDDEDLLNAME)
  
  TCLHLPBASE	= $(PROJECT)$(VERSION)
  TCLHLP		= $(OUT_DIR)\$(TCLHLPBASE).hlp
--- 179,189 ----
  TCLPIPEDLLNAME	= $(PROJECT)pip$(VERSION).dll
  TCLPIPEDLL	= $(OUT_DIR)\$(TCLPIPEDLLNAME)
  
! TCLREGLIBNAME	= $(PROJECT)reg$(REGVERSION)$(SUFX:t=).$(EXT)
! TCLREGLIB	= $(OUT_DIR)\$(TCLREGLIBNAME)
  
! TCLDDELIBNAME	= $(PROJECT)dde$(DDEVERSION)$(SUFX:t=).$(EXT)
! TCLDDELIB	= $(OUT_DIR)\$(TCLDDELIBNAME)
  
  TCLHLPBASE	= $(PROJECT)$(VERSION)
  TCLHLP		= $(OUT_DIR)\$(TCLHLPBASE).hlp
***************
*** 211,216 ****
--- 214,223 ----
  	$(TMP_DIR)\tclTestProcBodyObj.obj \
  	$(TMP_DIR)\tclThreadTest.obj \
  	$(TMP_DIR)\tclWinTest.obj \
+ !if $(TCL_LINKWITHEXTENSIONS)
+ 	$(TMP_DIR)\tclWinReg.obj \
+ 	$(TMP_DIR)\tclWinDde.obj \
+ !endif
  	$(TMP_DIR)\testMain.obj
  
  TCLOBJS = \
***************
*** 300,305 ****
--- 307,313 ----
  
  TCLSTUBOBJS = $(TMP_DIR)\tclStubLib.obj
  
+ ### The following paths CANNOT have spaces in them.
  COMPATDIR	= $(ROOT)\compat
  GENERICDIR	= $(ROOT)\generic
  TOOLSDIR	= $(ROOT)\tools
***************
*** 321,327 ****
  cdebug	=
  !endif
  !else if "$(MACHINE)" == "IA64"
! # Warnings are too many to support warnings into errors.
  cdebug	= -Z7 -Od
  !else
  cdebug	= -Z7 -WX -Od
--- 329,335 ----
  cdebug	=
  !endif
  !else if "$(MACHINE)" == "IA64"
! # Warnings are too many, can't support warnings into errors.
  cdebug	= -Z7 -Od
  !else
  cdebug	= -Z7 -WX -Od
***************
*** 433,591 ****
  $**
  <<
  !else
! 	$(link32) $(dlllflags) -base:@$(WINDIR)\coffbase.txt,tcl -out:$@ $(baselibs) @<<
  $**
  <<
  	-@del $*.exp
  !endif
  
- 
  $(TCLSTUBLIB): $(TCLSTUBOBJS)
  	$(lib32) -nologo -out:$@ $(TCLSTUBOBJS)
  
  $(TCLSH): $(TCLSHOBJS) $(TCLIMPLIB)
! 	$(link32) $(conlflags) -stack:2300000 -out:$@ $(baselibs) @<<
! $**
! <<
! 
  
  $(TCLTEST): $(TCLTESTOBJS) $(TCLIMPLIB)
! 	$(link32) $(conlflags) -stack:2300000 -out:$@ $(baselibs) @<<
! $**
! <<
! 
  
  $(TCLPIPEDLL): $(WINDIR)\stub16.c
  	$(cc32) $(CON_CFLAGS) -Fo$(TMP_DIR)\ $(WINDIR)\stub16.c
  	$(link32) $(conlflags) -out:$@ $(TMP_DIR)\stub16.obj $(baselibs)
  
- 
  !if $(STATIC_BUILD)
! $(TCLDDEDLL): $(TMP_DIR)\tclWinDde.obj
  	$(lib32) -nologo -out:$@ $(TMP_DIR)\tclWinDde.obj
  !else
! $(TCLDDEDLL): $(TMP_DIR)\tclWinDde.obj $(TCLSTUBLIB)
! 	$(link32) $(dlllflags) -base:@$(WINDIR)\coffbase.txt,tcldde -out:$@ $** $(baselibs)
  	-@del $*.exp
  	-@del $*.lib
  !endif
  
- 
  !if $(STATIC_BUILD)
! $(TCLREGDLL): $(TMP_DIR)\tclWinReg.obj
  	$(lib32) -nologo -out:$@ $(TMP_DIR)\tclWinReg.obj
  !else
! $(TCLREGDLL): $(TMP_DIR)\tclWinReg.obj $(TCLSTUBLIB)
! 	$(link32) $(dlllflags) -base:@$(WINDIR)\coffbase.txt,tclreg -out:$@ $** $(baselibs)
  	-@del $*.exp
  	-@del $*.lib
  !endif
  
- 
  $(CAT32): $(WINDIR)\cat.c
  	$(cc32) $(CON_CFLAGS) -Fo$(TMP_DIR)\ $?
  	$(link32) $(conlflags) -out:$@ -stack:16384 $(TMP_DIR)\cat.obj \
  		$(baselibs)
  
- install-binaries:
- 	@echo installing $(TCLLIBNAME)
- !if "$(TCLLIB)" != "$(TCLIMPLIB)"
- 	@xcopy /i /y "$(TCLLIB)" "$(BIN_INSTALL_DIR)\"
- !endif
- 	@xcopy /i /y "$(TCLIMPLIB)" "$(LIB_INSTALL_DIR)\"
- !if exist($(TCLSH))
- 	@echo installing $(TCLSHNAME)
- 	@xcopy /i /y "$(TCLSH)" "$(BIN_INSTALL_DIR)\"
- !endif
- !if exist($(TCLPIPEDLL))
- 	@echo installing $(TCLPIPEDLLNAME)
- 	@xcopy /i /y "$(TCLPIPEDLL)" "$(BIN_INSTALL_DIR)\"
- !endif
- 	@echo installing $(TCLSTUBLIBNAME)
- 	@xcopy /i /y "$(TCLSTUBLIB)" "$(LIB_INSTALL_DIR)\"
- !if exist($(TCLHLP))
- 	@xcopy /i /y "$(TCLHLP)" "$(DOC_INSTALL_DIR)\"
- 	@xcopy /i /y "$(TCLHLPCNT)" "$(DOC_INSTALL_DIR)\"
- !endif
  
! install-libraries:
! 	@echo installing http1.0
! 	@xcopy /i /y "$(ROOT)\library\http1.0\*.tcl" \
! 		"$(SCRIPT_INSTALL_DIR)\http1.0\"
! 	@echo installing http2.4
! 	@xcopy /i /y "$(ROOT)\library\http\*.tcl" \
! 		"$(SCRIPT_INSTALL_DIR)\http2.4\"
! 	@echo installing opt0.4
! 	@xcopy /i /y "$(ROOT)\library\opt\*.tcl" \
! 		"$(SCRIPT_INSTALL_DIR)\opt0.4\"
! 	@echo installing msgcat1.2
! 	@xcopy /i /y "$(ROOT)\library\msgcat\*.tcl" \
! 	    "$(SCRIPT_INSTALL_DIR)\msgcat1.2\"
! 	@echo installing $(TCLDDEDLLNAME)
! !if $(STATIC_BUILD)
! 	@xcopy /i /y "$(TCLDDEDLL)" "$(LIB_INSTALL_DIR)\"
! !else
! 	@xcopy /i /y "$(TCLDDEDLL)" "$(LIB_INSTALL_DIR)\dde$(DDEDOTVERSION)\"
! 	@xcopy /i /y "$(ROOT)\library\dde\pkgIndex.tcl" \
! 	    "$(LIB_INSTALL_DIR)\dde$(DDEDOTVERSION)\"
! !endif
! 	@echo installing $(TCLREGDLLNAME)
! !if $(STATIC_BUILD)
! 	@xcopy /i /y "$(TCLREGDLL)" "$(LIB_INSTALL_DIR)\"
  !else
! 	@xcopy /i /y "$(TCLREGDLL)" "$(LIB_INSTALL_DIR)\reg$(REGDOTVERSION)\"
! 	@xcopy /i /y "$(ROOT)\library\reg\pkgIndex.tcl" \
! 	    "$(LIB_INSTALL_DIR)\reg$(REGDOTVERSION)\"
  !endif
- 	@echo installing encoding files
- 	@xcopy /i /y "$(ROOT)\library\encoding\*.enc" \
- 		"$(SCRIPT_INSTALL_DIR)\encoding\"
- 	@echo installing library files
- 	@xcopy /i /y "$(GENERICDIR)\tcl.h"          "$(INCLUDE_INSTALL_DIR)\"
- 	@xcopy /i /y "$(GENERICDIR)\tclDecls.h"     "$(INCLUDE_INSTALL_DIR)\"
- 	@xcopy /i /y "$(GENERICDIR)\tclPlatDecls.h" "$(INCLUDE_INSTALL_DIR)\"
- 	@xcopy /i /y "$(ROOT)\library\history.tcl"  "$(SCRIPT_INSTALL_DIR)\"
- 	@xcopy /i /y "$(ROOT)\library\init.tcl"     "$(SCRIPT_INSTALL_DIR)\"
- 	@xcopy /i /y "$(ROOT)\library\ldAout.tcl"   "$(SCRIPT_INSTALL_DIR)\"
- 	@xcopy /i /y "$(ROOT)\library\parray.tcl"   "$(SCRIPT_INSTALL_DIR)\"
- 	@xcopy /i /y "$(ROOT)\library\safe.tcl"     "$(SCRIPT_INSTALL_DIR)\"
- 	@xcopy /i /y "$(ROOT)\library\tclIndex"     "$(SCRIPT_INSTALL_DIR)\"
- 	@xcopy /i /y "$(ROOT)\library\package.tcl"  "$(SCRIPT_INSTALL_DIR)\"
- 	@xcopy /i /y "$(ROOT)\library\word.tcl"     "$(SCRIPT_INSTALL_DIR)\"
- 	@xcopy /i /y "$(ROOT)\library\auto.tcl"     "$(SCRIPT_INSTALL_DIR)\"
  
  
  #---------------------------------------------------------------------
! # Regenerate the stubs files.
  #---------------------------------------------------------------------
  
! genstubs:
! 	tclsh$(VERSION) $(ROOT)\tools\genStubs.tcl $(GENERICDIR) \
! 		$(GENERICDIR)\tcl.decls $(GENERICDIR)\tclInt.decls
  
  
  #---------------------------------------------------------------------
! # Regenerate the windows help files.
  #---------------------------------------------------------------------
  
  MAN2TCL		= $(TOOLSDIR)\man2tcl
! TCLRTF		= $(TOOLSDIR)\tcl.rtf
  MAN2HELP	= $(TOOLSDIR)\man2help.tcl
- TCLHPJ		= $(TOOLSDIR)\tcl.hpj
  
  winhelp: $(TCLHLP)
  
  $(TCLHLP): $(TCLRTF)
  	cd $(TOOLSDIR)
! 	start /wait hcrtf.exe -x tcl.hpj
  	cd $(MAKEDIR)
  	copy $(TOOLSDIR)\$(TCLHLPBASE).hlp $(OUT_DIR)
  	copy $(TOOLSDIR)\$(TCLHLPBASE).cnt $(OUT_DIR)
  
! $(TCLHPJ): $(TCLHPJ).in
! 	copy $(TCLHPJ).in $(TCLHPJ)
! 
! $(MAN2TCL).exe: $(MAN2TCL).obj 
  	cd $(TOOLSDIR)
  	$(cc32) -nologo -G4 -ML -O2 $(MAN2TCL).c
  	cd $(MAKEDIR)
--- 441,561 ----
  $**
  <<
  !else
! 	$(link32) $(dlllflags) -base:@$(WINDIR)\coffbase.txt,tcl -out:$@ \
! 		$(baselibs) @<<
  $**
  <<
  	-@del $*.exp
  !endif
  
  $(TCLSTUBLIB): $(TCLSTUBOBJS)
  	$(lib32) -nologo -out:$@ $(TCLSTUBOBJS)
  
  $(TCLSH): $(TCLSHOBJS) $(TCLIMPLIB)
! 	$(link32) $(conlflags) -stack:2300000 -out:$@ $(baselibs) $**
  
  $(TCLTEST): $(TCLTESTOBJS) $(TCLIMPLIB)
! 	$(link32) $(conlflags) -stack:2300000 -out:$@ $(baselibs) $**
  
  $(TCLPIPEDLL): $(WINDIR)\stub16.c
  	$(cc32) $(CON_CFLAGS) -Fo$(TMP_DIR)\ $(WINDIR)\stub16.c
  	$(link32) $(conlflags) -out:$@ $(TMP_DIR)\stub16.obj $(baselibs)
  
  !if $(STATIC_BUILD)
! $(TCLDDELIB): $(TMP_DIR)\tclWinDde.obj
  	$(lib32) -nologo -out:$@ $(TMP_DIR)\tclWinDde.obj
  !else
! $(TCLDDELIB): $(TMP_DIR)\tclWinDde.obj $(TCLSTUBLIB)
! 	$(link32) $(dlllflags) -base:@$(WINDIR)\coffbase.txt,tcldde -out:$@ \
! 		$** $(baselibs)
  	-@del $*.exp
  	-@del $*.lib
  !endif
  
  !if $(STATIC_BUILD)
! $(TCLREGLIB): $(TMP_DIR)\tclWinReg.obj
  	$(lib32) -nologo -out:$@ $(TMP_DIR)\tclWinReg.obj
  !else
! $(TCLREGLIB): $(TMP_DIR)\tclWinReg.obj $(TCLSTUBLIB)
! 	$(link32) $(dlllflags) -base:@$(WINDIR)\coffbase.txt,tclreg -out:$@ \
! 		$** $(baselibs)
  	-@del $*.exp
  	-@del $*.lib
  !endif
  
  $(CAT32): $(WINDIR)\cat.c
  	$(cc32) $(CON_CFLAGS) -Fo$(TMP_DIR)\ $?
  	$(link32) $(conlflags) -out:$@ -stack:16384 $(TMP_DIR)\cat.obj \
  		$(baselibs)
  
  
! #---------------------------------------------------------------------
! # Regenerate the stubs files.  [Development use only]
! #---------------------------------------------------------------------
! 
! genstubs:
! !if !exist($(TCLSH))
! 	@echo Build tclsh first!
  !else
! 	$(TCLSH) $(TOOLSDIR)\genStubs.tcl $(GENERICDIR) \
! 		$(GENERICDIR)\tcl.decls $(GENERICDIR)\tclInt.decls
  !endif
  
  
  #---------------------------------------------------------------------
! # Generate the makefile depedancies.
  #---------------------------------------------------------------------
  
! depend:
! !if !exist($(TCLSH))
! 	@echo Build tclsh first!
! !else
! 	echo $(TCL_INCLUDES)
! 	$(TCLSH) $(TOOLSDIR)\mkdepend.tcl -vc32 -out:"$(OUT_DIR)\depend.mk" \
! 		-passthru:"-DBUILD_tcl $(TCL_INCLUDES:"="")" $(GENERICDIR) \
! 		$(COMPATDIR) $(WINDIR) @<<
! $(TCLOBJS)
! <<
! !endif
  
  
  #---------------------------------------------------------------------
! # Build the windows help file.
  #---------------------------------------------------------------------
  
  MAN2TCL		= $(TOOLSDIR)\man2tcl
! TCLRTF		= $(TOOLSDIR)\$(PROJECT).rtf
  MAN2HELP	= $(TOOLSDIR)\man2help.tcl
  
  winhelp: $(TCLHLP)
  
  $(TCLHLP): $(TCLRTF)
  	cd $(TOOLSDIR)
! 	start /wait hcrtf.exe -x <<$(PROJECT).hpj
! [OPTIONS]
! COMPRESS=12 Hall Zeck
! LCID=0x409 0x0 0x0 ; English (United States)
! TITLE=Tcl/Tk Reference Manual
! CNT=$(TCLHLPBASE).cnt
! HLP=$(TCLHLPBASE).hlp
! 
! [FILES]
! $(PROJECT).rtf
! 
! [WINDOWS]
! main="Tcl/Tk Reference Manual",,0
! 
! [CONFIG]
! BrowseButtons()
! CreateButton(1, "Main Web Site", ExecFile("http://www.tcl.tk"))
! CreateButton(2, "Sourceforge", ExecFile("http://sf.net/projects/tcl"))
! CreateButton(3, "Wiki", ExecFile("http://wiki.tcl.tk"))
! <<
  	cd $(MAKEDIR)
  	copy $(TOOLSDIR)\$(TCLHLPBASE).hlp $(OUT_DIR)
  	copy $(TOOLSDIR)\$(TCLHLPBASE).cnt $(OUT_DIR)
  
! $(MAN2TCL).exe:
  	cd $(TOOLSDIR)
  	$(cc32) -nologo -G4 -ML -O2 $(MAN2TCL).c
  	cd $(MAKEDIR)
***************
*** 623,629 ****
  	$(cc32) $(TCL_CFLAGS) -Fo$@ $?
  !endif
  
! # The following objects should be built using the stub interfaces
  
  $(TMP_DIR)\tclWinReg.obj: $(WINDIR)\tclWinReg.c
  !if $(STATIC_BUILD)
--- 593,599 ----
  	$(cc32) $(TCL_CFLAGS) -Fo$@ $?
  !endif
  
! ### The following objects should be built using the stub interfaces
  
  $(TMP_DIR)\tclWinReg.obj: $(WINDIR)\tclWinReg.c
  !if $(STATIC_BUILD)
***************
*** 641,648 ****
  !endif
  
  
! # The following objects are part of the stub library and should not
! # be built as DLL objects but none of the symbols should be exported
  
  $(TMP_DIR)\tclStubLib.obj: $(GENERICDIR)\tclStubLib.c
  	$(cc32) $(cdebug) $(cflags) -Zl -DSTATIC_BUILD $(TCL_INCLUDES) -Fo$@ $?
--- 611,618 ----
  !endif
  
  
! ### The following objects are part of the stub library and should not
! ### be built as DLL objects but none of the symbols should be exported
  
  $(TMP_DIR)\tclStubLib.obj: $(GENERICDIR)\tclStubLib.c
  	$(cc32) $(cdebug) $(cflags) -Zl -DSTATIC_BUILD $(TCL_INCLUDES) -Fo$@ $?
***************
*** 671,676 ****
--- 641,656 ----
  $(GENERICDIR)\regfronts.c: $(GENERICDIR)\regguts.h
  $(GENERICDIR)\regguts.h: $(GENERICDIR)\regcustom.h
  
+ !if exist("$(OUT_DIR)\depend.mk")
+ !include "$(OUT_DIR)\depend.mk"
+ !message *** Dependency rules in effect.
+ !else
+ !message *** Dependency rules are not being used.
+ !endif
+ 
+ ### add a spacer in the output
+ !message
+ 
  
  #---------------------------------------------------------------------
  # Implicit rules
***************
*** 692,698 ****
  <<
  
  {$(WINDIR)}.rc{$(TMP_DIR)}.res:
! 	$(rc32) -fo $@ -r -i $(GENERICDIR) -D__WIN32__ \
  !if $(DEBUG)
  	-d DEBUG \
  !endif
--- 672,678 ----
  <<
  
  {$(WINDIR)}.rc{$(TMP_DIR)}.res:
! 	$(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \
  !if $(DEBUG)
  	-d DEBUG \
  !endif
***************
*** 704,709 ****
--- 684,764 ----
  !endif
  	$<
  
+ .SUFFIXES:
+ .SUFFIXES:.c .rc
+ 
+ 
+ #---------------------------------------------------------------------
+ # Installation.
+ #---------------------------------------------------------------------
+ 
+ install-binaries:
+ 	@echo installing $(TCLLIBNAME)
+ !if "$(TCLLIB)" != "$(TCLIMPLIB)"
+ 	@xcopy /i /y "$(TCLLIB)" "$(BIN_INSTALL_DIR)\"
+ !endif
+ 	@xcopy /i /y "$(TCLIMPLIB)" "$(LIB_INSTALL_DIR)\"
+ !if exist($(TCLSH))
+ 	@echo installing $(TCLSHNAME)
+ 	@xcopy /i /y "$(TCLSH)" "$(BIN_INSTALL_DIR)\"
+ !endif
+ !if exist($(TCLPIPEDLL))
+ 	@echo installing $(TCLPIPEDLLNAME)
+ 	@xcopy /i /y "$(TCLPIPEDLL)" "$(BIN_INSTALL_DIR)\"
+ !endif
+ 	@echo installing $(TCLSTUBLIBNAME)
+ 	@xcopy /i /y "$(TCLSTUBLIB)" "$(LIB_INSTALL_DIR)\"
+ !if exist($(TCLHLP))
+ 	@xcopy /i /y "$(TCLHLP)" "$(DOC_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(TCLHLPCNT)" "$(DOC_INSTALL_DIR)\"
+ !endif
+ 
+ install-libraries:
+ 	@echo installing http1.0
+ 	@xcopy /i /y "$(ROOT)\library\http1.0\*.tcl" \
+ 		"$(SCRIPT_INSTALL_DIR)\http1.0\"
+ 	@echo installing http2.4
+ 	@xcopy /i /y "$(ROOT)\library\http\*.tcl" \
+ 		"$(SCRIPT_INSTALL_DIR)\http2.4\"
+ 	@echo installing opt0.4
+ 	@xcopy /i /y "$(ROOT)\library\opt\*.tcl" \
+ 		"$(SCRIPT_INSTALL_DIR)\opt0.4\"
+ 	@echo installing msgcat1.2
+ 	@xcopy /i /y "$(ROOT)\library\msgcat\*.tcl" \
+ 	    "$(SCRIPT_INSTALL_DIR)\msgcat1.2\"
+ 	@echo installing $(TCLDDELIBNAME)
+ !if $(STATIC_BUILD)
+ 	@xcopy /i /y "$(TCLDDELIB)" "$(LIB_INSTALL_DIR)\"
+ !else
+ 	@xcopy /i /y "$(TCLDDELIB)" "$(LIB_INSTALL_DIR)\dde$(DDEDOTVERSION)\"
+ 	@xcopy /i /y "$(ROOT)\library\dde\pkgIndex.tcl" \
+ 	    "$(LIB_INSTALL_DIR)\dde$(DDEDOTVERSION)\"
+ !endif
+ 	@echo installing $(TCLREGLIBNAME)
+ !if $(STATIC_BUILD)
+ 	@xcopy /i /y "$(TCLREGLIB)" "$(LIB_INSTALL_DIR)\"
+ !else
+ 	@xcopy /i /y "$(TCLREGLIB)" "$(LIB_INSTALL_DIR)\reg$(REGDOTVERSION)\"
+ 	@xcopy /i /y "$(ROOT)\library\reg\pkgIndex.tcl" \
+ 	    "$(LIB_INSTALL_DIR)\reg$(REGDOTVERSION)\"
+ !endif
+ 	@echo installing encoding files
+ 	@xcopy /i /y "$(ROOT)\library\encoding\*.enc" \
+ 		"$(SCRIPT_INSTALL_DIR)\encoding\"
+ 	@echo installing library files
+ 	@xcopy /i /y "$(GENERICDIR)\tcl.h"          "$(INCLUDE_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(GENERICDIR)\tclDecls.h"     "$(INCLUDE_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(GENERICDIR)\tclPlatDecls.h" "$(INCLUDE_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(ROOT)\library\history.tcl"  "$(SCRIPT_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(ROOT)\library\init.tcl"     "$(SCRIPT_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(ROOT)\library\ldAout.tcl"   "$(SCRIPT_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(ROOT)\library\parray.tcl"   "$(SCRIPT_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(ROOT)\library\safe.tcl"     "$(SCRIPT_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(ROOT)\library\tclIndex"     "$(SCRIPT_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(ROOT)\library\package.tcl"  "$(SCRIPT_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(ROOT)\library\word.tcl"     "$(SCRIPT_INSTALL_DIR)\"
+ 	@xcopy /i /y "$(ROOT)\library\auto.tcl"     "$(SCRIPT_INSTALL_DIR)\"
+ 
  
  #---------------------------------------------------------------------
  # Clean up
***************
*** 713,727 ****
  	-del $(TCLLIB)
  	-del $(TCLSH)
  	-del $(TCLTEST)
! 	-del $(TCLDDEDLL)
! 	-del $(TCLREGDLL)
  
! clean:
  	-@$(RMDIR) $(TMP_DIR)
  
  hose: clean
  	-@$(RMDIR) $(OUT_DIR)
- 
- 
- .SUFFIXES:
- .SUFFIXES:.c .rc
--- 768,778 ----
  	-del $(TCLLIB)
  	-del $(TCLSH)
  	-del $(TCLTEST)
! 	-del $(TCLDDELIB)
! 	-del $(TCLREGLIB)
  
! clean: tidy
  	-@$(RMDIR) $(TMP_DIR)
  
  hose: clean
  	-@$(RMDIR) $(OUT_DIR)

*** win/rules.vc	21 Feb 2002 18:37:27 -0000	1.6
--- win/rules.vc	27 Mar 2002 10:15:25 -0000
***************
*** 7,13 ****
  # See the file "license.terms" for information on usage and redistribution
  # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  # 
! # Copyright (c) 2001 Tomasoft Engineering.
  #
  #------------------------------------------------------------------------------
  # RCS: @(#) $Id: rules.vc,v 1.6 2002/02/21 18:37:27 davygrvy Exp $
--- 7,13 ----
  # See the file "license.terms" for information on usage and redistribution
  # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  # 
! # Copyright (c) 2001-2002 David Gravereaux.
  #
  #------------------------------------------------------------------------------
  # RCS: @(#) $Id: rules.vc,v 1.6 2002/02/21 18:37:27 davygrvy Exp $
***************
*** 31,49 ****
  
  !message ===============================================================================
  
- 
  #----------------------------------------------------------
! # Test for compiler features
  #----------------------------------------------------------
  
! ### Just display the compiler and linker versions to the output
! !if [$(cc32) 2>&1 | find "(R)"]
  !endif
- !if [$(link32) 2>&1 | find "(R)"]
  !endif
  
  ### test for optimizations
! !if [$(cc32) -Ox -nologo -c -Zs -TC -Fdtemp nul 2>&1 | find "D4002" > nul]
  !message *** Compiler has 'Optimizations'
  OPTIMIZING	= 1
  !else
--- 31,52 ----
  
  !message ===============================================================================
  
  #----------------------------------------------------------
! # build the helper app we need to overcome nmake's limiting
! # environment.
  #----------------------------------------------------------
  
! !if !exist(nmakehlp.exe)
! !if [$(cc32) -nologo -ML nmakehlp.c -link -subsystem:console > nul]
  !endif
  !endif
  
+ #----------------------------------------------------------
+ # Test for compiler features
+ #----------------------------------------------------------
+ 
  ### test for optimizations
! !if [nmakehlp -c -Ox]
  !message *** Compiler has 'Optimizations'
  OPTIMIZING	= 1
  !else
***************
*** 51,66 ****
  OPTIMIZING	= 0
  !endif
  
- ### test for pentium errata
  !if "$(MACHINE)" == "IX86"
! !if [$(cc32) -QI0f -nologo -c -Zs -TC -Fdtemp nul 2>&1 | find "D4002" > nul]
  !message *** Compiler has 'Pentium 0x0f fix'
  PENT_0F_ERRATA	= 1
  !else
  !message *** Compiler doesn't have 'Pentium 0x0f fix'
  PENT_0F_ERRATA	= 0
  !endif
! !if [$(link32) -nologo -opt:nowin98 2>&1 | find "LNK1117" > nul]
  !message *** Linker has 'Win98 alignment problem'
  ALIGN98_HACK	= 1
  !else
--- 54,70 ----
  OPTIMIZING	= 0
  !endif
  
  !if "$(MACHINE)" == "IX86"
! ### test for pentium errata
! !if [nmakehlp -c -QI0f]
  !message *** Compiler has 'Pentium 0x0f fix'
  PENT_0F_ERRATA	= 1
  !else
  !message *** Compiler doesn't have 'Pentium 0x0f fix'
  PENT_0F_ERRATA	= 0
  !endif
! ### test for -align:4096, when align:512 will do.
! !if [nmakehlp -l -opt:nowin98]
  !message *** Linker has 'Win98 alignment problem'
  ALIGN98_HACK	= 1
  !else
***************
*** 72,80 ****
  ALIGN98_HACK	= 0
  !endif
  
- ### test for Itanium errata
  !if "$(MACHINE)" == "IA64"
! !if [$(cc32) -QIA64_Bx -nologo -c -Zs -TC -Fdtemp nul 2>&1 | find "D4002" > nul]
  !message *** Compiler has 'B-stepping errata workarounds'
  ITAN_B_ERRATA	= 1
  !else
--- 76,84 ----
  ALIGN98_HACK	= 0
  !endif
  
  !if "$(MACHINE)" == "IA64"
! ### test for Itanium errata
! !if [nmakehlp -c -QIA64_Bx]
  !message *** Compiler has 'B-stepping errata workarounds'
  ITAN_B_ERRATA	= 1
  !else
***************
*** 85,100 ****
  ITAN_B_ERRATA	= 0
  !endif
  
- ### Clean-up temp files after tests.
- !if [@for %d in (temp.idb temp.pdb) do @if exist %d del %d]
- !endif
- 
- 
  #----------------------------------------------------------
  # Decode the options requested.
  #----------------------------------------------------------
  
! !if "$(OPTS)" == "" || ![echo "$(OPTS)" | find /i "none" > nul]
  STATIC_BUILD	= 0
  TCL_THREADS	= 0
  DEBUG		= 0
--- 89,99 ----
  ITAN_B_ERRATA	= 0
  !endif
  
  #----------------------------------------------------------
  # Decode the options requested.
  #----------------------------------------------------------
  
! !if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]
  STATIC_BUILD	= 0
  TCL_THREADS	= 0
  DEBUG		= 0
***************
*** 103,145 ****
  LOIMPACT	= 0
  TCL_LINKWITHEXTENSIONS	= 0
  !else
! !if ![echo $(OPTS) | find /i "static" > nul]
  !message *** Doing static
  STATIC_BUILD	= 1
  !else
  STATIC_BUILD	= 0
  !endif
! !if ![echo $(OPTS) | find /i "msvcrt" > nul]
  !message *** Doing msvcrt
  MSVCRT		= 1
  !else
  MSVCRT		= 0
  !endif
! !if ![echo $(OPTS) | find /i "linkexten" > nul]
  !message *** Doing linkexten
  TCL_LINKWITHEXTENSIONS	= 1
  !else
  TCL_LINKWITHEXTENSIONS	= 0
  !endif
! !if ![echo $(OPTS) | find /i "threads" > nul]
  !message *** Doing threads
  TCL_THREADS	= 1
  !else
  TCL_THREADS	= 0
  !endif
! !if ![echo $(OPTS) | find /i "symbols" > nul]
  !message *** Doing symbols
  DEBUG		= 1
  !else
  DEBUG		= 0
  !endif
! !if ![echo $(OPTS) | find /i "profile" > nul]
  !message *** Doing profile
  PROFILE		= 1
  !else
  PROFILE		= 0
  !endif
! !if ![echo $(OPTS) | find /i "loimpact" > nul]
  !message *** Doing loimpact
  LOIMPACT	= 1
  !else
--- 102,144 ----
  LOIMPACT	= 0
  TCL_LINKWITHEXTENSIONS	= 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) "linkexten"]
  !message *** Doing linkexten
  TCL_LINKWITHEXTENSIONS	= 1
  !else
  TCL_LINKWITHEXTENSIONS	= 0
  !endif
! !if [nmakehlp -f $(OPTS) "threads"]
  !message *** Doing threads
  TCL_THREADS	= 1
  !else
  TCL_THREADS	= 0
  !endif
! !if [nmakehlp -f $(OPTS) "symbols"]
  !message *** Doing symbols
  DEBUG		= 1
  !else
  DEBUG		= 0
  !endif
! !if [nmakehlp -f $(OPTS) "profile"]
  !message *** Doing profile
  PROFILE		= 1
  !else
  PROFILE		= 0
  !endif
! !if [nmakehlp -f $(OPTS) "loimpact"]
  !message *** Doing loimpact
  LOIMPACT	= 1
  !else
***************
*** 213,229 ****
  # Decode the statistics requested.
  #----------------------------------------------------------
  
! !if "$(STATS)" == "" || ![echo "$(STATS)" | find /i "none" > nul]
  TCL_MEM_DEBUG	    = 0
  TCL_COMPILE_DEBUG   = 0
  !else
! !if ![echo $(STATS) | find /i "memdbg" > nul]
  !message *** Doing memdbg
  TCL_MEM_DEBUG	    = 1
  !else
  TCL_MEM_DEBUG	    = 0
  !endif
! !if ![echo $(STATS) | find /i "compdbg" > nul]
  !message *** Doing compdbg
  TCL_COMPILE_DEBUG   = 1
  !else
--- 212,228 ----
  # 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
***************
*** 259,264 ****
  !message *** Output directory will be '$(OUT_DIR)'
  !message *** Suffix for binaries will be '$(SUFX)'
  !message *** Optional defines are '$(OPTDEFINES)'
- !message
  
  !endif
--- 258,262 ----