1#
2# This file is a Makefile for Tcl.  If it has the name "Makefile.in"
3# then it is a template for a Makefile;  to generate the actual Makefile,
4# run "./configure", which is a configuration script generated by the
5# "autoconf" program (constructs like "@foo@" will get replaced in the
6# actual Makefile.
7#
8# RCS: @(#) $Id: Makefile.in,v 1.68.2.7 2007/01/30 23:21:12 hobbs Exp $
9
10VERSION = @TCL_VERSION@
11
12#----------------------------------------------------------------
13# Things you can change to personalize the Makefile for your own
14# site (you can make these changes in either Makefile.in or
15# Makefile, but changes to Makefile will get lost if you re-run
16# the configuration script).
17#----------------------------------------------------------------
18
19# Default top-level directories in which to install architecture-
20# specific files (exec_prefix) and machine-independent files such
21# as scripts (prefix).  The values specified here may be overridden
22# at configure-time with the --exec-prefix and --prefix options
23# to the "configure" script.
24
25prefix			= @prefix@
26exec_prefix		= @exec_prefix@
27bindir			= @bindir@
28libdir			= @libdir@
29includedir		= @includedir@
30mandir			= @mandir@
31
32# The following definition can be set to non-null for special systems
33# like AFS with replication.  It allows the pathnames used for installation
34# to be different than those used for actually reference files at
35# run-time.  INSTALL_ROOT is prepended to $prefix and $exec_prefix
36# when installing files.
37INSTALL_ROOT	=
38
39# Directory from which applications will reference the library of Tcl
40# scripts (note: you can set the TCL_LIBRARY environment variable at
41# run-time to override this value):
42TCL_LIBRARY	= $(prefix)/lib/tcl$(VERSION)
43
44# Path to use at runtime to refer to LIB_INSTALL_DIR:
45LIB_RUNTIME_DIR		= $(libdir)
46
47# Directory in which to install the program tclsh:
48BIN_INSTALL_DIR		= $(INSTALL_ROOT)$(bindir)
49
50# Directory in which to install the .a or .so binary for the Tcl library:
51LIB_INSTALL_DIR		= $(INSTALL_ROOT)$(libdir)
52
53# Path name to use when installing library scripts.
54SCRIPT_INSTALL_DIR	= $(INSTALL_ROOT)$(TCL_LIBRARY)
55
56# Directory in which to install the include file tcl.h:
57INCLUDE_INSTALL_DIR	= $(INSTALL_ROOT)$(includedir)
58
59# Directory in which to (optionally) install the private tcl headers:
60PRIVATE_INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(includedir)
61
62# Top-level directory in which to install manual entries:
63MAN_INSTALL_DIR		= $(INSTALL_ROOT)$(mandir)
64
65# Directory in which to install manual entry for tclsh:
66MAN1_INSTALL_DIR = $(MAN_INSTALL_DIR)/man1
67
68# Directory in which to install manual entries for Tcl's C library
69# procedures:
70MAN3_INSTALL_DIR = $(MAN_INSTALL_DIR)/man3
71
72# Directory in which to install manual entries for the built-in
73# Tcl commands:
74MANN_INSTALL_DIR = $(MAN_INSTALL_DIR)/mann
75
76# Libraries built with optimization switches have this additional extension
77TCL_DBGX = @TCL_DBGX@
78
79# warning flags
80CFLAGS_WARNING = @CFLAGS_WARNING@
81
82# The default switches for optimization or debugging
83CFLAGS_DEBUG    = @CFLAGS_DEBUG@
84CFLAGS_OPTIMIZE	= @CFLAGS_OPTIMIZE@
85
86# To change the compiler switches, for example to change from optimization to
87# debugging symbols, change the following line:
88#CFLAGS = 		$(CFLAGS_DEBUG)
89#CFLAGS = 		$(CFLAGS_OPTIMIZE)
90#CFLAGS = 		$(CFLAGS_DEBUG) $(CFLAGS_OPTIMIZE)
91CFLAGS = 		@CFLAGS@ @CFLAGS_DEFAULT@
92
93# To enable compilation debugging reverse the comment characters on
94# one of the following lines.
95COMPILE_DEBUG_FLAGS =
96#COMPILE_DEBUG_FLAGS = -DTCL_COMPILE_DEBUG
97#COMPILE_DEBUG_FLAGS = -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
98
99# Special compiler flags to use when building man2tcl on Windows.
100MAN2TCLFLAGS		= @MAN2TCLFLAGS@
101
102SRC_DIR			= @srcdir@
103ROOT_DIR		= @srcdir@/..
104GENERIC_DIR		= @srcdir@/../generic
105WIN_DIR			= @srcdir@
106COMPAT_DIR		= @srcdir@/../compat
107
108# Converts a POSIX path to a Windows native path.
109CYGPATH			= @CYGPATH@
110
111GENERIC_DIR_NATIVE	= $(shell $(CYGPATH) '$(GENERIC_DIR)' | sed 's!\\!/!g')
112WIN_DIR_NATIVE		= $(shell $(CYGPATH) '$(WIN_DIR)' | sed 's!\\!/!g')
113ROOT_DIR_NATIVE		= $(shell $(CYGPATH) '$(ROOT_DIR)' | sed 's!\\!/!g')
114
115LIBRARY_DIR		= $(ROOT_DIR_NATIVE)/library
116
117DLLSUFFIX		= @DLLSUFFIX@
118LIBSUFFIX		= @LIBSUFFIX@
119EXESUFFIX		= @EXESUFFIX@
120
121TCL_STUB_LIB_FILE	= @TCL_STUB_LIB_FILE@
122TCL_DLL_FILE		= @TCL_DLL_FILE@
123TCL_LIB_FILE		= @TCL_LIB_FILE@
124DDE_DLL_FILE		= tcldde$(DDEVER)${DLLSUFFIX}
125DDE_LIB_FILE		= tcldde$(DDEVER)${LIBSUFFIX}
126REG_DLL_FILE		= tclreg$(REGVER)${DLLSUFFIX}
127REG_LIB_FILE		= tclreg$(REGVER)${LIBSUFFIX}
128PIPE_DLL_FILE		= tclpip$(VER)${DLLSUFFIX}
129
130SHARED_LIBRARIES 	= $(TCL_DLL_FILE) $(TCL_STUB_LIB_FILE) \
131			  $(DDE_DLL_FILE) $(REG_DLL_FILE) $(PIPE_DLL_FILE)
132STATIC_LIBRARIES	= $(TCL_LIB_FILE) $(REG_LIB_FILE) $(DDE_LIB_FILE)
133
134# TCL_EXE is the name of a tclsh executable that is available *BEFORE*
135# running make for the first time. Certain build targets (make genstubs)
136# need it to be available on the PATH. This executable should *NOT* be
137# required just to do a normal build although it can be required to run
138# make dist.
139TCL_EXE			= tclsh
140
141TCLSH			= tclsh$(VER)${EXESUFFIX}
142TCLTEST			= tcltest${EXEEXT}
143CAT32			= cat32$(EXEEXT)
144MAN2TCL			= man2tcl$(EXEEXT)
145
146@SET_MAKE@
147
148# Setting the VPATH variable to a list of paths will cause the 
149# makefile to look into these paths when resolving .c to .obj
150# dependencies.
151
152VPATH = $(GENERIC_DIR):$(WIN_DIR):$(COMPAT_DIR)
153
154AR		= @AR@
155RANLIB		= @RANLIB@
156CC		= @CC@
157RC		= @RC@
158RES		= @RES@
159AC_FLAGS	= @EXTRA_CFLAGS@ @DEFS@
160CPPFLAGS	= @CPPFLAGS@
161LDFLAGS_DEBUG   = @LDFLAGS_DEBUG@
162LDFLAGS_OPTIMIZE = @LDFLAGS_OPTIMIZE@
163LDFLAGS		= @LDFLAGS@ @LDFLAGS_DEFAULT@
164LDFLAGS_CONSOLE	= @LDFLAGS_CONSOLE@
165LDFLAGS_WINDOW	= @LDFLAGS_WINDOW@
166EXEEXT		= @EXEEXT@
167OBJEXT		= @OBJEXT@
168STLIB_LD	= @STLIB_LD@
169SHLIB_LD	= @SHLIB_LD@
170SHLIB_LD_LIBS	= @SHLIB_LD_LIBS@ $(LIBS)
171SHLIB_CFLAGS	= @SHLIB_CFLAGS@
172SHLIB_SUFFIX	= @SHLIB_SUFFIX@
173VER		= @TCL_MAJOR_VERSION@@TCL_MINOR_VERSION@
174DOTVER		= @TCL_MAJOR_VERSION@.@TCL_MINOR_VERSION@
175DDEVER		= @TCL_DDE_MAJOR_VERSION@@TCL_DDE_MINOR_VERSION@
176DDEDOTVER	= @TCL_DDE_MAJOR_VERSION@.@TCL_DDE_MINOR_VERSION@
177REGVER		= @TCL_REG_MAJOR_VERSION@@TCL_REG_MINOR_VERSION@
178REGDOTVER	= @TCL_REG_MAJOR_VERSION@.@TCL_REG_MINOR_VERSION@
179LIBS		= @LIBS@
180
181RMDIR		= rm -rf
182MKDIR		= mkdir -p
183SHELL		= @SHELL@
184RM		= rm -f
185COPY		= cp
186
187CC_SWITCHES = ${CFLAGS} ${CFLAGS_WARNING} ${TCL_SHLIB_CFLAGS} \
188-I"${GENERIC_DIR_NATIVE}" -I"${WIN_DIR_NATIVE}" ${AC_FLAGS} \
189${COMPILE_DEBUG_FLAGS}
190
191CC_OBJNAME = @CC_OBJNAME@
192CC_EXENAME = @CC_EXENAME@
193
194STUB_CC_SWITCHES = ${CFLAGS} ${CFLAGS_WARNING} ${SHLIB_CFLAGS} \
195-I"${GENERIC_DIR_NATIVE}" -I"${WIN_DIR_NATIVE}" ${AC_FLAGS} \
196${COMPILE_DEBUG_FLAGS}
197
198TCLTEST_OBJS = \
199	tclTest.$(OBJEXT) \
200	tclTestObj.$(OBJEXT) \
201	tclTestProcBodyObj.$(OBJEXT) \
202	tclThreadTest.$(OBJEXT) \
203	tclWinTest.$(OBJEXT) \
204	testMain.$(OBJEXT)
205
206GENERIC_OBJS = \
207	regcomp.$(OBJEXT) \
208	regexec.$(OBJEXT) \
209	regfree.$(OBJEXT) \
210	regerror.$(OBJEXT) \
211	tclAlloc.$(OBJEXT) \
212	tclAsync.$(OBJEXT) \
213	tclBasic.$(OBJEXT) \
214	tclBinary.$(OBJEXT) \
215	tclCkalloc.$(OBJEXT) \
216	tclClock.$(OBJEXT) \
217	tclCmdAH.$(OBJEXT) \
218	tclCmdIL.$(OBJEXT) \
219	tclCmdMZ.$(OBJEXT) \
220	tclCompCmds.$(OBJEXT) \
221	tclCompExpr.$(OBJEXT) \
222	tclCompile.$(OBJEXT) \
223	tclDate.$(OBJEXT) \
224	tclEncoding.$(OBJEXT) \
225	tclEnv.$(OBJEXT) \
226	tclEvent.$(OBJEXT) \
227	tclExecute.$(OBJEXT) \
228	tclFCmd.$(OBJEXT) \
229	tclFileName.$(OBJEXT) \
230	tclGet.$(OBJEXT) \
231	tclHash.$(OBJEXT) \
232	tclHistory.$(OBJEXT) \
233	tclIndexObj.$(OBJEXT) \
234	tclInterp.$(OBJEXT) \
235	tclIO.$(OBJEXT) \
236	tclIOCmd.$(OBJEXT) \
237	tclIOGT.$(OBJEXT) \
238	tclIOSock.$(OBJEXT) \
239	tclIOUtil.$(OBJEXT) \
240	tclLink.$(OBJEXT) \
241	tclLiteral.$(OBJEXT) \
242	tclListObj.$(OBJEXT) \
243	tclLoad.$(OBJEXT) \
244	tclMain.$(OBJEXT) \
245	tclNamesp.$(OBJEXT) \
246	tclNotify.$(OBJEXT) \
247	tclObj.$(OBJEXT) \
248	tclPanic.$(OBJEXT) \
249	tclParse.$(OBJEXT) \
250	tclParseExpr.$(OBJEXT) \
251	tclPipe.$(OBJEXT) \
252	tclPkg.$(OBJEXT) \
253	tclPosixStr.$(OBJEXT) \
254	tclPreserve.$(OBJEXT) \
255	tclProc.$(OBJEXT) \
256	tclRegexp.$(OBJEXT) \
257	tclResolve.$(OBJEXT) \
258	tclResult.$(OBJEXT) \
259	tclScan.$(OBJEXT) \
260	tclStringObj.$(OBJEXT) \
261	tclStubInit.$(OBJEXT) \
262	tclStubLib.$(OBJEXT) \
263	tclThread.$(OBJEXT) \
264	tclThreadAlloc.$(OBJEXT) \
265	tclThreadJoin.$(OBJEXT) \
266	tclTimer.$(OBJEXT) \
267	tclUtf.$(OBJEXT) \
268	tclUtil.$(OBJEXT) \
269	tclVar.$(OBJEXT)
270
271WIN_OBJS = \
272	tclWin32Dll.$(OBJEXT) \
273	tclWinChan.$(OBJEXT) \
274	tclWinConsole.$(OBJEXT) \
275	tclWinSerial.$(OBJEXT) \
276	tclWinError.$(OBJEXT) \
277	tclWinFCmd.$(OBJEXT) \
278	tclWinFile.$(OBJEXT) \
279	tclWinInit.$(OBJEXT) \
280	tclWinLoad.$(OBJEXT) \
281	tclWinMtherr.$(OBJEXT) \
282	tclWinNotify.$(OBJEXT) \
283	tclWinPipe.$(OBJEXT) \
284	tclWinSock.$(OBJEXT) \
285	tclWinThrd.$(OBJEXT) \
286	tclWinTime.$(OBJEXT) 
287
288COMPAT_OBJS = \
289	strftime.$(OBJEXT) strtoll.$(OBJEXT) strtoull.$(OBJEXT)
290
291PIPE_OBJS = stub16.$(OBJEXT)
292
293DDE_OBJS = tclWinDde.$(OBJEXT)
294
295REG_OBJS = tclWinReg.$(OBJEXT)
296
297STUB_OBJS = tclStubLib.$(OBJEXT)
298
299TCLSH_OBJS = tclAppInit.$(OBJEXT)
300
301TCL_OBJS = ${GENERIC_OBJS} ${WIN_OBJS} ${COMPAT_OBJS}
302
303TCL_DOCS = "$(ROOT_DIR_NATIVE)"/doc/*.[13n]
304
305all: binaries libraries doc
306
307tcltest: $(TCLTEST)
308
309binaries: @LIBRARIES@ $(TCLSH)
310
311libraries:
312
313doc:
314
315winhelp: $(ROOT_DIR)/tools/man2help.tcl $(MAN2TCL)
316	TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
317	./$(TCLSH) "$(ROOT_DIR_NATIVE)"/tools/man2help.tcl tcl "$(VER)" $(TCL_DOCS)
318	hcw /c /e tcl.hpj
319
320$(MAN2TCL): $(ROOT_DIR)/tools/man2tcl.c
321	$(CC) $(CFLAGS_OPTIMIZE) $(MAN2TCLFLAGS) -o $(MAN2TCL) "$(ROOT_DIR_NATIVE)"/tools/man2tcl.c
322
323$(TCLSH): $(TCL_LIB_FILE) $(TCL_STUB_LIB_FILE) $(TCLSH_OBJS) tclsh.$(RES)
324	$(CC) $(CFLAGS) $(TCLSH_OBJS) $(TCL_LIB_FILE) $(LIBS) \
325        tclsh.$(RES) $(CC_EXENAME) $(LDFLAGS_CONSOLE)
326
327$(TCLTEST): $(TCL_LIB_FILE) $(TCLTEST_OBJS) $(CAT32) tclsh.$(RES)
328	$(CC) $(CFLAGS) $(TCLTEST_OBJS) $(TCL_LIB_FILE) $(LIBS) \
329        tclsh.$(RES) $(CC_EXENAME) $(LDFLAGS_CONSOLE)
330
331cat32.$(OBJEXT): cat.c
332	$(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
333
334$(CAT32): cat32.$(OBJEXT)
335	$(CC) $(CFLAGS) cat32.$(OBJEXT) $(CC_EXENAME) $(LIBS) $(LDFLAGS_CONSOLE)
336
337# The following targets are configured by autoconf to generate either
338# a shared library or static library
339
340${TCL_STUB_LIB_FILE}: ${STUB_OBJS}
341	@$(RM) ${TCL_STUB_LIB_FILE}
342	@MAKE_LIB@ ${STUB_OBJS}
343	@POST_MAKE_LIB@
344
345${TCL_DLL_FILE}: ${TCL_OBJS} tcl.$(RES)
346	@$(RM) ${TCL_DLL_FILE}
347	@MAKE_DLL@ ${TCL_OBJS} tcl.$(RES) $(SHLIB_LD_LIBS)
348
349${TCL_LIB_FILE}: ${TCL_OBJS}
350	@$(RM) ${TCL_LIB_FILE}
351	@MAKE_LIB@ ${TCL_OBJS}
352	@POST_MAKE_LIB@
353
354${DDE_DLL_FILE}: ${DDE_OBJS} ${TCL_STUB_LIB_FILE}
355	@$(RM) ${DDE_DLL_FILE}
356	@MAKE_DLL@ ${DDE_OBJS} $(TCL_STUB_LIB_FILE) $(SHLIB_LD_LIBS)
357
358${DDE_LIB_FILE}: ${DDE_OBJS} ${TCL_LIB_FILE}
359	@$(RM) ${DDE_LIB_FILE}
360	@MAKE_LIB@ ${DDE_OBJS} ${TCL_LIB_FILE}
361
362${REG_DLL_FILE}: ${REG_OBJS} ${TCL_STUB_LIB_FILE}
363	@$(RM) ${REG_DLL_FILE}
364	@MAKE_DLL@ ${REG_OBJS} $(TCL_STUB_LIB_FILE) $(SHLIB_LD_LIBS)
365
366${REG_LIB_FILE}: ${REG_OBJS} ${TCL_LIB_FILE}
367	@$(RM) ${REG_LIB_FILE}
368	@MAKE_LIB@ ${REG_OBJS} ${TCL_LIB_FILE}
369
370# PIPE_DLL_FILE is actually an executable, don't build it
371# like a DLL.
372
373${PIPE_DLL_FILE}: ${PIPE_OBJS}
374	@$(RM) ${PIPE_DLL_FILE}
375	@MAKE_EXE@ $(CFLAGS) ${PIPE_OBJS} $(LIBS) $(LDFLAGS_CONSOLE)
376
377# Add the object extension to the implicit rules.  By default .obj is not
378# automatically added.
379
380.SUFFIXES: .${OBJEXT}
381.SUFFIXES: .$(RES)
382.SUFFIXES: .rc
383
384# Special case object targets
385
386tclWinInit.${OBJEXT}: tclWinInit.c
387	$(CC) -c $(CC_SWITCHES) -DBUILD_tcl $(EXTFLAGS) @DEPARG@ $(CC_OBJNAME)
388
389tclWinPipe.${OBJEXT}: tclWinPipe.c
390	$(CC) -c $(CC_SWITCHES) -DBUILD_tcl -DTCL_PIPE_DLL=\"$(PIPE_DLL_FILE)\" \
391	    $(EXTFLAGS) @DEPARG@ $(CC_OBJNAME)
392
393testMain.${OBJEXT}: tclAppInit.c
394	$(CC) -c $(CC_SWITCHES) -DTCL_TEST @DEPARG@ $(CC_OBJNAME)
395
396tclTest.${OBJEXT}: tclTest.c
397	$(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
398
399tclTestObj.${OBJEXT}: tclTestObj.c
400	$(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
401
402tclWinTest.${OBJEXT}: tclWinTest.c
403	$(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
404
405tclAppInit.${OBJEXT} : tclAppInit.c
406	$(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
407
408# The following objects should be built using the stub interfaces
409
410tclWinReg.${OBJEXT} : tclWinReg.c
411	$(CC) -c $(CC_SWITCHES) -DUSE_TCL_STUBS @DEPARG@ $(CC_OBJNAME)
412
413tclWinDde.${OBJEXT} : tclWinDde.c
414	$(CC) -c $(CC_SWITCHES) -DUSE_TCL_STUBS @DEPARG@ $(CC_OBJNAME)
415
416# The following objects are part of the stub library and should not
417# be built as DLL objects but none of the symbols should be exported
418
419tclStubLib.${OBJEXT}: tclStubLib.c
420	$(CC) -c $(CC_SWITCHES) -DSTATIC_BUILD @DEPARG@ $(CC_OBJNAME)
421
422
423# Implicit rule for all object files that will end up in the Tcl library
424
425.c.${OBJEXT}:
426	$(CC) -c $(CC_SWITCHES) -DBUILD_tcl @DEPARG@ $(CC_OBJNAME)
427
428.rc.$(RES):
429	$(RC) @RC_OUT@ $@ @RC_TYPE@ @RC_DEFINES@ @RC_INCLUDE@ "$(GENERIC_DIR_NATIVE)" @RC_INCLUDE@ "$(WIN_DIR_NATIVE)" @DEPARG@
430
431install: all install-binaries install-libraries install-doc
432
433install-binaries: binaries
434	@for i in "$(LIB_INSTALL_DIR)" "$(BIN_INSTALL_DIR)" ; \
435	    do \
436	    if [ ! -d $$i ] ; then \
437		echo "Making directory $$i"; \
438		$(MKDIR) $$i; \
439		chmod 755 $$i; \
440		else true; \
441		fi; \
442	    done;
443	@for i in dde1.2 reg1.1; \
444	    do \
445	    if [ ! -d $(LIB_INSTALL_DIR)/$$i ] ; then \
446		echo "Making directory $(LIB_INSTALL_DIR)/$$i"; \
447		$(MKDIR) $(LIB_INSTALL_DIR)/$$i; \
448		else true; \
449		fi; \
450	    done;
451	@for i in $(TCL_DLL_FILE) $(TCLSH) $(PIPE_DLL_FILE); \
452	    do \
453	    if [ -f $$i ]; then \
454		echo "Installing $$i to $(BIN_INSTALL_DIR)/"; \
455		$(COPY) $$i "$(BIN_INSTALL_DIR)"; \
456	    fi; \
457	    done
458	@for i in tclConfig.sh $(TCL_LIB_FILE) $(TCL_STUB_LIB_FILE); \
459	    do \
460	    if [ -f $$i ]; then \
461		echo "Installing $$i to $(LIB_INSTALL_DIR)/"; \
462		$(COPY) $$i "$(LIB_INSTALL_DIR)"; \
463	    fi; \
464	    done
465	@if [ -f $(DDE_DLL_FILE) ]; then \
466	    echo installing $(DDE_DLL_FILE); \
467	    $(COPY) $(DDE_DLL_FILE) $(LIB_INSTALL_DIR)/dde1.2; \
468	    $(COPY) $(ROOT_DIR)/library/dde/pkgIndex.tcl \
469		$(LIB_INSTALL_DIR)/dde1.2; \
470	    fi
471	@if [ -f $(DDE_LIB_FILE) ]; then \
472	    echo installing $(DDE_LIB_FILE); \
473	    $(COPY) $(DDE_LIB_FILE) $(LIB_INSTALL_DIR)/dde1.2; \
474	    fi
475	@if [ -f $(REG_DLL_FILE) ]; then \
476	    echo installing $(REG_DLL_FILE); \
477	    $(COPY) $(REG_DLL_FILE) $(LIB_INSTALL_DIR)/reg1.1; \
478	    $(COPY) $(ROOT_DIR)/library/reg/pkgIndex.tcl \
479		$(LIB_INSTALL_DIR)/reg1.1; \
480	    fi
481	@if [ -f $(REG_LIB_FILE) ]; then \
482	    echo installing $(REG_LIB_FILE); \
483	    $(COPY) $(REG_LIB_FILE) $(LIB_INSTALL_DIR)/reg1.1; \
484	    fi
485
486install-libraries: libraries
487	@for i in $(prefix)/lib $(INCLUDE_INSTALL_DIR) \
488		$(SCRIPT_INSTALL_DIR); \
489	    do \
490	    if [ ! -d $$i ] ; then \
491		echo "Making directory $$i"; \
492		$(MKDIR) $$i; \
493		else true; \
494		fi; \
495	    done;
496	@for i in platform http1.0 http2.5 opt0.4 encoding msgcat1.3 tcltest2.2; \
497	    do \
498	    if [ ! -d $(SCRIPT_INSTALL_DIR)/$$i ] ; then \
499		echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \
500		$(MKDIR) $(SCRIPT_INSTALL_DIR)/$$i; \
501		else true; \
502		fi; \
503	    done;
504	@echo "Installing header files";
505	@for i in "$(GENERIC_DIR)/tcl.h" "$(GENERIC_DIR)/tclDecls.h" \
506		"$(GENERIC_DIR)/tclPlatDecls.h" ; \
507	    do \
508	    $(COPY) "$$i" "$(INCLUDE_INSTALL_DIR)"; \
509	    done;
510	@echo "Installing library files to $(SCRIPT_INSTALL_DIR)";
511	@for i in $(ROOT_DIR)/library/*.tcl $(ROOT_DIR)/library/tclIndex; \
512	    do \
513	    $(COPY) "$$i" "$(SCRIPT_INSTALL_DIR)"; \
514	    done;
515	@echo "Installing library platform directory";
516	@for j in $(ROOT_DIR)/library/platform/*.tcl; \
517	    do \
518	    $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/platform"; \
519	    done;
520	@echo "Installing library http1.0 directory";
521	@for j in $(ROOT_DIR)/library/http1.0/*.tcl; \
522	    do \
523	    $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/http1.0"; \
524	    done;
525	@echo "Installing library http2.5 directory";
526	@for j in $(ROOT_DIR)/library/http/*.tcl; \
527	    do \
528	    $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/http2.5"; \
529	    done;
530	@echo "Installing library opt0.4 directory";
531	@for j in $(ROOT_DIR)/library/opt/*.tcl; \
532	    do \
533	    $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/opt0.4"; \
534	    done;
535	@echo "Installing library msgcat1.3 directory";
536	@for j in $(ROOT_DIR)/library/msgcat/*.tcl; \
537	    do \
538	    $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/msgcat1.3"; \
539	    done;
540	@echo "Installing library tcltest2.2 directory";
541	@for j in $(ROOT_DIR)/library/tcltest/*.tcl; \
542	    do \
543	    $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/tcltest2.2"; \
544	    done;
545	@echo "Installing encodings";
546	@for i in $(ROOT_DIR)/library/encoding/*.enc ; do \
547		$(COPY) "$$i" "$(SCRIPT_INSTALL_DIR)/encoding"; \
548	done;
549
550install-doc: doc
551
552# Optional target to install private headers
553install-private-headers: libraries
554	@for i in $(PRIVATE_INCLUDE_INSTALL_DIR); \
555	    do \
556	    if [ ! -d $$i ] ; then \
557		echo "Making directory $$i"; \
558		$(MKDIR) $$i; \
559		chmod 755 $$i; \
560		else true; \
561		fi; \
562	    done;
563	@echo "Installing private header files to $(PRIVATE_INCLUDE_INSTALL_DIR)/";
564	@for i in "$(GENERIC_DIR)/tclInt.h" "$(GENERIC_DIR)/tclIntDecls.h" \
565		"$(GENERIC_DIR)/tclIntPlatDecls.h" "$(GENERIC_DIR)/tclPort.h" \
566		"$(WIN_DIR)/tclWinPort.h" ; \
567	    do \
568	    $(COPY) "$$i" "$(PRIVATE_INCLUDE_INSTALL_DIR)"; \
569	    done;
570
571# Specifying TESTFLAGS on the command line is the standard way to pass
572# args to tcltest, ie:
573#	% make test TESTFLAGS="-verbose bps -file fileName.test"
574
575test: binaries $(TCLTEST)
576	TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
577	./$(TCLTEST) "$(ROOT_DIR_NATIVE)/tests/all.tcl" $(TESTFLAGS) \
578	| ./$(CAT32)
579
580# Useful target to launch a built tcltest with the proper path,...
581runtest: binaries $(TCLTEST)
582	@TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
583	./$(TCLTEST) $(TESTFLAGS) $(SCRIPT)
584
585# This target can be used to run tclsh from the build directory
586# via `make shell SCRIPT=foo.tcl`
587shell: binaries
588	@TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
589	./$(TCLSH) $(SCRIPT)
590
591# This target can be used to run tclsh inside either gdb or insight
592gdb: binaries
593	@echo "set env TCL_LIBRARY=$(LIBRARY_DIR)" > gdb.run
594	gdb ./tclsh --command=gdb.run
595	rm gdb.run
596
597depend:
598
599Makefile: $(SRC_DIR)/Makefile.in
600	./config.status
601
602cleanhelp:
603	$(RM) *.hlp *.cnt *.GID *.rtf man2tcl.exe
604
605clean: cleanhelp
606	$(RM) *.lib *.a *.exp *.dll *.$(RES) *.${OBJEXT} *~ \#* TAGS a.out
607	$(RM) $(TCLSH) $(TCLTEST) $(CAT32)
608	$(RM) *.pch *.ilk *.pdb
609
610distclean: clean
611	$(RM) Makefile config.status config.cache config.log tclConfig.sh \
612		tcl.hpj
613
614#
615# Regenerate the stubs files.
616#
617
618$(GENERIC_DIR)/tclStubInit.c: $(GENERIC_DIR)/tcl.decls \
619		$(GENERIC_DIR)/tclInt.decls
620	@echo "Warning: tclStubInit.c may be out of date."
621	@echo "Developers may want to run \"make genstubs\" to regenerate."
622	@echo "This warning can be safely ignored, do not report as a bug!"
623
624genstubs:
625	$(TCL_EXE) "$(ROOT_DIR_NATIVE)\tools\genStubs.tcl" \
626	    "$(GENERIC_DIR_NATIVE)" \
627	    "$(GENERIC_DIR_NATIVE)\tcl.decls" \
628            "$(GENERIC_DIR_NATIVE)\tclInt.decls"
629