# # Makefile for Borland C++ 5.5 (or C++ Builder 5), adapted from the makefile # for Visual C++ that came with tk 8.3.3 # # Some "not so obvious" details in this makefile are preceded by a comment # "maintenance hint", which tries to explain what's going on. Better to # leave those in place. # Helmut Giese, July 2002 # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # Copyright (c) 1995-1997 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Ajuba Solutions. # # RCS: @(#) $Id: makefile.bc,v 1.11 2002/07/16 05:01:23 davygrvy Exp $ # Does not depend on the presence of any environment variables in # order to compile tcl; all needed information is derived from # location of the compiler directories. # # Project directories # # ROOT = top of source tree # # TMPDIR = location where .obj files should be stored during build # # TOOLS32 = location of Borland development tools. # # TCLDIR = location of top of Tcl source hierarchy # ROOT = .. TCLDIR = ..\..\tcl8.4 INSTALLDIR = D:\tmp\tcl # If you have C++ Builder 5 or the free Borland C++ 5.5 compiler # adapt the following paths as appropriate for your system TOOLS32 = d:\cbld5 TOOLS32_rc = d:\cbld5 #TOOLS32 = c:\bc55 #TOOLS32_rc = c:\bc55 cc32 = "$(TOOLS32)\bin\bcc32.exe" link32 = "$(TOOLS32)\bin\ilink32.exe" lib32 = "$(TOOLS32)\bin\tlib.exe" rc32 = "$(TOOLS32_rc)\bin\brcc32.exe" include32 = -I"$(TOOLS32)\include;$(TOOLS32)\include\mfc" libpath32 = -L"$(TOOLS32)\lib" # Uncomment the following line to compile with thread support #THREADDEFINES = -DTCL_THREADS=1 # Allow definition of NDEBUG via command line # Set NODEBUG to 0 to compile with symbols !if !defined(NODEBUG) NODEBUG = 1 !endif # uncomment the following two lines to compile with TCL_MEM_DEBUG #DEBUGDEFINES =-DTCL_MEM_DEBUG ###################################################################### # Do not modify below this line ###################################################################### TCLNAMEPREFIX = tcl TKNAMEPREFIX = tk WISHNAMEPREFIX = wish VERSION = 84 DOTVERSION = 8.4 TCLSTUBPREFIX = $(TCLNAMEPREFIX)stub TKSTUBPREFIX = $(TKNAMEPREFIX)stub BINROOT = . !IF "$(NODEBUG)" == "1" TMPDIRNAME = Release DBGX = !ELSE TMPDIRNAME = Debug DBGX = #DBGX = d !ENDIF TMPDIR = $(BINROOT)\$(TMPDIRNAME) OUTDIRNAME = $(TMPDIRNAME) OUTDIR = $(TMPDIR) TCLLIB = $(TCLNAMEPREFIX)$(VERSION)$(DBGX).lib TCLPLUGINLIB = $(TCLNAMEPREFIX)$(VERSION)p.lib TCLSTUBLIB = $(TCLSTUBPREFIX)$(VERSION)$(DBGX).lib TKDLLNAME = $(TKNAMEPREFIX)$(VERSION)$(DBGX).dll TKDLL = $(OUTDIR)\$(TKDLLNAME) TKLIB = $(OUTDIR)\$(TKNAMEPREFIX)$(VERSION)$(DBGX).lib TKSTUBLIBNAME = $(TKSTUBPREFIX)$(VERSION)$(DBGX).lib TKSTUBLIB = $(OUTDIR)\$(TKSTUBLIBNAME) TKPLUGINDLLNAME = $(TKNAMEPREFIX)$(VERSION)p$(DBG).dll TKPLUGINDLL = $(OUTDIR)\$(TKPLUGINDLLNAME) TKPLUGINLIB = $(OUTDIR)\$(TKNAMEPREFIX)$(VERSION)p$(DBGX).lib WISH = $(OUTDIR)\$(WISHNAMEPREFIX)$(VERSION)$(DBGX).exe WISHC = $(OUTDIR)\$(WISHNAMEPREFIX)c$(VERSION)$(DBGX).exe WISHP = $(OUTDIR)\$(WISHNAMEPREFIX)p$(VERSION)$(DBGX).exe TKTEST = $(OUTDIR)\$(TKNAMEPREFIX)test.exe CAT32 = $(TMPDIR)\cat32.exe BIN_INSTALL_DIR = $(INSTALLDIR)\bin INCLUDE_INSTALL_DIR = $(INSTALLDIR)\include LIB_INSTALL_DIR = $(INSTALLDIR)\lib SCRIPT_INSTALL_DIR = $(LIB_INSTALL_DIR)\tk$(DOTVERSION) WISHOBJS = \ $(TMPDIR)\winMain.obj TKTESTOBJS = \ $(TMPDIR)\tkTest.obj \ $(TMPDIR)\tkSquare.obj \ $(TMPDIR)\testMain.obj \ $(TMPDIR)\tkWinTest.obj \ $(TCLLIBDIR)\tclThreadTest.obj XLIBOBJS = \ $(TMPDIR)\xcolors.obj \ $(TMPDIR)\xdraw.obj \ $(TMPDIR)\xgc.obj \ $(TMPDIR)\ximage.obj \ $(TMPDIR)\xutil.obj TKOBJS = \ $(TMPDIR)\tkConsole.obj \ $(TMPDIR)\tkUnixMenubu.obj \ $(TMPDIR)\tkUnixScale.obj \ $(XLIBOBJS) \ $(TMPDIR)\tkWin3d.obj \ $(TMPDIR)\tkWin32Dll.obj \ $(TMPDIR)\tkWinButton.obj \ $(TMPDIR)\tkWinClipboard.obj \ $(TMPDIR)\tkWinColor.obj \ $(TMPDIR)\tkWinConfig.obj \ $(TMPDIR)\tkWinCursor.obj \ $(TMPDIR)\tkWinDialog.obj \ $(TMPDIR)\tkWinDraw.obj \ $(TMPDIR)\tkWinEmbed.obj \ $(TMPDIR)\tkWinFont.obj \ $(TMPDIR)\tkWinImage.obj \ $(TMPDIR)\tkWinInit.obj \ $(TMPDIR)\tkWinKey.obj \ $(TMPDIR)\tkWinMenu.obj \ $(TMPDIR)\tkWinPixmap.obj \ $(TMPDIR)\tkWinPointer.obj \ $(TMPDIR)\tkWinRegion.obj \ $(TMPDIR)\tkWinScrlbr.obj \ $(TMPDIR)\tkWinSend.obj \ $(TMPDIR)\tkWinWindow.obj \ $(TMPDIR)\tkWinWm.obj \ $(TMPDIR)\tkWinX.obj \ $(TMPDIR)\stubs.obj \ $(TMPDIR)\tk3d.obj \ $(TMPDIR)\tkArgv.obj \ $(TMPDIR)\tkAtom.obj \ $(TMPDIR)\tkBind.obj \ $(TMPDIR)\tkBitmap.obj \ $(TMPDIR)\tkButton.obj \ $(TMPDIR)\tkCanvArc.obj \ $(TMPDIR)\tkCanvBmap.obj \ $(TMPDIR)\tkCanvImg.obj \ $(TMPDIR)\tkCanvLine.obj \ $(TMPDIR)\tkCanvPoly.obj \ $(TMPDIR)\tkCanvPs.obj \ $(TMPDIR)\tkCanvText.obj \ $(TMPDIR)\tkCanvUtil.obj \ $(TMPDIR)\tkCanvWind.obj \ $(TMPDIR)\tkCanvas.obj \ $(TMPDIR)\tkClipboard.obj \ $(TMPDIR)\tkCmds.obj \ $(TMPDIR)\tkColor.obj \ $(TMPDIR)\tkConfig.obj \ $(TMPDIR)\tkCursor.obj \ $(TMPDIR)\tkEntry.obj \ $(TMPDIR)\tkError.obj \ $(TMPDIR)\tkEvent.obj \ $(TMPDIR)\tkFileFilter.obj \ $(TMPDIR)\tkFocus.obj \ $(TMPDIR)\tkFont.obj \ $(TMPDIR)\tkFrame.obj \ $(TMPDIR)\tkGC.obj \ $(TMPDIR)\tkGeometry.obj \ $(TMPDIR)\tkGet.obj \ $(TMPDIR)\tkGrab.obj \ $(TMPDIR)\tkGrid.obj \ $(TMPDIR)\tkImage.obj \ $(TMPDIR)\tkImgBmap.obj \ $(TMPDIR)\tkImgGIF.obj \ $(TMPDIR)\tkImgPPM.obj \ $(TMPDIR)\tkImgPhoto.obj \ $(TMPDIR)\tkImgUtil.obj \ $(TMPDIR)\tkListbox.obj \ $(TMPDIR)\tkMacWinMenu.obj \ $(TMPDIR)\tkMain.obj \ $(TMPDIR)\tkMenu.obj \ $(TMPDIR)\tkMenubutton.obj \ $(TMPDIR)\tkMenuDraw.obj \ $(TMPDIR)\tkMessage.obj \ $(TMP_DIR)\tkPanedWindow.obj \ $(TMPDIR)\tkObj.obj \ $(TMPDIR)\tkOldConfig.obj \ $(TMPDIR)\tkOption.obj \ $(TMPDIR)\tkPack.obj \ $(TMPDIR)\tkPlace.obj \ $(TMPDIR)\tkPointer.obj \ $(TMPDIR)\tkRectOval.obj \ $(TMPDIR)\tkScale.obj \ $(TMPDIR)\tkScrollbar.obj \ $(TMPDIR)\tkSelect.obj \ $(TMPDIR)\tkText.obj \ $(TMPDIR)\tkTextBTree.obj \ $(TMPDIR)\tkTextDisp.obj \ $(TMPDIR)\tkTextImage.obj \ $(TMPDIR)\tkTextIndex.obj \ $(TMPDIR)\tkTextMark.obj \ $(TMPDIR)\tkTextTag.obj \ $(TMPDIR)\tkTextWind.obj \ $(TMPDIR)\tkTrig.obj \ $(TMPDIR)\tkUtil.obj \ $(TMPDIR)\tkVisual.obj \ $(TMPDIR)\tkStubInit.obj \ $(TMPDIR)\tkStubLib.obj \ $(TMPDIR)\tkWindow.obj # Maintenance hint: Please have multiple members of TKSTUBOBJS be separated # by exactly one ' ' (see below the rule for making TKSTUBLIB) TKSTUBOBJS = $(TMPDIR)\tkStubLib.obj $(TMPDIR)\tkStubImg.obj WINDIR = $(ROOT)\win GENERICDIR = $(ROOT)\generic XLIBDIR = $(ROOT)\xlib BITMAPDIR = $(ROOT)\bitmaps TCLLIBDIR = $(TCLDIR)\win\$(OUTDIRNAME) RCDIR = $(WINDIR)\rc TK_INCLUDES = -I$(WINDIR) -I$(GENERICDIR) -I$(BITMAPDIR) -I$(XLIBDIR) \ -I$(TCLDIR)\generic TK_DEFINES = -D__WIN32__ $(DEBUGDEFINES) $(THREADDEFINES) ###################################################################### # Compile flags ###################################################################### !IF "$(NODEBUG)" == "1" # these macros cause maximum optimization and no symbols cdebug = -v- -vi- -O2 -D_DEBUG !ELSE # these macros enable debugging cdebug = -k -Od -r- -v -vi- -y !ENDIF SYSDEFINES = _MT;NO_STRICT;_NO_VCL # declarations common to all compiler options cbase = -3 -a4 -c -g0 -tWM -Ve -Vx -X- WARNINGS = -w-rch -w-pch -w-par -w-dup -w-pro -w-dpu ccons = -tWC CFLAGS = $(cdebug) $(cbase) $(WARNINGS) -D$(SYSDEFINES) CON_CFLAGS = $(CFLAGS) $(TK_DEFINES) $(include32) $(ccons) WISH_CFLAGS = $(CFLAGS) $(include32) $(TK_INCLUDES) $(TK_DEFINES) TK_CFLAGS = $(CFLAGS) $(include32) $(TK_INCLUDES) $(TK_DEFINES) \ -DUSE_TCL_STUBS ###################################################################### # Link flags ###################################################################### !IF "$(NODEBUG)" == "1" ldebug = !ELSE ldebug = -v !ENDIF # declarations common to all linker options LNFLAGS = -D"" -Gn -I$(TMPDIR) -x $(ldebug) $(libpath32) # -Gi: create lib file (is -Gl in doc) # -aa: Windows app, -ap: Windows console app LNFLAGS_DLL = -ap -Gi -Tpd LNFLAGS_CONS = -ap -Tpe LNFLAGS_GUI = -aa -Tpe LNLIBS = import32 cw32mt ###################################################################### # Project specific targets ###################################################################### all: setup $(WISH) $(CAT32) install: install-binaries install-libraries plugin: setup $(TKPLUGINDLL) $(WISHP) tktest: setup $(TKTEST) $(CAT32) # Maintenance hint: We want to set environment variables before calling tktest. # If we do this in the form of normal commands, they will not persist up to # the call of tktest. Therfore we put all commands wanted into a batch file. # The normal way of using 'echo >x.bat' and 'echo >>x.bat' does not work here # because we cannot write '... > tktest.txt' this way. Hence this advanced # form of loop hopping: # - Have MAKE produce a temporary file with the content we want. # - Use it as input to the COPY command to produce a batch file. # - Run the batch file and be happy. # test: setup $(TKTEST) $(TKLIB) $(CAT32) copy &&! set TCL_LIBRARY=$(TCLDIR)/library set PATH=$(TCLDIR)\win\$(TMPDIRNAME);$(PATH) $(TKTEST) $(ROOT)/tests/all.tcl > tktest.txt ! _test.bat _test.bat # del _test.bat runtest: setup $(TKTEST) $(TKLIB) $(CAT32) echo set TCL_LIBRARY=$(TCLDIR)/library > _test2.bat echo set PATH=$(TCLDIR)\win\$(TMPDIRNAME);$(PATH) >> _test2.bat echo $(TKTEST) >> _test2.bat _test2.bat # del _test2.bat console-wish : all $(WISHC) stubs: $(TCLDIR)\win\$(TMPDIRNAME)\tclsh$(VERSION)$(DBGX) \ $(TCLDIR)\tools\genStubs.tcl $(GENERICDIR) \ $(GENERICDIR)\tk.decls $(GENERICDIR)\tkInt.decls setup: @mkd $(TMPDIR) @mkd $(OUTDIR) install-binaries: @mkd "$(BIN_INSTALL_DIR)" copy $(TKDLL) "$(BIN_INSTALL_DIR)" copy $(WISH) "$(BIN_INSTALL_DIR)" @mkd "$(LIB_INSTALL_DIR)" copy $(TKLIB) "$(LIB_INSTALL_DIR)" install-libraries: @mkd "$(INCLUDE_INSTALL_DIR)" @mkd "$(INCLUDE_INSTALL_DIR)\X11" copy "$(GENERICDIR)\tk.h" "$(INCLUDE_INSTALL_DIR)" copy "$(GENERICDIR)\tkDecls.h" "$(INCLUDE_INSTALL_DIR)" copy "$(GENERICDIR)\tkPlatDecls.h" "$(INCLUDE_INSTALL_DIR)" copy "$(GENERICDIR)\tkIntXlibDecls.h" "$(INCLUDE_INSTALL_DIR)" xcopy "$(XLIBDIR)\X11\*.h" "$(INCLUDE_INSTALL_DIR)\X11" @mkd "$(SCRIPT_INSTALL_DIR)" @mkd "$(SCRIPT_INSTALL_DIR)\images" @mkd "$(SCRIPT_INSTALL_DIR)\demos" @mkd "$(SCRIPT_INSTALL_DIR)\demos\images" @mkd "$(SCRIPT_INSTALL_DIR)\msgs" xcopy "$(ROOT)\library" "$(SCRIPT_INSTALL_DIR)" xcopy "$(ROOT)\library\images" "$(SCRIPT_INSTALL_DIR)\images" xcopy "$(ROOT)\library\demos" "$(SCRIPT_INSTALL_DIR)\demos" xcopy "$(ROOT)\library\demos\images" "$(SCRIPT_INSTALL_DIR)\demos\images" xcopy "$(ROOT)\library\msgs" "$(SCRIPT_INSTALL_DIR)\msgs" $(TKLIB): $(TKDLL) $(TKSTUBLIB) # Maintenance hint: The macro puts a '+-' before the first member of # TKSTUBOBJS, than replaces any ' ' with ' +-' - together putting '+-' in # front of any member of TKSTUBOBJS (provided, they are separated in their # defintion by just one space). # # The first time you *make* this target, you will get a warning # tkStubLib not found in library # This is (probably) because of the '-' option, telling TLIB to remove # 'tkStubLib' when it does not yet exist. Forcing a re-make when it already # exists avoids this warning. # $(TKSTUBLIB): $(TKSTUBOBJS) $(lib32) $@ +-$(TKSTUBOBJS: = +-) # $(lib32) $@ @&&! #+-$(TKSTUBOBJS: = &^ #+-) #! $(TKDLL): $(TKOBJS) $(TMPDIR)\tk.res $(link32) $(ldebug) $(LNFLAGS) $(LNFLAGS_DLL) $(TOOLS32)\lib\c0d32 @&&! $(TKOBJS), $@, -x, $(LNLIBS) $(TCLLIBDIR)\$(TCLSTUBLIB),, $(TMPDIR)\tk.res ! $(TKPLUGINLIB): $(TKPLUGINDLL) #$(TKPLUGINDLL): $(TKOBJS) $(TMPDIR)\tk.res # $(link32) $(ldebug) $(dlllflags) \ # -out:$@ $(TMPDIR)\tk.res $(TCLLIBDIR)\$(TCLPLUGINLIB) \ # $(guilibsdll) @<< # $(TKOBJS) #<< $(WISH): $(WISHOBJS) $(TKLIB) $(TMPDIR)\wish.res $(link32) $(ldebug) -S:2400000 $(LNFLAGS) $(LNFLAGS_GUI) $(TOOLS32)\lib\c0x32 @&&! $(WISHOBJS), $@, -x, $(LNLIBS) $(TCLLIBDIR)\$(TCLLIB) $(TKLIB),, $(TMPDIR)\wish.res ! $(WISHC): $(WISHOBJS) $(TKLIB) $(TMPDIR)\wish.res $(link32) $(ldebug) -S:2400000 $(LNFLAGS) $(LNFLAGS_CONS) $(TOOLS32)\lib\c0x32 @&&! $(WISHOBJS), $@, -x, $(LNLIBS) $(TCLLIBDIR)\$(TCLLIB) $(TKLIB),, $(TMPDIR)\wish.res ! $(WISHP): $(WISHOBJS) $(TKPLUGINLIB) $(TMPDIR)\wish.res $(link32) $(ldebug) $(guilflags) $(TMPDIR)\wish.res -out:$@ \ $(guilibsdll) $(TCLLIBDIR)\$(TCLPLUGINLIB) \ $(TKPLUGINLIB) $(WISHOBJS) $(TKTEST): $(TKTESTOBJS) $(TKLIB) $(TMPDIR)\wish.res $(link32) $(ldebug) -S:2400000 $(LNFLAGS) $(LNFLAGS_GUI) $(TOOLS32)\lib\c0x32 @&&! $(TKTESTOBJS), $@, -x, $(LNLIBS) $(TCLLIBDIR)\$(TCLLIB) $(TKLIB),, $(TMPDIR)\wish.res ! # $(link32) $(ldebug) $(guilflags) $(TMPDIR)\wish.res -out:$@ \ # $(guilibsdll) $(TCLLIBDIR)\$(TCLLIB) $(TKLIB) $(TKTESTOBJS) #$(CAT32): $(TCLDIR)\win\cat.c # $(cc32) $(CON_CFLAGS) -o$(TMPDIR)\cat.obj $? # $(link32) $(conlflags) -out:$@ -stack:16384 $(TMPDIR)\cat.obj $(conlibs) $(CAT32): $(TCLDIR)\win\cat.c $(cc32) $(CONS_CFLAGS) -o$(TMPDIR)\cat.obj $? $(link32) $(ldebug) $(LNFLAGS) $(LNFLAGS_CONS) $(TOOLS32)\lib\c0x32 \ $(TMPDIR)\cat.obj, $@, -x, $(LNLIBS),, # # Regenerate the stubs files. # genstubs: tclsh$(VERSION) $(TCLDIR)\tools\genStubs.tcl $(GENERICDIR) \ $(GENERICDIR)\tk.decls $(GENERICDIR)\tkInt.decls # # Special case object file targets # $(TMPDIR)\testMain.obj: $(WINDIR)\winMain.c $(cc32) $(WISH_CFLAGS) -DTK_TEST -o$@ $? $(TMPDIR)\tkTest.obj: $(GENERICDIR)\tkTest.c $(cc32) $(WISH_CFLAGS) -o$@ $? $(TMPDIR)\tkWinTest.obj: $(WINDIR)\tkWinTest.c $(cc32) $(WISH_CFLAGS) -o$@ $? $(TMPDIR)\tkSquare.obj: $(GENERICDIR)\tkSquare.c $(cc32) $(WISH_CFLAGS) -o$@ $? $(TMPDIR)\winMain.obj: $(WINDIR)\winMain.c $(cc32) $(WISH_CFLAGS) -o$@ $? $(TMPDIR)\tkStubLib.obj : $(GENERICDIR)\tkStubLib.c $(cc32) $(TK_CFLAGS) -DSTATIC_BUILD -o$@ $? # # Implicit rules # {$(XLIBDIR)}.c{$(TMPDIR)}.obj: $(cc32) -DDLL_BUILD -DBUILD_tk $(TK_CFLAGS) -o$@ $< {$(GENERICDIR)}.c{$(TMPDIR)}.obj: $(cc32) -DDLL_BUILD -DBUILD_tk $(TK_CFLAGS) -o$@ $< {$(WINDIR)}.c{$(TMPDIR)}.obj: $(cc32) -DDLL_BUILD -DBUILD_tk $(TK_CFLAGS) -o$@ $< {$(ROOT)\unix}.c{$(TMPDIR)}.obj: $(cc32) -DDLL_BUILD -DBUILD_tk $(TK_CFLAGS) -o$@ $< {$(RCDIR)}.rc{$(TMPDIR)}.res: $(rc32) -I"$(GENERICDIR)" -I"$(TOOLS32)\include" -I"$(TCLDIR)\generic" \ -D$(USERDEFINES);$(SYSDEFINES) -fo$@ $< clean: -@del $(OUTDIR)\*.exp -@del $(OUTDIR)\*.lib -@del $(OUTDIR)\*.dll -@del $(OUTDIR)\*.exe -@del $(OUTDIR)\*.pdb -@del $(TMPDIR)\*.pch -@del $(TMPDIR)\*.obj -@del $(TMPDIR)\*.res -@del $(TMPDIR)\*.exe -@rmd $(OUTDIR) -@rmd $(TMPDIR) # dependencies $(TMPDIR)\tk.res: \ $(RCDIR)\buttons.bmp \ $(RCDIR)\cursor*.cur \ $(RCDIR)\tk.ico $(GENERICDIR)/default.h: $(WINDIR)/tkWinDefault.h $(GENERICDIR)/tkButton.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkCanvas.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkEntry.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkFrame.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkListbox.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkMenu.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkMenubutton.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkMessage.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkScale.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkScrollbar.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkText.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkTextIndex.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkTextTag.c: $(GENERICDIR)/default.h $(GENERICDIR)/tkText.c: $(GENERICDIR)/tkText.h $(GENERICDIR)/tkTextBTree.c: $(GENERICDIR)/tkText.h $(GENERICDIR)/tkTextDisp.c: $(GENERICDIR)/tkText.h $(GENERICDIR)/tkTextDisp.c: $(GENERICDIR)/tkText.h $(GENERICDIR)/tkTextImage.c: $(GENERICDIR)/tkText.h $(GENERICDIR)/tkTextIndex.c: $(GENERICDIR)/tkText.h $(GENERICDIR)/tkTextMark.c: $(GENERICDIR)/tkText.h $(GENERICDIR)/tkTextTag.c: $(GENERICDIR)/tkText.h $(GENERICDIR)/tkTextWind.c: $(GENERICDIR)/tkText.h $(GENERICDIR)/tkMacWinMenu.c: $(GENERICDIR)/tkMenu.h $(GENERICDIR)/tkMenu.c: $(GENERICDIR)/tkMenu.h $(GENERICDIR)/tkMenuDraw.c: $(GENERICDIR)/tkMenu.h $(WINDIR)/tkWinMenu.c: $(GENERICDIR)/tkMenu.h