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
10 VERSION = @TCL_VERSION@
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 #----------------------------------------------------------------
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.
26 exec_prefix = @exec_prefix@
29 includedir = @includedir@
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.
39 # Directory from which applications will reference the libary of Tcl
40 # scripts (note: you can set the TCL_LIBRARY environment variable at
41 # run-time to override this value):
42 TCL_LIBRARY = @datadir@/tcl$(VERSION)
44 # Path to use at runtime to refer to LIB_INSTALL_DIR:
45 LIB_RUNTIME_DIR = $(libdir)
47 # Directory in which to install the program tclsh:
48 BIN_INSTALL_DIR = $(INSTALL_ROOT)$(bindir)
50 # Directory in which to install the .a or .so binary for the Tcl library:
51 LIB_INSTALL_DIR = $(INSTALL_ROOT)$(libdir)
53 # Path name to use when installing library scripts.
54 SCRIPT_INSTALL_DIR = $(INSTALL_ROOT)$(TCL_LIBRARY)
56 # Directory in which to install the include file tcl.h:
57 INCLUDE_INSTALL_DIR = $(INSTALL_ROOT)$(includedir)
59 # Top-level directory in which to install manual entries:
60 MAN_INSTALL_DIR = $(INSTALL_ROOT)$(mandir)
62 # Directory in which to install manual entry for tclsh:
63 MAN1_INSTALL_DIR = $(MAN_INSTALL_DIR)/man1
65 # Directory in which to install manual entries for Tcl's C library
67 MAN3_INSTALL_DIR = $(MAN_INSTALL_DIR)/man3
69 # Directory in which to install manual entries for the built-in
71 MANN_INSTALL_DIR = $(MAN_INSTALL_DIR)/mann
73 # Libraries built with optimization switches have this additional extension
77 CFLAGS_WARNING = @CFLAGS_WARNING@
79 # The default switches for optimization or debugging
80 CFLAGS_DEBUG = @CFLAGS_DEBUG@
81 CFLAGS_OPTIMIZE = @CFLAGS_OPTIMIZE@
83 # To enable compilation debugging reverse the comment characters on
84 # one of the following lines.
86 #COMPILE_DEBUG_FLAGS = -DTCL_COMPILE_DEBUG
87 #COMPILE_DEBUG_FLAGS = -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
89 # The default switches for optimization or debugging
90 LDFLAGS_DEBUG = @LDFLAGS_DEBUG@
91 LDFLAGS_OPTIMIZE = @LDFLAGS_OPTIMIZE@
93 # To change the compiler switches, for example to change from optimization to
94 # debugging symbols, change the following line:
95 #CFLAGS = $(CFLAGS_DEBUG)
96 #CFLAGS = $(CFLAGS_OPTIMIZE)
97 #CFLAGS = $(CFLAGS_DEBUG) $(CFLAGS_OPTIMIZE)
98 CFLAGS = @CFLAGS@ @CFLAGS_DEFAULT@
100 # Special compiler flags to use when building man2tcl on Windows.
101 MAN2TCLFLAGS = @MAN2TCLFLAGS@
104 ROOT_DIR = @srcdir@/..
105 GENERIC_DIR = @srcdir@/../generic
107 COMPAT_DIR = @srcdir@/../compat
109 # This converts a POSIX path to a Windows native path
112 GENERIC_DIR_NATIVE = $(shell $(CYGPATH) '$(GENERIC_DIR)')
113 WIN_DIR_NATIVE = $(shell $(CYGPATH) '$(WIN_DIR)')
114 ROOT_DIR_NATIVE = $(shell $(CYGPATH) '$(ROOT_DIR)')
116 LIBRARY_DIR = $(shell echo '$(ROOT_DIR_NATIVE)/library' | sed 's/\\/\//g' )
118 VENDORPREFIX = @VENDORPREFIX@
119 DLLSUFFIX = @DLLSUFFIX@
120 LIBSUFFIX = @LIBSUFFIX@
121 EXESUFFIX = @EXESUFFIX@
122 LIBPREFIX = @LIBPREFIX@
124 TCL_STUB_LIB_FILE = @TCL_STUB_LIB_FILE@
125 TCL_DLL_FILE = @TCL_DLL_FILE@
126 TCL_LIB_FILE = @TCL_LIB_FILE@
127 TCL_DLL_BASE = @TCL_DLL_BASE@
128 GNU_TCL_LIB_FILE = @GNU_TCL_LIB_FILE@
129 MSVC_TCL_LIB_FILE = @MSVC_TCL_LIB_FILE@
130 DDE_DLL_FILE = @DDE_DLL_FILE@
131 DDE_LIB_FILE = @DDE_LIB_FILE@
132 DDE_DLL_BASE = @DDE_DLL_BASE@
133 REG_DLL_FILE = @REG_DLL_FILE@
134 REG_LIB_FILE = @REG_LIB_FILE@
135 REG_DLL_BASE = @REG_DLL_BASE@
136 PIPE_DLL_FILE = @PIPE_DLL_FILE@
138 SHARED_LIBRARIES = $(TCL_DLL_FILE) $(TCL_STUB_LIB_FILE) \
139 $(DDE_DLL_FILE) $(REG_DLL_FILE) $(PIPE_DLL_FILE)
140 STATIC_LIBRARIES = $(TCL_LIB_FILE) $(REG_LIB_FILE) $(DDE_LIB_FILE)
142 TCLSH = tclsh$(VER)${EXESUFFIX}
143 TCLTEST = tcltest${EXEEXT}
144 CAT32 = cat32$(EXEEXT)
145 MAN2TCL = man2tcl$(EXEEXT)
149 # Setting the VPATH variable to a list of paths will cause the
150 # makefile to look into these paths when resolving .c to .obj
153 VPATH = $(GENERIC_DIR):$(WIN_DIR):$(COMPAT_DIR)
160 AC_FLAGS = @EXTRA_CFLAGS@ @DEFS@
161 CPPFLAGS = @CPPFLAGS@
162 LDFLAGS = @LDFLAGS@ @LDFLAGS_DEFAULT@
163 LDFLAGS_CONSOLE = @LDFLAGS_CONSOLE@
164 LDFLAGS_WINDOW = @LDFLAGS_WINDOW@
167 STLIB_LD = @STLIB_LD@
168 SHLIB_LD = @SHLIB_LD@
169 SHLIB_LD_LIBS = @SHLIB_LD_LIBS@ $(LIBS)
170 SHLIB_CFLAGS = @SHLIB_CFLAGS@
171 SHLIB_SUFFIX = @SHLIB_SUFFIX@
172 VER = @TCL_MAJOR_VERSION@@TCL_MINOR_VERSION@
173 DOTVER = @TCL_MAJOR_VERSION@.@TCL_MINOR_VERSION@
182 CC_SWITCHES = ${CFLAGS} ${CFLAGS_WARNING} ${TCL_SHLIB_CFLAGS} \
183 -I"${GENERIC_DIR_NATIVE}" -I"${WIN_DIR_NATIVE}" ${AC_FLAGS} \
184 ${COMPILE_DEBUG_FLAGS}
186 CC_OBJNAME = @CC_OBJNAME@
187 CC_EXENAME = @CC_EXENAME@
189 STUB_CC_SWITCHES = ${CFLAGS} ${CFLAGS_WARNING} ${SHLIB_CFLAGS} \
190 -I"${GENERIC_DIR_NATIVE}" -I"${WIN_DIR_NATIVE}" ${AC_FLAGS} \
191 ${COMPILE_DEBUG_FLAGS}
195 tclTestObj.$(OBJEXT) \
196 tclTestProcBodyObj.$(OBJEXT) \
197 tclThreadTest.$(OBJEXT) \
198 tclWinTest.$(OBJEXT) \
209 tclBinary.$(OBJEXT) \
210 tclCkalloc.$(OBJEXT) \
215 tclCompCmds.$(OBJEXT) \
216 tclCompExpr.$(OBJEXT) \
217 tclCompile.$(OBJEXT) \
219 tclEncoding.$(OBJEXT) \
222 tclExecute.$(OBJEXT) \
224 tclFileName.$(OBJEXT) \
227 tclHistory.$(OBJEXT) \
228 tclIndexObj.$(OBJEXT) \
229 tclInterp.$(OBJEXT) \
233 tclIOSock.$(OBJEXT) \
234 tclIOUtil.$(OBJEXT) \
236 tclLiteral.$(OBJEXT) \
237 tclListObj.$(OBJEXT) \
240 tclNamesp.$(OBJEXT) \
241 tclNotify.$(OBJEXT) \
245 tclParseExpr.$(OBJEXT) \
248 tclPosixStr.$(OBJEXT) \
249 tclPreserve.$(OBJEXT) \
251 tclRegexp.$(OBJEXT) \
252 tclResolve.$(OBJEXT) \
253 tclResult.$(OBJEXT) \
255 tclStringObj.$(OBJEXT) \
256 tclStubInit.$(OBJEXT) \
257 tclStubLib.$(OBJEXT) \
258 tclThread.$(OBJEXT) \
265 tclWin32Dll.$(OBJEXT) \
266 tclWinChan.$(OBJEXT) \
267 tclWinConsole.$(OBJEXT) \
268 tclWinSerial.$(OBJEXT) \
269 tclWinError.$(OBJEXT) \
270 tclWinFCmd.$(OBJEXT) \
271 tclWinFile.$(OBJEXT) \
272 tclWinInit.$(OBJEXT) \
273 tclWinLoad.$(OBJEXT) \
274 tclWinMtherr.$(OBJEXT) \
275 tclWinNotify.$(OBJEXT) \
276 tclWinPipe.$(OBJEXT) \
277 tclWinSock.$(OBJEXT) \
278 tclWinThrd.$(OBJEXT) \
284 PIPE_OBJS = stub16.$(OBJEXT)
286 DDE_OBJS = tclWinDde.$(OBJEXT)
288 REG_OBJS = tclWinReg.$(OBJEXT)
290 STUB_OBJS = tclStubLib.$(OBJEXT)
292 TCLSH_OBJS = tclAppInit.$(OBJEXT)
294 TCL_OBJS = ${GENERIC_OBJS} ${WIN_OBJS} ${COMPAT_OBJS}
296 TCL_DOCS = "$(ROOT_DIR_NATIVE)"/doc/*.[13n]
298 all: binaries libraries doc
302 binaries: @LIBRARIES@ $(TCLSH)
308 winhelp: $(ROOT_DIR)/tools/man2help.tcl $(MAN2TCL)
309 TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
310 ./$(TCLSH) "$(ROOT_DIR_NATIVE)"/tools/man2help.tcl tcl "$(VER)" $(TCL_DOCS)
313 $(MAN2TCL): $(ROOT_DIR)/tools/man2tcl.c
314 $(CC) $(CFLAGS_OPTIMIZE) $(MAN2TCLFLAGS) -o $(MAN2TCL) "$(ROOT_DIR_NATIVE)"/tools/man2tcl.c
316 $(TCLSH): $(TCL_LIB_FILE) $(TCLSH_OBJS) tclsh.$(RES)
317 $(CC) $(CFLAGS) $(TCLSH_OBJS) $(TCL_LIB_FILE) $(LIBS) \
318 tclsh.$(RES) $(CC_EXENAME)
320 $(TCLTEST): $(TCL_LIB_FILE) $(TCLTEST_OBJS) $(CAT32) tclsh.$(RES)
321 $(CC) $(CFLAGS) $(TCLTEST_OBJS) $(TCL_LIB_FILE) $(LIBS) \
322 tclsh.$(RES) $(CC_EXENAME)
324 cat32.$(OBJEXT): cat.c
325 $(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
327 $(CAT32): cat32.$(OBJEXT)
328 $(CC) $(CFLAGS) cat32.$(OBJEXT) $(CC_EXENAME) $(LDFLAGS_CONSOLE)
330 # The following targets are configured by autoconf to generate either
331 # a shared library or static library
333 ${TCL_STUB_LIB_FILE}: ${STUB_OBJS}
334 @$(RM) ${TCL_STUB_LIB_FILE}
335 @MAKE_LIB@ ${STUB_OBJS}
338 ${GNU_TCL_LIB_FILE}: ${TCL_DLL_FILE}
340 ${TCL_DLL_FILE}: ${TCL_OBJS} tcl.$(RES)
341 @$(RM) ${TCL_DLL_FILE}
342 @MAKE_DLL@ ${TCL_OBJS} tcl.$(RES) $(SHLIB_LD_LIBS) $(TCL_DLL_BASE)
344 ${MSVC_TCL_LIB_FILE}: ${TCL_OBJS} ${TCL_DLL_FILE}
345 @$(RM) ${TCL_LIB_FILE}
346 @MAKE_LIB@ ${TCL_OBJS}
349 ${DDE_DLL_FILE}: ${DDE_OBJS} ${TCL_STUB_LIB_FILE}
350 @$(RM) ${DDE_DLL_FILE}
351 @MAKE_DLL@ ${DDE_OBJS} $(TCL_STUB_LIB_FILE) $(SHLIB_LD_LIBS) \
354 ${DDE_LIB_FILE}: ${DDE_OBJS} ${TCL_LIB_FILE}
355 @$(RM) ${DDE_LIB_FILE}
356 @MAKE_LIB@ ${DDE_OBJS} ${TCL_LIB_FILE}
358 ${REG_DLL_FILE}: ${REG_OBJS} ${TCL_STUB_LIB_FILE}
359 @$(RM) ${REG_DLL_FILE}
360 @MAKE_DLL@ ${REG_OBJS} ${TCL_STUB_LIB_FILE} $(SHLIB_LD_LIBS) \
363 ${REG_LIB_FILE}: ${REG_OBJS} ${TCL_LIB_FILE}
364 @$(RM) ${REG_LIB_FILE}
365 @MAKE_LIB@ ${REG_OBJS} ${TCL_LIB_FILE}
367 # PIPE_DLL_FILE is actually an executable, don't build it
370 ${PIPE_DLL_FILE}: ${PIPE_OBJS}
371 @$(RM) ${PIPE_DLL_FILE}
372 @MAKE_EXE@ $(CFLAGS) ${PIPE_OBJS} $(LIBS)
374 # Add the object extension to the implicit rules. By default .obj is not
375 # automatically added.
377 .SUFFIXES: .${OBJEXT}
381 # Special case object targets
383 tclWinInit.${OBJEXT}: tclWinInit.c
384 $(CC) -c $(CC_SWITCHES) -DBUILD_tcl $(EXTFLAGS) @DEPARG@ $(CC_OBJNAME)
386 testMain.${OBJEXT}: tclAppInit.c
387 $(CC) -c $(CC_SWITCHES) -DTCL_TEST @DEPARG@ $(CC_OBJNAME)
389 tclTest.${OBJEXT}: tclTest.c
390 $(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
392 tclTestObj.${OBJEXT}: tclTestObj.c
393 $(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
395 tclWinTest.${OBJEXT}: tclWinTest.c
396 $(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
398 tclAppInit.${OBJEXT} : tclAppInit.c
399 $(CC) -c $(CC_SWITCHES) @DEPARG@ $(CC_OBJNAME)
401 # The following objects should be built using the stub interfaces
403 tclWinReg.${OBJEXT} : tclWinReg.c
404 $(CC) -c $(CC_SWITCHES) -DUSE_TCL_STUBS @DEPARG@ $(CC_OBJNAME)
406 tclWinDde.${OBJEXT} : tclWinDde.c
407 $(CC) -c $(CC_SWITCHES) -DUSE_TCL_STUBS @DEPARG@ $(CC_OBJNAME)
409 # The following objects are part of the stub library and should not
410 # be built as DLL objects but none of the symbols should be exported
412 tclStubLib.${OBJEXT}: tclStubLib.c
413 $(CC) -c $(CC_SWITCHES) -DSTATIC_BUILD @DEPARG@ $(CC_OBJNAME)
416 # Implicit rule for all object files that will end up in the Tcl library
419 $(CC) -c $(CC_SWITCHES) -DBUILD_tcl @DEPARG@ $(CC_OBJNAME)
422 $(RC) @RC_OUT@ $@ @RC_TYPE@ @RC_INCLUDE@ "$(GENERIC_DIR_NATIVE)" @RC_INCLUDE@ "$(WIN_DIR_NATIVE)" @DEPARG@
424 install: all install-binaries install-libraries install-doc
427 @$(MKDIR) -p "$(BIN_INSTALL_DIR)"
428 @$(MKDIR) -p "$(LIB_INSTALL_DIR)"
429 $(COPY) tclConfig.sh $(LIB_INSTALL_DIR)/tclConfig.sh
430 @for i in dde1.1 reg1.0; \
432 if [ ! -d $(LIB_INSTALL_DIR)/$$i ] ; then \
433 echo "Making directory $(LIB_INSTALL_DIR)/$$i"; \
434 $(MKDIR) $(LIB_INSTALL_DIR)/$$i; \
438 @for i in $(TCL_DLL_FILE) $(TCLSH) $(PIPE_DLL_FILE); \
440 if [ -f $$i ]; then \
441 echo "Installing $$i"; \
442 $(COPY) $$i "$(BIN_INSTALL_DIR)"; \
445 @for i in $(TCL_LIB_FILE) $(TCL_STUB_LIB_FILE); \
447 if [ -f $$i ]; then \
448 echo "Installing $$i"; \
449 $(COPY) $$i "$(LIB_INSTALL_DIR)"; \
452 @if [ -f $(DDE_DLL_FILE) ]; then \
453 echo installing $(DDE_DLL_FILE); \
454 $(COPY) $(DDE_DLL_FILE) $(LIB_INSTALL_DIR)/dde1.1; \
455 $(COPY) $(ROOT_DIR)/library/dde1.1/pkgIndex.tcl $(LIB_INSTALL_DIR)/dde1.1; \
457 @if [ -f $(DDE_LIB_FILE) ]; then \
458 echo installing $(DDE_LIB_FILE); \
459 $(COPY) $(DDE_LIB_FILE) $(LIB_INSTALL_DIR)/dde1.1; \
461 @if [ -f $(REG_DLL_FILE) ]; then \
462 echo installing $(REG_DLL_FILE); \
463 $(COPY) $(REG_DLL_FILE) $(LIB_INSTALL_DIR)/reg1.0; \
464 $(COPY) $(ROOT_DIR)/library/reg1.0/pkgIndex.tcl $(LIB_INSTALL_DIR)/reg1.0; \
466 @if [ -f $(REG_LIB_FILE) ]; then \
467 echo installing $(REG_LIB_FILE); \
468 $(COPY) $(REG_LIB_FILE) $(LIB_INSTALL_DIR)/reg1.0; \
472 @for i in $(prefix)/lib $(INCLUDE_INSTALL_DIR) \
473 $(SCRIPT_INSTALL_DIR); \
475 if [ ! -d $$i ] ; then \
476 echo "Making directory $$i"; \
481 @for i in http1.0 http2.3 opt0.4 encoding msgcat1.0 tcltest1.0; \
483 if [ ! -d $(SCRIPT_INSTALL_DIR)/$$i ] ; then \
484 echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \
485 $(MKDIR) $(SCRIPT_INSTALL_DIR)/$$i; \
489 @echo "Installing header files";
490 @for i in "$(GENERIC_DIR)/tcl.h" "$(GENERIC_DIR)/tclDecls.h" ; \
492 $(COPY) "$$i" "$(INCLUDE_INSTALL_DIR)"; \
494 @echo "Installing library files to $(SCRIPT_INSTALL_DIR)";
495 @for i in $(ROOT_DIR)/library/*.tcl $(ROOT_DIR)/library/tclIndex; \
497 $(COPY) "$$i" "$(SCRIPT_INSTALL_DIR)"; \
499 @for i in http2.3 http1.0 opt0.4 msgcat1.0 tcltest1.0; \
501 echo "Installing library $$i directory"; \
502 for j in $(ROOT_DIR)/library/$$i/*.tcl; \
504 $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/$$i"; \
507 @echo "Installing encodings"
508 @for i in $(ROOT_DIR)/library/encoding/*.enc ; do \
509 $(COPY) "$$i" "$(SCRIPT_INSTALL_DIR)/encoding"; \
514 test: binaries $(TCLTEST)
515 TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
516 ./$(TCLTEST) "$(ROOT_DIR_NATIVE)/tests/all.tcl" $(TESTFLAGS) \
519 # Useful target to launch a built tcltest with the proper path,...
521 @TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
526 Makefile: $(SRC_DIR)/Makefile.in config.status
527 $(SHELL) config.status
529 config.status: $(WIN_DIR)/configure
530 $(SHELL) config.status --recheck
533 $(RM) *.hlp *.cnt *.GID *.rtf man2tcl.exe
536 $(RM) *.lib *.a *.exp *.dll *.$(RES) *.${OBJEXT} *~ \#* TAGS a.out
537 $(RM) $(TCLSH) $(TCLTEST) $(CAT32)
538 $(RM) *.pch *.ilk *.pdb
541 $(RM) Makefile config.status config.cache config.log tclConfig.sh \
545 # Regenerate the stubs files.
548 # FIXME: We can't depend on TCLSH here since it is not yet built!
550 $(GENERIC_DIR)/tclStubInit.c: $(GENERIC_DIR)/tcl.decls \
551 $(GENERIC_DIR)/tclInt.decls
552 @TCL_LIBRARY="$(ROOT_DIR_NATIVE)/library"; export TCL_LIBRARY; \
553 $(TCLSH) "$(ROOT_DIR_NATIVE)\tools\genStubs.tcl" \
554 "$(GENERIC_DIR_NATIVE)" \
555 "$(GENERIC_DIR_NATIVE)\tcl.decls" \
556 "$(GENERIC_DIR_NATIVE)\tclInt.decls"
559 @TCL_LIBRARY="$(ROOT_DIR_NATIVE)/library"; export TCL_LIBRARY; \
560 $(TCLSH) "$(ROOT_DIR_NATIVE)\tools\genStubs.tcl" \
561 "$(GENERIC_DIR_NATIVE)" \
562 "$(GENERIC_DIR_NATIVE)\tcl.decls" \
563 "$(GENERIC_DIR_NATIVE)\tclInt.decls"