Steps for building mod_dtcl under NT for Apache with MingW32 
(http://www.mingw.org/). 

1)  Get Apache for NT/2000, I used version 1.3.X.  You can use the binary 
release or build it from source.  I built from source because I needed to 
also include mod_ssl.  Note that I used VC++ to build Apache - they don't 
support MingW32 yet AFAIK.

2)	Edit the win32\makefile in the mod_dtcl source tree to reflect your 
environment, i.e. where is Tcl installed, where is Apache installed, where
are your Apache sources and object files, etc.  The latest version of
the makefile has a 'bin_style' target that will allow the use of a binary
only install of Apache - see below and the makefile notes for more info.

	You may also specify values for these variables from the command line,
like this :

	make TEMP_LIBS=C:/TEMP/OBJ 

	NOTE:  See the makefile for the complete list of variable options.
	The latest version of the makefile has a 'bin_style' target that will 
	allow the use of a binary-only install of Apache - see below and the 
    makefile notes for more info.

	NOTE:  The makefile now has support for a threaded Tcl build - see
	the makefile for details. 

3)  Apply the diffs for Apache.  The diff for Apache wraps a few declarations 
and one #include directive in the os.h file that aren't needed or used with the MingW32 compiler.  

	I used GNU patch to do this with :	patch -c -b < os.h.diff

    NOTE: This patch may not apply cleanly as this file has changed in each 
	revision of Apache.  What the patch does is pretty obvious so it can be 
	applied by hand if needed.

4)  Run make.  There will be some warnings about a redefinition - you can 
ignore it. You should be left with a file called mod_dtcl.so.  

	NOTES: 

	If you are using Apache 1.3.14 or older that uses .dll files 
	for modules, you can run 'make dll_style' to get a dll file.  Or 
	you can simply rename the .so file :) 

	If you are using a recent binary install of Apache, you can run
	'make bin_style' to produce a 'mod_dtcl.so' without needing the
	Apache sources!  See the makefile for details.


5)  Run make install.  Make the changes to your Apache configuration as 
described on the mod_dtcl documentation, and you are off.

Notes :	
	-- Tcl needs to be in the path of the web server
	-- These instructions assume you have the MingW32 gcc setup as well
 	   as a good collection of GNU tools on your NT machine (sed, grep, etc).
	   They also assume you have Tcl setup.
	-- The makefile now supports GCC 2.X or GCC 3.x (new default).  
	-- The threaded Tcl support was tested with GCC 3.x and Tcl 8.4.1.
  	-- You will need a fairly recent version of the MingW32 toolset and 
	   the associated win32api fileset - see http://www.mingw.org for 
	   details on obtaining new releases.
	-- I've tried my best to make these instructions error free but	mistakes
	   are possible. 

Good Luck,
Craig
