1#
2# Makefile for Borland C++ 5.5 (or C++ Builder 5), adapted from the makefile
3#   for Visual C++ that came with tcl 8.3.3
4#
5# See the file "license.terms" for information on usage and redistribution
6# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
7#
8# Copyright (c) 1995-1996 Sun Microsystems, Inc.
9# Copyright (c) 1998-1999 by Scriptics Corporation.
10
11# TIP #59 information.
12#
13# This makefile does not set the following configuration cpp
14# defines. Behind the defines are the makefile variables listed to set
15# to -D... when that feature is enabled.
16#
17# - TCL_CFG_PROFILED		PROFDEFINES
18# - TCL_CFG_OPTIMIZED		OPTDEFINES
19# - TCL_CFG_DO64BIT		SIXFOURDEFINES
20
21# Have a look at the complete description on how to build and test Tcl with
22# the current Borland compilers at www.ratiosoft.com/tcl/borland.
23#
24# Usage:
25#   - Adapt the paths below to match your compiler's location
26#   - Make sure the compiler's bin directory is on your path
27#   - Open a console
28#   - To make a debug version enter
29#       make -fmakefile.bc -DNODEBUG=0 xxx
30#     where 'xxx' is the target you want (e.g. 'all', 'test', ...)
31#     Please note: I omitted the 'd' suffix for debug versions because Tcl
32#     will always call tclpip83.dll and not tclpip83d.dll, causing an error.
33#                                                   ^
34#     Besides, the debug version goes into a separate directory, so there
35#     should be no problem having DLLs and EXEs with the same name.
36#     If you prefer your debug version having the 'd' suffix just uncomment
37#     the line
38#         #DBGX        = d
39#
40#   - To make a 'normal' version enter
41#       make -fmakefile.bc xxx
42#     where 'xxx' is the target you want (e.g. 'all', 'test', ...)
43#
44# DISCLAIMER:
45# This makefile has an experimental status - that is those targets which
46# have been modified do in fact compile and link with Borland's C++
47# Builder 5 and with the free Borland compiler (Borland C++ 5.5).
48# However the author assumes no responsiblity for any effect which the use of
49# this makefile or of the resulting programs might have on your system.
50#
51# Not yet modified:
52#   - The 'plug-in-DLL' and the associated shell.
53#   - The programs to create the windows help files.
54#
55# Suggestions and / or improvements are always welcome.
56#
57# May 2001, H. Giese (hgiese@ratiosoft.com)
58#
59
60# Does not depend on the presence of any environment variables in
61# order to compile tcl; all needed information is derived from
62# location of the compiler directories.
63
64#
65# Project directories
66#
67# ROOT    = top of source tree
68#
69# TOOLS32 = location of Borland development tools.
70#
71# INSTALLDIR = where the install-targets should copy the binaries and
72#     support files
73#
74
75ROOT		= ..
76INSTALLDIR	= c:\program files\tcl
77
78# If you have C++ Builder 5 or the free Borland C++ 5.5 compiler
79# adapt the following paths as appropriate for your system
80TOOLS32		= c:\dev\bcc55
81TOOLS32_rc	= c:\dev\bcc55
82#TOOLS32	= c:\bc55
83#TOOLS32_rc	= c:\bc55
84
85cc32		= "$(TOOLS32)\bin\bcc32.exe"
86link32		= "$(TOOLS32)\bin\ilink32.exe"
87lib32		= "$(TOOLS32)\bin\tlib.exe"
88rc32		= "$(TOOLS32_rc)\bin\brcc32.exe"
89include32	= -I"$(TOOLS32)\include"
90libpath32	= -L"$(TOOLS32)\lib"
91
92# Uncomment the following line to compile with thread support
93#THREADDEFINES	= -DTCL_THREADS=1
94
95# Allow definition of NDEBUG via command line
96# Set NODEBUG to 0 to compile with symbols
97!if !defined(NODEBUG)
98NODEBUG		= 1
99!endif
100
101#	CFG_ENCODING=encoding
102#		name of encoding for configuration information. Defaults
103#		to cp1252
104!if !defined(CFG_ENCODING)
105CFG_ENCODING	= \"cp1252\"
106!endif
107
108# The following defines can be used to control the amount of debugging
109# code that is added to the compilation.
110#
111# -DTCL_MEM_DEBUG   Enables the debugging memory allocator.
112# -DTCL_COMPILE_DEBUG Enables byte compilation logging.
113# -DTCL_COMPILE_STATS Enables byte compilation statistics gathering.
114# -DUSE_TCLALLOC=0  Disables the Tcl memory allocator in favor
115#       of the native malloc implementation.  This is
116#       needed when using Purify.
117#
118#DEBUGDEFINES	= -DTCL_MEM_DEBUG -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
119#DEBUGDEFINES	= -DUSE_TCLALLOC=0
120
121######################################################################
122# Do not modify below this line
123######################################################################
124
125NAMEPREFIX	= tcl
126STUBPREFIX	= $(NAMEPREFIX)stub
127DOTVERSION	= 8.5
128VERSION		= 85
129
130DDEVERSION = 13
131DDEDOTVERSION = 1.3
132
133REGVERSION = 12
134REGDOTVERSION = 1.2
135
136BINROOT		= ..
137!IF "$(NODEBUG)" == "1"
138TMPDIRNAME	= Release
139DBGX		=
140SYMDEFINES	= -DNDEBUG
141!ELSE
142TMPDIRNAME	= Debug
143#DBGX		= d
144DBGX		=
145SYMDEFINES	= -DTCL_CFG_DEBUG
146!ENDIF
147TMPDIR		= $(BINROOT)\$(TMPDIRNAME)
148OUTDIRNAME	= $(TMPDIRNAME)
149OUTDIR		= $(TMPDIR)
150
151TCLLIB		= $(OUTDIR)\$(NAMEPREFIX)$(VERSION)$(DBGX).lib
152TCLDLLNAME	= $(NAMEPREFIX)$(VERSION)$(DBGX).dll
153TCLDLL		= $(OUTDIR)\$(TCLDLLNAME)
154
155TCLSTUBLIBNAME	= $(STUBPREFIX)$(VERSION)$(DBGX).lib
156TCLSTUBLIB	= $(OUTDIR)\$(TCLSTUBLIBNAME)
157
158TCLPLUGINLIB	= $(OUTDIR)\$(NAMEPREFIX)$(VERSION)p$(DBGX).lib
159TCLPLUGINDLLNAME	= $(NAMEPREFIX)$(VERSION)p$(DBGX).dll
160TCLPLUGINDLL	= $(OUTDIR)\$(TCLPLUGINDLLNAME)
161TCLSH		= $(OUTDIR)\$(NAMEPREFIX)sh$(VERSION)$(DBGX).exe
162TCLSHP		= $(OUTDIR)\$(NAMEPREFIX)shp$(VERSION)$(DBGX).exe
163TCLPIPEDLLNAME	= $(NAMEPREFIX)pip$(VERSION)$(DBGX).dll
164TCLPIPEDLL	= $(OUTDIR)\$(TCLPIPEDLLNAME)
165TCLREGDLLNAME	= $(NAMEPREFIX)reg$(REGVERSION)$(DBGX).dll
166TCLREGDLL	= $(OUTDIR)\$(TCLREGDLLNAME)
167TCLDDEDLLNAME	= $(NAMEPREFIX)dde$(DDEVERSION)$(DBGX).dll
168TCLDDEDLL	= $(OUTDIR)\$(TCLDDEDLLNAME)
169TCLTEST		= $(OUTDIR)\$(NAMEPREFIX)test.exe
170CAT32		= $(TMPDIR)\cat32.exe
171RMDIR		= .\rmd.bat
172MKDIR		= .\mkd.bat
173RM		= del
174
175LIB_INSTALL_DIR	= $(INSTALLDIR)\lib
176BIN_INSTALL_DIR	= $(INSTALLDIR)\bin
177SCRIPT_INSTALL_DIR	= $(INSTALLDIR)\lib\tcl$(DOTVERSION)
178INCLUDE_INSTALL_DIR	= $(INSTALLDIR)\include
179
180TCLSHOBJS	= \
181	$(TMPDIR)\tclAppInit.obj
182
183TCLTESTOBJS	= \
184	$(TMPDIR)\tclTest.obj \
185	$(TMPDIR)\tclTestObj.obj \
186	$(TMPDIR)\tclTestProcBodyObj.obj \
187	$(TMPDIR)\tclThreadTest.obj \
188	$(TMPDIR)\tclWinTest.obj \
189	$(TMPDIR)\testMain.obj
190
191TCLOBJS	= \
192	$(TMPDIR)\regcomp.obj \
193	$(TMPDIR)\regexec.obj \
194	$(TMPDIR)\regfree.obj \
195	$(TMPDIR)\regerror.obj \
196	$(TMPDIR)\tclAlloc.obj \
197	$(TMPDIR)\tclAsync.obj \
198	$(TMPDIR)\tclBasic.obj \
199	$(TMPDIR)\tclBinary.obj \
200	$(TMPDIR)\tclCkalloc.obj \
201	$(TMPDIR)\tclClock.obj \
202	$(TMPDIR)\tclCmdAH.obj \
203	$(TMPDIR)\tclCmdIL.obj \
204	$(TMPDIR)\tclCmdMZ.obj \
205	$(TMPDIR)\tclCompCmds.obj \
206	$(TMPDIR)\tclCompExpr.obj \
207	$(TMPDIR)\tclCompile.obj \
208	$(TMPDIR)\tclConfig.obj \
209	$(TMPDIR)\tclDate.obj \
210	$(TMPDIR)\tclDictObj.obj \
211	$(TMPDIR)\tclEncoding.obj \
212	$(TMPDIR)\tclEnv.obj \
213	$(TMPDIR)\tclEvent.obj \
214	$(TMPDIR)\tclExecute.obj \
215	$(TMPDIR)\tclFCmd.obj \
216	$(TMPDIR)\tclFileName.obj \
217	$(TMPDIR)\tclGet.obj \
218	$(TMPDIR)\tclHash.obj \
219	$(TMPDIR)\tclHistory.obj \
220	$(TMPDIR)\tclIndexObj.obj \
221	$(TMPDIR)\tclInterp.obj \
222	$(TMPDIR)\tclIO.obj \
223	$(TMPDIR)\tclIOCmd.obj \
224	$(TMPDIR)\tclIOGT.obj \
225	$(TMPDIR)\tclIOSock.obj \
226	$(TMPDIR)\tclIOUtil.obj \
227	$(TMPDIR)\tclLink.obj \
228	$(TMPDIR)\tclLiteral.obj \
229	$(TMPDIR)\tclListObj.obj \
230	$(TMPDIR)\tclLoad.obj \
231	$(TMPDIR)\tclMain.obj \
232	$(TMPDIR)\tclNamesp.obj \
233	$(TMPDIR)\tclNotify.obj \
234	$(TMPDIR)\tclObj.obj \
235	$(TMPDIR)\tclPanic.obj \
236	$(TMPDIR)\tclParse.obj \
237	$(TMPDIR)\tclPipe.obj \
238	$(TMPDIR)\tclPkg.obj \
239	$(TMPDIR)\tclPkgConfig.obj \
240	$(TMPDIR)\tclPosixStr.obj \
241	$(TMPDIR)\tclPreserve.obj \
242	$(TMPDIR)\tclProc.obj \
243	$(TMPDIR)\tclRegexp.obj \
244	$(TMPDIR)\tclResolve.obj \
245	$(TMPDIR)\tclResult.obj \
246	$(TMPDIR)\tclScan.obj \
247	$(TMPDIR)\tclStringObj.obj \
248	$(TMPDIR)\tclStubInit.obj \
249	$(TMPDIR)\tclStubLib.obj \
250	$(TMPDIR)\tclThread.obj \
251	$(TMPDIR)\tclThreadJoin.obj \
252	$(TMPDIR)\tclTimer.obj \
253	$(TMPDIR)\tclTrace.obj \
254	$(TMPDIR)\tclUtf.obj \
255	$(TMPDIR)\tclUtil.obj \
256	$(TMPDIR)\tclVar.obj \
257	$(TMPDIR)\tclWin32Dll.obj \
258	$(TMPDIR)\tclWinChan.obj \
259	$(TMPDIR)\tclWinConsole.obj \
260	$(TMPDIR)\tclWinSerial.obj \
261	$(TMPDIR)\tclWinError.obj \
262	$(TMPDIR)\tclWinFCmd.obj \
263	$(TMPDIR)\tclWinFile.obj \
264	$(TMPDIR)\tclWinInit.obj \
265	$(TMPDIR)\tclWinLoad.obj \
266	$(TMPDIR)\tclWinNotify.obj \
267	$(TMPDIR)\tclWinPipe.obj \
268	$(TMPDIR)\tclWinSock.obj \
269	$(TMPDIR)\tclWinThrd.obj \
270	$(TMPDIR)\tclWinTime.obj
271
272TCLSTUBOBJS	= $(TMPDIR)\tclStubLib.obj
273
274WINDIR		= $(ROOT)\win
275GENERICDIR	= $(ROOT)\generic
276
277TCL_INCLUDES	= -I"$(WINDIR)" -I"$(GENERICDIR)"
278TCL_DEFINES	= $(DEBUGDEFINES) $(THREADDEFINES) $(SYMDEFINES) \
279			$(PROFDEFINES) $(OPTDEFINES) $(SIXFOURDEFINES) \
280			-DTCL_CFGVAL_ENCODING=${CFG_ENCODING}
281
282######################################################################
283# Compiler flags
284######################################################################
285
286!IF "$(NODEBUG)" == "1"
287# these macros cause maximum optimization and no symbols
288cdebug	= -v- -vi- -O2 -D_DEBUG
289!ELSE
290# these macros enable debugging
291cdebug	= -k -Od -r- -v -vi- -y
292!ENDIF
293
294SYSDEFINES	= _MT;NO_STRICT;_NO_VCL
295
296# declarations common to all compiler options
297cbase	= -c -q -3 -a4 -g0 -tWM -Ve -Vx -X-
298WARNINGS	= -w-rch -w-pch -w-par -w-dup -w-pro -w-dpu
299
300ccons	= -tWC
301
302INCLUDEPATH	= $(include32) $(TCL_INCLUDES)
303
304CFLAGS	= $(cdebug) $(cbase) $(INCLUDEPATH) $(WARNINGS) -D$(SYSDEFINES)
305TCL_CFLAGS	= $(CFLAGS) $(TCL_DEFINES)
306CONS_CFLAGS	= $(CFLAGS) $(TCL_DEFINES) $(ccons)
307
308######################################################################
309# Linker flags
310######################################################################
311
312!IF "$(NODEBUG)" == "1"
313ldebug	=
314!ELSE
315ldebug	= -v
316!ENDIF
317
318# declarations common to all linker options
319LNFLAGS	= -D"" -Gn -I$(TMPDIR) -x $(ldebug) $(libpath32)
320# -Gi: create lib file (is -Gl in doc)
321# -aa: Windows app, -ap: Windows console app
322LNFLAGS_DLL	= -ap -Gi -Tpd
323LNFLAGS_CONS	= -ap -Tpe
324
325LNLIBS	= import32 cw32mt
326
327
328######################################################################
329# Project specific targets
330######################################################################
331
332release:	setup $(TCLSH) dlls
333dlls:		setup $(TCLPIPEDLL) $(TCLREGDLL) $(TCLDDEDLL)
334all:		setup $(TCLSH) dlls $(CAT32)
335tcltest:	setup $(TCLTEST) dlls $(CAT32)
336plugin:		setup $(TCLPLUGINDLL) $(TCLSHP)
337install:	install-binaries install-libraries
338
339test:		setup $(TCLTEST) dlls $(CAT32)
340	set TCL_LIBRARY=$(ROOT)/library
341	$(TCLTEST) $(ROOT)/tests/all.tcl
342
343setup:
344	@if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR) &\
345		echo *** Created directory '$(OUT_DIR)'
346	@if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR) &\
347		echo *** Created directory '$(TMP_DIR)'
348
349
350$(TCLLIB): $(TCLDLL)
351
352$(TCLDLL): $(TCLOBJS) $(TMPDIR)\$(NAMEPREFIX).res
353	$(link32) $(ldebug) $(LNFLAGS) $(LNFLAGS_DLL) $(TOOLS32)\lib\c0d32 @&&!
354		$(TCLOBJS), $@, -x, $(LNLIBS),, $(TMPDIR)\$(NAMEPREFIX).res
355!
356
357$(TCLSTUBLIB): $(TCLSTUBOBJS)
358	$(lib32) /u $@ $(TCLSTUBOBJS)
359
360$(TCLPLUGINLIB): $(TCLPLUGINDLL)
361
362$(TCLPLUGINDLL): $(TCLOBJS) $(TMPDIR)\tcl.res
363	$(link32) $(ldebug) $(dlllflags) \
364		-out:$@ $(TMPDIR)\tcl.res $(guilibsdll) @&&!
365$(TCLOBJS)
366!
367
368$(TCLSH): $(TCLSHOBJS) $(TCLLIB) $(TMPDIR)\$(NAMEPREFIX)sh.res
369	$(link32) $(ldebug) -S:2400000 $(LNFLAGS) $(LNFLAGS_CONS) $(TOOLS32)\lib\c0x32 @&&!
370		$(TCLSHOBJS), $@, -x, $(LNLIBS) $(TCLLIB),, $(TMPDIR)\$(NAMEPREFIX)sh.res
371!
372
373$(TCLSHP): $(TCLSHOBJS) $(TCLPLUGINLIB) $(TMPDIR)\tclsh.res
374	$(link32) $(ldebug) $(conlflags) $(TMPDIR)\tclsh.res -stack:2300000 \
375		-out:$@ $(conlibsdll) $(TCLPLUGINLIB) $(TCLSHOBJS)
376
377$(TCLTEST): $(TCLTESTOBJS) $(TCLLIB) $(TMPDIR)\$(NAMEPREFIX)sh.res
378	$(link32) $(ldebug) -S:2400000 $(LNFLAGS) $(LNFLAGS_CONS) $(TOOLS32)\lib\c0x32 @&&!
379		$(TCLTESTOBJS), $@, -x, $(LNLIBS) $(TCLLIB),, $(TMPDIR)\$(NAMEPREFIX)sh.res
380!
381
382$(TCLPIPEDLL): $(WINDIR)\stub16.c
383	$(cc32) $(CFLAGS) -o$(TMPDIR)\stub16.obj $(WINDIR)\stub16.c
384	$(link32) $(ldebug) $(LNFLAGS) $(LNFLAGS_CONS) $(TOOLS32)\lib\c0x32 \
385		$(TMPDIR)\stub16.obj, $@, -x, $(LNLIBS),, $(TMPDIR)\$(NAMEPREFIX).res
386
387$(TCLDDEDLL): $(TMPDIR)\tclWinDde.obj $(TCLSTUBLIB)
388	$(link32) $(ldebug) $(LNFLAGS) $(LNFLAGS_DLL) $(TOOLS32)\lib\c0d32 \
389		$(TMPDIR)\tclWinDde.obj, $@, -x, $(LNLIBS) $(TCLSTUBLIB),, \
390		$(TMPDIR)\$(NAMEPREFIX).res
391
392$(TCLREGDLL): $(TMPDIR)\tclWinReg.obj $(TCLSTUBLIB)
393	$(link32) $(ldebug) $(LNFLAGS) $(LNFLAGS_DLL) $(TOOLS32)\lib\c0d32 \
394		$(TMPDIR)\tclWinReg.obj, $@, -x, $(LNLIBS) $(TCLSTUBLIB),, \
395		$(TMPDIR)\$(NAMEPREFIX).res
396
397$(CAT32): $(WINDIR)\cat.c
398	$(cc32) $(CONS_CFLAGS) -o$(TMPDIR)\cat.obj $?
399	$(link32) $(ldebug) $(LNFLAGS) $(LNFLAGS_CONS) $(TOOLS32)\lib\c0x32 \
400		$(TMPDIR)\cat.obj, $@, -x, $(LNLIBS),,
401
402install-binaries: $(TCLSH)
403	$(MKDIR) "$(BIN_INSTALL_DIR)"
404	$(MKDIR) "$(LIB_INSTALL_DIR)"
405	@echo Installing $(TCLDLLNAME)
406	@copy "$(TCLDLL)" "$(BIN_INSTALL_DIR)"
407	@copy "$(TCLLIB)" "$(LIB_INSTALL_DIR)"
408	@echo Installing "$(TCLSH)"
409	@copy "$(TCLSH)" "$(BIN_INSTALL_DIR)"
410	@echo Installing $(TCLPIPEDLLNAME)
411	@copy "$(TCLPIPEDLL)" "$(BIN_INSTALL_DIR)"
412	@echo Installing $(TCLSTUBLIBNAME)
413	@copy "$(TCLSTUBLIB)" "$(LIB_INSTALL_DIR)"
414
415install-libraries:
416	-@$(MKDIR) "$(LIB_INSTALL_DIR)"
417	-@$(MKDIR) "$(INCLUDE_INSTALL_DIR)"
418	-@$(MKDIR) "$(SCRIPT_INSTALL_DIR)"
419	@echo Installing http1.0
420	-@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\http1.0"
421	-@copy "$(ROOT)\library\http1.0\http.tcl"     "$(SCRIPT_INSTALL_DIR)\http1.0"
422	-@copy "$(ROOT)\library\http1.0\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\http1.0"
423	@echo Installing http2.7
424	-@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\http2.7"
425	-@copy "$(ROOT)\library\http\http.tcl"     "$(SCRIPT_INSTALL_DIR)\http2.7"
426	-@copy "$(ROOT)\library\http\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\http2.7"
427	@echo Installing opt0.4
428	-@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\opt0.4"
429	-@copy "$(ROOT)\library\opt\optparse.tcl" "$(SCRIPT_INSTALL_DIR)\opt0.4"
430	-@copy "$(ROOT)\library\opt\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\opt0.4"
431	@echo Installing msgcat1.5
432	-@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\msgcat1.5"
433	-@copy "$(ROOT)\library\msgcat\msgcat.tcl"   "$(SCRIPT_INSTALL_DIR)\msgcat1.5"
434	-@copy "$(ROOT)\library\msgcat\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\msgcat1.5"
435	@echo Installing tcltest2.3
436	-@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\tcltest2.3"
437	-@copy "$(ROOT)\library\tcltest\tcltest.tcl"   "$(SCRIPT_INSTALL_DIR)\tcltest2.3"
438	-@copy "$(ROOT)\library\tcltest\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\tcltest2.3"
439	@echo Installing platform1.0
440	-@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\platform1.0"
441	-@copy "$(ROOT)\library\platform\platform.tcl" "$(SCRIPT_INSTALL_DIR)\platform1.0"
442	-@copy "$(ROOT)\library\platform\shell.tcl"    "$(SCRIPT_INSTALL_DIR)\platform1.0"
443	-@copy "$(ROOT)\library\platform\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\platform1.0"
444	@echo Installing $(TCLDDEDLLNAME)
445	-@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\dde1.3"
446	-@copy "$(TCLDDEDLL)" "$(SCRIPT_INSTALL_DIR)\dde1.3"
447	-@copy "$(ROOT)\library\dde\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\dde1.3"
448	@echo Installing $(TCLREGDLLNAME)
449	-@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\reg1.2"
450	-@copy "$(TCLREGDLL)" "$(SCRIPT_INSTALL_DIR)\reg1.2"
451	-@copy "$(ROOT)\library\reg\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\reg1.2"
452	@echo Installing encoding files
453	-@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\encoding"
454	-@copy "$(ROOT)\library\encoding\*.enc" "$(SCRIPT_INSTALL_DIR)\encoding"
455	@echo Installing library files
456	-@copy "$(GENERICDIR)\tcl.h"         "$(INCLUDE_INSTALL_DIR)"
457	-@copy "$(GENERICDIR)\tclDecls.h"    "$(INCLUDE_INSTALL_DIR)"
458	-@copy "$(GENERICDIR)\tclPlatDecls.h" "$(INCLUDE_INSTALL_DIR)"
459	-@copy "$(ROOT)\library\history.tcl" "$(SCRIPT_INSTALL_DIR)"
460	-@copy "$(ROOT)\library\init.tcl"    "$(SCRIPT_INSTALL_DIR)"
461	-@copy "$(ROOT)\library\parray.tcl"  "$(SCRIPT_INSTALL_DIR)"
462	-@copy "$(ROOT)\library\safe.tcl"    "$(SCRIPT_INSTALL_DIR)"
463	-@copy "$(ROOT)\library\tclIndex"    "$(SCRIPT_INSTALL_DIR)"
464	-@copy "$(ROOT)\library\package.tcl" "$(SCRIPT_INSTALL_DIR)"
465	-@copy "$(ROOT)\library\word.tcl"    "$(SCRIPT_INSTALL_DIR)"
466	-@copy "$(ROOT)\library\auto.tcl"    "$(SCRIPT_INSTALL_DIR)"
467
468#
469# Regenerate the stubs files.
470#
471
472genstubs:
473	tclsh$(VERSION) $(ROOT)\tools\genStubs.tcl $(GENERICDIR) \
474		$(GENERICDIR)\tcl.decls $(GENERICDIR)\tclInt.decls
475
476#
477# Regenerate the windows help files.
478#
479
480TCLTOOLS	= $(ROOT)/tools
481MAN2TCL		= $(TCLTOOLS)/man2tcl
482TCLRTF		= $(TCLTOOLS)/tcl.rtf
483TCLHPJ		= $(TCLTOOLS)/tcl.hpj
484MAN2HELP	= $(TCLTOOLS)/man2help.tcl
485HCRTF		= $(TOOLS32)/bin/hcrtf.exe
486
487winhelp: $(TCLRTF)
488	cd $(TCLTOOLS)
489	start /wait $(HCRTF) -xn $(TCLHPJ)
490
491$(MAN2TCL).exe: $(MAN2TCL).obj
492	cd $(TCLTOOLS)
493	$(cc32) /nologo /G4 /ML /O2 $(MAN2TCL).c
494
495$(TCLRTF): $(MAN2TCL).exe $(TCLSH)
496	cd $(TCLTOOLS)
497	..\win\$(TCLSH) $(MAN2HELP) $(NAMEPREFIX) $(VERSION) $(ROOT)/doc ../../tk$(DOTVERSION)/doc
498
499#
500# Special case object file targets
501#
502$(TMPDIR)\tclWinInit.obj: $(WINDIR)\tclWinInit.c
503	$(cc32) -DBUILD_tcl $(TCL_CFLAGS) -o$(TMPDIR)\$@ $?
504
505$(TMPDIR)\testMain.obj: $(WINDIR)\tclAppInit.c
506	$(cc32) $(TCL_CFLAGS) -DTCL_TEST -o$(TMPDIR)\testMain.obj $?
507
508$(TMPDIR)\tclTest.obj: $(GENERICDIR)\tclTest.c
509	$(cc32) $(TCL_CFLAGS) -o$(TMPDIR)\$@ $?
510
511$(TMPDIR)\tclTestObj.obj: $(GENERICDIR)\tclTestObj.c
512	$(cc32) $(TCL_CFLAGS) -o$(TMPDIR)\$@ $?
513
514$(TMPDIR)\tclWinTest.obj: $(WINDIR)\tclWinTest.c
515	$(cc32) $(TCL_CFLAGS) -o$(TMPDIR)\$@ $?
516
517$(TMP_DIR)\tclPkgConfig.obj: $(GENERICDIR)\tclPkgConfig.c
518	$(cc32) $(TCL_CFLAGS) \
519		-DCFG_INSTALL_EXEC_PREFIX=\"$(INSTALL_EXEC_PREFIX)\"	\
520		-DCFG_INSTALL_PREFIX=\"$(INSTALL_PREFIX)\"		\
521		-DCFG_RUNTIME_EXEC_PREFIX=\"$(RUNTIME_EXEC_PREFIX)\"	\
522		-DCFG_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\"		\
523	 -o$(TMPDIR)\$@ $?
524
525$(TMPDIR)\tclAppInit.obj : $(WINDIR)\tclAppInit.c
526	$(cc32) $(TCL_CFLAGS) -o$(TMPDIR)\$@ $?
527
528# The following objects should be built using the stub interfaces
529
530# tclWinReg: Produces errors in ANSI mode
531$(TMPDIR)\tclWinReg.obj : $(WINDIR)\tclWinReg.c
532	$(cc32) $(TCL_CFLAGS) -DUSE_TCL_STUBS -o$(TMPDIR)\$@ $?
533
534# tclWinDde: Produces errors in ANSI mode
535$(TMPDIR)\tclWinDde.obj : $(WINDIR)\tclWinDde.c
536	$(cc32) $(TCL_CFLAGS) -DUSE_TCL_STUBS -o$(TMPDIR)\$@ $?
537
538
539# The following objects are part of the stub library and should not
540# be built as DLL objects but none of the symbols should be exported
541
542$(TMPDIR)\tclStubLib.obj : $(GENERICDIR)\tclStubLib.c
543	$(cc32) $(TCL_CFLAGS) -DSTATIC_BUILD -o$(TMPDIR)\$@ $?
544
545
546# Dedependency rules
547
548$(GENERICDIR)\regcomp.c: \
549	$(GENERICDIR)\regguts.h \
550	$(GENERICDIR)\regc_lex.c \
551	$(GENERICDIR)\regc_color.c \
552	$(GENERICDIR)\regc_nfa.c \
553	$(GENERICDIR)\regc_cvec.c \
554	$(GENERICDIR)\regc_locale.c
555
556$(GENERICDIR)\regcustom.h: \
557	$(GENERICDIR)\tclInt.h \
558	$(GENERICDIR)\tclPort.h \
559	$(GENERICDIR)\regex.h
560
561$(GENERICDIR)\regexec.c: \
562	$(GENERICDIR)\rege_dfa.c \
563	$(GENERICDIR)\regguts.h
564
565$(GENERICDIR)\regerror.c: $(GENERICDIR)\regguts.h
566$(GENERICDIR)\regfree.c: $(GENERICDIR)\regguts.h
567$(GENERICDIR)\regfronts.c: $(GENERICDIR)\regguts.h
568$(GENERICDIR)\regguts.h: $(GENERICDIR)\regcustom.h
569
570#
571# Implicit rules
572#
573
574{$(WINDIR)}.c{$(TMPDIR)}.obj:
575	$(cc32) -DBUILD_tcl $(TCL_CFLAGS) -o$@ $<
576
577{$(GENERICDIR)}.c{$(TMPDIR)}.obj:
578	$(cc32) -DBUILD_tcl $(TCL_CFLAGS) -o$@ $<
579
580{$(ROOT)\compat}.c{$(TMPDIR)}.obj:
581	$(cc32) -DBUILD_tcl $(TCL_CFLAGS) -o$@ $<
582
583{$(WINDIR)}.rc{$(TMPDIR)}.res:
584	$(rc32) $(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -fo$@ $<
585
586clean:
587	-@$(RM) $(OUTDIR)\*.exp
588	-@$(RM) $(OUTDIR)\*.lib
589	-@$(RM) $(OUTDIR)\*.dll
590	-@$(RM) $(OUTDIR)\*.exe
591	-@$(RM) $(OUTDIR)\*.pdb
592	-@$(RM) $(TMPDIR)\*.pch
593	-@$(RM) $(TMPDIR)\*.obj
594	-@$(RM) $(TMPDIR)\*.res
595	-@$(RM) $(TMPDIR)\*.exe
596	-@$(RMDIR) $(OUTDIR)
597	-@$(RMDIR) $(TMPDIR)
598