Attachment "makefile.vc" to
ticket [bb110c70]
added by
msoyka
2024-11-02 14:01:03.
Also attachment "makefile.vc" to
ticket [bb110c70]
added by
msoyka
2024-11-02 13:58:11.
#------------------------------------------------------------- -*- makefile -*-
# makefile.vc --
#
# Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# Copyright (c) 1995-1996 Sun Microsystems, Inc.
# Copyright (c) 1998-2000 Ajuba Solutions.
# Copyright (c) 2001-2005 ActiveState Corporation.
# Copyright (c) 2001-2004 David Gravereaux.
# Copyright (c) 2003-2008 Pat Thoyts.
# Copyright (c) 2017 Ashok P. Nadkarni
#------------------------------------------------------------------------------
# General usage:
# nmake [-nologo] -f makefile.vc [TARGET|MACRODEF [TARGET|MACRODEF] [...]]
#
# For MACRODEF, see TIP 477 (https://core.tcl-lang.org/tips/doc/main/tip/477.md)
# or examine Sections 7-9 in rules.vc. This makefile has the following
# values for the OPTS macro in addition to the ones described there.
# noembed = Embeds Tcl scripts into the wish executable. Currently only
# applicable for static builds. Non-static builds currently
# never embed.
# square = Include the demo square widget.
#
# Possible values for TARGET are:
# release -- Builds the core, the shell and the dlls. (default)
# dlls -- Just builds the windows extensions.
# shell -- Just builds the shell and the core.
# core -- Only builds the core [tkXX.(dll|lib)].
# all -- Builds everything.
# test -- Builds and runs the test suite.
# tktest -- Just builds the test shell.
# install -- Installs the built binaries and libraries to $(INSTALLDIR)
# as the root of the install tree.
# cwish -- Builds a console version of wish.
# tidy/clean/hose -- varying levels of cleaning.
# genstubs -- Rebuilds the Stubs table and support files (dev only).
# depend -- Generates an accurate set of source dependancies for this
# makefile. Helpful to avoid problems when the sources are
# refreshed and you rebuild, but can "overbuild" when common
# headers like tkInt.h just get small changes.
# htmlhelp -- Builds a Windows .chm help file for Tcl and Tk from the
# troff manual pages found in $(ROOT)\doc. You need to
# have installed the HTML Help Compiler package from Microsoft
# to produce the .chm file.
#
# The steps to setup a Visual C++ environment depend on which
# version of Visual Studio and/or the Windows SDK you are building
# against and are not described here. The simplest method is generally
# to start a command shell using one of the short cuts installed by
# Visual Studio/Windows SDK for the appropriate target architecture.
#
# NOTE: For older (Visual C++ 6 or the 2003 SDK), to use the Platform
# SDK (not expressly needed), run setenv.bat after vcvars32.bat
# according to the instructions for it. This can also turn on the
# 64-bit compiler, if your SDK has it.
#
# Examples:
# Assuming Tcl sources lie in ../../tcl
# c:\tcl_src\win\>nmake -f makefile.vc release
# If Tcl sources are not in ../../tcl, use the TCLDIR macro to specify dir
# c:\tcl_src\win\>nmake -f makefile.vc release TCLDIR=c:\src\tcl
# Run the test suite
# c:\tcl_src\win\>nmake -f makefile.vc test
# Install Tk in location specified by INSTALLDIR macro
# c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl
# Build release with PDB files
# c:\tcl_src\win\>nmake -f makefile.vc release OPTS=pdbs
# Build debug version
# c:\tcl_src\win\>nmake -f makefile.vc release OPTS=symbols
#
###############################################################################
# The PROJECT macro is used by rules.vc for generating appropriate
# macros and rules.
PROJECT = tk
# Default target to build if no target is specified. If unspecified, the
# rules.vc file will set up "all" as the target.
DEFAULT_BUILD_TARGET = release
# We have a custom resource file
RCFILE = tk.rc
# The rules.vc file does much of the hard work in terms of defining
# the build configuration, macros, output directories etc.
!include "rules-ext.vc"
!if ($(TCL_MAJOR_VERSION) > 8) || ($(TCL_MAJOR_VERSION) == 8 && $(TCL_MINOR_VERSION) > 6)
USING_PRE87_TCL = 0
!else
USING_PRE87_TCL = 1
!endif
# TCLINSTALL is set to 1 by rules.vc to indicate we are building against
# an installed Tcl and 0 if building against Tcl source. Tk needs the latter.
!if $(TCLINSTALL)
!message *** Warning: Tk requires the source distribution of Tcl to build from,
!message *** at this time, sorry. Please set the TCLDIR macro to point to the
!message *** Tcl sources.
!endif
# Extra makefile options processing for non-standard OPTS values ...
!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]
TTK_SQUARE_WIDGET = 0
TK_EMBED_SCRIPTS = 1
!else
!if [nmakehlp -f "$(OPTS)" "square"]
!message *** Include ttk square demo widget
TTK_SQUARE_WIDGET = 1
!else
TTK_SQUARE_WIDGET = 0
!endif
!if [nmakehlp -f $(OPTS) "noembed"]
!message *** Option noembed specified. Tk script library will not be appended to the binary.
TK_EMBED_SCRIPTS = 0
!else
!message *** Tk script library will be appended to the binary.
TK_EMBED_SCRIPTS = 1
!endif
!endif
!if $(USING_PRE87_TCL)
TK_EMBED_SCRIPTS = 0
!endif
TK_NO_DEPRECATED = 0
!if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"]
!if [nmakehlp -f $(CHECKS) "nodep"]
TK_NO_DEPRECATED = 1
!endif
!endif
WISHC = "$(OUT_DIR)\$(WISHNAMEPREFIX)c$(VERSION)$(SUFX).exe"
TKTEST = "$(OUT_DIR)\$(PROJECT)test$(VERSION)$(SUFX).exe"
CAT32 = "$(OUT_DIR)\cat32.exe"
WISHOBJS = \
$(TMP_DIR)\winMain.obj \
!if $(STATIC_BUILD) && !$(STATIC_BUILD)
$(TCLDDELIB) \
$(TCLREGLIB) \
!endif
$(TMP_DIR)\wish.res
TKTESTOBJS = \
$(TMP_DIR)\testMain.obj \
$(TMP_DIR)\tkSquare.obj \
$(TMP_DIR)\tkTest.obj \
$(TMP_DIR)\tkWinTest.obj \
$(TMP_DIR)\tktest.res
XLIBOBJS = \
$(TMP_DIR)\xcolors.obj \
$(TMP_DIR)\xdraw.obj \
$(TMP_DIR)\xgc.obj \
$(TMP_DIR)\ximage.obj \
$(TMP_DIR)\xutil.obj
TKOBJS = \
$(TMP_DIR)\tkConsole.obj \
$(TMP_DIR)\tkUnixMenubu.obj \
$(TMP_DIR)\tkUnixScale.obj \
$(XLIBOBJS) \
$(TMP_DIR)\tkWin3d.obj \
$(TMP_DIR)\tkWin32Dll.obj \
$(TMP_DIR)\tkWinButton.obj \
$(TMP_DIR)\tkWinClipboard.obj \
$(TMP_DIR)\tkWinColor.obj \
$(TMP_DIR)\tkWinConfig.obj \
$(TMP_DIR)\tkWinCursor.obj \
$(TMP_DIR)\tkWinDialog.obj \
$(TMP_DIR)\tkWinDraw.obj \
$(TMP_DIR)\tkWinEmbed.obj \
$(TMP_DIR)\tkWinFont.obj \
$(TMP_DIR)\tkWinGDI.obj \
$(TMP_DIR)\tkWinIco.obj \
$(TMP_DIR)\tkWinImage.obj \
$(TMP_DIR)\tkWinInit.obj \
$(TMP_DIR)\tkWinKey.obj \
$(TMP_DIR)\tkWinMenu.obj \
$(TMP_DIR)\tkWinPixmap.obj \
$(TMP_DIR)\tkWinPointer.obj \
$(TMP_DIR)\tkWinRegion.obj \
$(TMP_DIR)\tkWinScrlbr.obj \
$(TMP_DIR)\tkWinSend.obj \
$(TMP_DIR)\tkWinSendCom.obj \
$(TMP_DIR)\tkWinSysTray.obj \
$(TMP_DIR)\tkWinWindow.obj \
$(TMP_DIR)\tkWinWm.obj \
$(TMP_DIR)\tkWinX.obj \
$(TMP_DIR)\stubs.obj \
$(TMP_DIR)\tk3d.obj \
$(TMP_DIR)\tkArgv.obj \
$(TMP_DIR)\tkAtom.obj \
$(TMP_DIR)\tkBind.obj \
$(TMP_DIR)\tkBitmap.obj \
$(TMP_DIR)\tkBusy.obj \
$(TMP_DIR)\tkButton.obj \
$(TMP_DIR)\tkCanvArc.obj \
$(TMP_DIR)\tkCanvBmap.obj \
$(TMP_DIR)\tkCanvImg.obj \
$(TMP_DIR)\tkCanvLine.obj \
$(TMP_DIR)\tkCanvPoly.obj \
$(TMP_DIR)\tkCanvPs.obj \
$(TMP_DIR)\tkCanvText.obj \
$(TMP_DIR)\tkCanvUtil.obj \
$(TMP_DIR)\tkCanvWind.obj \
$(TMP_DIR)\tkCanvas.obj \
$(TMP_DIR)\tkClipboard.obj \
$(TMP_DIR)\tkCmds.obj \
$(TMP_DIR)\tkColor.obj \
$(TMP_DIR)\tkConfig.obj \
$(TMP_DIR)\tkCursor.obj \
$(TMP_DIR)\tkEntry.obj \
$(TMP_DIR)\tkError.obj \
$(TMP_DIR)\tkEvent.obj \
$(TMP_DIR)\tkFileFilter.obj \
$(TMP_DIR)\tkFocus.obj \
$(TMP_DIR)\tkFont.obj \
$(TMP_DIR)\tkFrame.obj \
$(TMP_DIR)\tkGC.obj \
$(TMP_DIR)\tkGeometry.obj \
$(TMP_DIR)\tkGet.obj \
$(TMP_DIR)\tkGrab.obj \
$(TMP_DIR)\tkGrid.obj \
$(TMP_DIR)\tkIcu.obj \
$(TMP_DIR)\tkImage.obj \
$(TMP_DIR)\tkImgBmap.obj \
$(TMP_DIR)\tkImgListFormat.obj \
$(TMP_DIR)\tkImgGIF.obj \
$(TMP_DIR)\tkImgPNG.obj \
$(TMP_DIR)\tkImgPPM.obj \
$(TMP_DIR)\tkImgSVGnano.obj \
$(TMP_DIR)\tkImgPhoto.obj \
$(TMP_DIR)\tkImgPhInstance.obj \
$(TMP_DIR)\tkImgUtil.obj \
$(TMP_DIR)\tkListbox.obj \
$(TMP_DIR)\tkMacWinMenu.obj \
$(TMP_DIR)\tkMain.obj \
$(TMP_DIR)\tkMain2.obj \
$(TMP_DIR)\tkMenu.obj \
$(TMP_DIR)\tkMenubutton.obj \
$(TMP_DIR)\tkMenuDraw.obj \
$(TMP_DIR)\tkMessage.obj \
$(TMP_DIR)\tkPanedWindow.obj \
$(TMP_DIR)\tkObj.obj \
$(TMP_DIR)\tkOldConfig.obj \
$(TMP_DIR)\tkOption.obj \
$(TMP_DIR)\tkPack.obj \
$(TMP_DIR)\tkPkgConfig.obj \
$(TMP_DIR)\tkPlace.obj \
$(TMP_DIR)\tkPointer.obj \
$(TMP_DIR)\tkRectOval.obj \
$(TMP_DIR)\tkScale.obj \
$(TMP_DIR)\tkScrollbar.obj \
$(TMP_DIR)\tkSelect.obj \
$(TMP_DIR)\tkStyle.obj \
$(TMP_DIR)\tkText.obj \
$(TMP_DIR)\tkTextBTree.obj \
$(TMP_DIR)\tkTextDisp.obj \
$(TMP_DIR)\tkTextImage.obj \
$(TMP_DIR)\tkTextIndex.obj \
$(TMP_DIR)\tkTextMark.obj \
$(TMP_DIR)\tkTextTag.obj \
$(TMP_DIR)\tkTextWind.obj \
$(TMP_DIR)\tkTrig.obj \
$(TMP_DIR)\tkUndo.obj \
$(TMP_DIR)\tkUtil.obj \
$(TMP_DIR)\tkVisual.obj \
$(TMP_DIR)\tkStubInit.obj \
$(TMP_DIR)\tkWindow.obj \
$(TTK_OBJS) \
!if !$(STATIC_BUILD)
$(TMP_DIR)\tk.res
!endif
TTK_OBJS = \
$(TMP_DIR)\ttkWinMonitor.obj \
$(TMP_DIR)\ttkWinTheme.obj \
$(TMP_DIR)\ttkWinXPTheme.obj \
$(TMP_DIR)\ttkBlink.obj \
$(TMP_DIR)\ttkButton.obj \
$(TMP_DIR)\ttkCache.obj \
$(TMP_DIR)\ttkClamTheme.obj \
$(TMP_DIR)\ttkClassicTheme.obj \
$(TMP_DIR)\ttkDefaultTheme.obj \
$(TMP_DIR)\ttkElements.obj \
$(TMP_DIR)\ttkEntry.obj \
$(TMP_DIR)\ttkFrame.obj \
$(TMP_DIR)\ttkImage.obj \
$(TMP_DIR)\ttkInit.obj \
$(TMP_DIR)\ttkLabel.obj \
$(TMP_DIR)\ttkLayout.obj \
$(TMP_DIR)\ttkManager.obj \
$(TMP_DIR)\ttkNotebook.obj \
$(TMP_DIR)\ttkPanedwindow.obj \
$(TMP_DIR)\ttkProgress.obj \
$(TMP_DIR)\ttkScale.obj \
$(TMP_DIR)\ttkScrollbar.obj \
$(TMP_DIR)\ttkScroll.obj \
$(TMP_DIR)\ttkSeparator.obj \
$(TMP_DIR)\ttkSquare.obj \
$(TMP_DIR)\ttkState.obj \
$(TMP_DIR)\ttkTagSet.obj \
$(TMP_DIR)\ttkTheme.obj \
$(TMP_DIR)\ttkTrace.obj \
$(TMP_DIR)\ttkTrack.obj \
$(TMP_DIR)\ttkTreeview.obj \
$(TMP_DIR)\ttkWidget.obj \
$(TMP_DIR)\ttkStubInit.obj
TKSTUBOBJS = \
$(TMP_DIR)\tkStubLib.obj \
$(TMP_DIR)\ttkStubLib.obj
### The following paths CANNOT have spaces in them as they appear on
### the left side of implicit rules.
XLIBDIR = $(ROOT)\xlib
TTKDIR = $(ROOT)\generic\ttk
BITMAPDIR = $(ROOT)\bitmaps
# Directories where to build TIP430 ZIP files
# One for Tk - always built, contains Tk scripts
# One for Wish - for static builds, contains Tcl+Tk scripts
LIBTKVFS = $(OUT_DIR)\libtk.vfs
WISHSCRIPTZIP = $(OUT_DIR)\wish.zip
# Additional include and C macro definitions for the implicit rules
# defined in rules.vc
PRJ_INCLUDES = -I"$(BITMAPDIR)" -I"$(XLIBDIR)"
CONFIG_DEFS =/DHAVE_SYS_TYPES_H=1 /DHAVE_SYS_STAT_H=1 \
/DHAVE_STRING_H=1 /DHAVE_MEMORY_H=1 \
/DHAVE_STRINGS_H=1 /DTCL_UTF_MAX=4 \
!if $(TTK_SQUARE_WIDGET)
/DTTK_SQUARE_WIDGET=1 \
!endif
!if $(TK_NO_DEPRECATED)
/DTK_NO_DEPRECATED=1
!endif
PRJ_DEFINES = /DBUILD_ttk $(CONFIG_DEFS) /Dinline=__inline /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE
# Additional Link libraries needed beyond those in rules.vc
PRJ_LIBS = netapi32.lib gdi32.lib user32.lib userenv.lib winspool.lib shell32.lib ole32.lib uuid.lib
#---------------------------------------------------------------------
# TkTest flags
#---------------------------------------------------------------------
!if "$(TESTPAT)" != ""
TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
!endif
#---------------------------------------------------------------------
# Project specific targets
#---------------------------------------------------------------------
release: setup $(TKSTUBLIB) $(WISH)
!if !$(USING_PRE87_TCL)
release: libtkzip embed
!endif
all: release $(CAT32)
core: setup $(TKSTUBLIB) $(TKLIB)
cwish: $(WISHC)
libtkzip: setup $(TKSCRIPTZIP)
!if $(TK_EMBED_SCRIPTS)
!if $(STATIC_BUILD)
embed: setup $(WISH) $(WISHSCRIPTZIP)
@copy /y /b "$(WISH)"+"$(WISHSCRIPTZIP)" "$(WISH)"
!else
embed: setup $(TKLIB) $(TKSCRIPTZIP)
@copy /y /b "$(TKLIB)"+"$(TKSCRIPTZIP)" "$(TKLIB)"
!endif
!else
# ! TK_EMBED_SCRIPTS - still need to build the zip even if not embedded
embed: $(TKSCRIPTZIP)
!endif
install: install-binaries install-libraries install-docs
!if $(SYMBOLS)
install: install-pdbs
!endif
tktest: setup $(TKTEST) $(CAT32)
setup: default-setup
test: test-classic test-ttk
test-classic: setup $(TKTEST) $(TKLIB) $(CAT32)
@set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
@set TK_LIBRARY=$(LIBDIR:\=/)
@set TCLLIBPATH=
!if $(TCLINSTALL)
@set PATH=$(_TCLDIR)\bin;$(PATH)
!else
@set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
!endif
$(DEBUGGER) $(TKTEST) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) | $(CAT32)
test-ttk: setup $(TKTEST) $(TKLIB) $(CAT32)
@set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
@set TK_LIBRARY=$(LIBDIR:\=/)
@set TCLLIBPATH=
!if $(TCLINSTALL)
@set PATH=$(_TCLDIR)\bin;$(PATH)
!else
@set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
!endif
$(DEBUGGER) $(TKTEST) "$(ROOT:\=/)/tests/ttk/all.tcl" $(TESTFLAGS) | $(CAT32)
runtest: setup $(TKTEST) $(TKLIB) $(CAT32)
@set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
@set TK_LIBRARY=$(LIBDIR:\=/)
@set TCLLIBPATH=
!if $(TCLINSTALL)
@set PATH=$(_TCLDIR)\bin;$(PATH)
!else
@set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
!endif
$(DEBUGGER) $(TKTEST)
rundemo: setup $(TKTEST) $(TKLIB) $(CAT32)
@set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
@set TK_LIBRARY=$(LIBDIR:\=/)
@set TCLLIBPATH=
!if $(TCLINSTALL)
@set PATH=$(_TCLDIR)\bin;$(PATH)
!else
@set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
!endif
$(TKTEST) $(ROOT:\=/)\library\demos\widget
shell: setup $(WISH)
@set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
@set TK_LIBRARY=$(LIBDIR:\=/)
@set TCLLIBPATH=
!if $(TCLINSTALL)
@set PATH=$(_TCLDIR)\bin;$(PATH)
!else
@set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
!endif
$(DEBUGGER) $(WISH) <<
console show
<<
dbgshell: setup $(WISH)
@set TCL_LIBRARY=$(TCL_LIBRARY:\=/)
@set TK_LIBRARY=$(LIBDIR:\=/)
@set TCLLIBPATH=
!if $(TCLINSTALL)
@set PATH=$(_TCLDIR)\bin;$(PATH)
!else
@set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH)
!endif
windbg $(WISH)
!if $(STATIC_BUILD)
$(TKLIB): $(TKOBJS)
$(LIBCMD) @<<
$**
<<
!else
$(TKLIB): $(TKOBJS)
$(DLLCMD) @<<
$**
<<
$(_VC_MANIFEST_EMBED_DLL)
@if exist $*.exp del $*.exp
$(TKIMPLIB): $(TKLIB)
!endif # $(STATIC_BUILD)
$(TKSTUBLIB): $(TKSTUBOBJS)
$(LIBCMD) -nodefaultlib $**
$(WISH): $(WISHOBJS) $(TKSTUBLIB) $(TKIMPLIB)
$(GUIEXECMD) -stack:2300000 $**
$(_VC_MANIFEST_EMBED_EXE)
$(WISHC): $(WISHOBJS) $(TKSTUBLIB) $(TKIMPLIB)
$(CONEXECMD) -stack:2300000 $**
$(_VC_MANIFEST_EMBED_EXE)
$(TKTEST): $(TKTESTOBJS) $(TKSTUBLIB) $(TKIMPLIB)
$(GUIEXECMD) -stack:2300000 $**
$(_VC_MANIFEST_EMBED_EXE)
TKSCRIPTZIPTOP = tk_library
#TKSCRIPTZIPTOP = "tk$(DOTVERSION)"
$(TKSCRIPTZIP): .PHONY
@echo Building Tk library zip file
@if not exist "$(LIBTKVFS)" $(MKDIR) "$(LIBTKVFS)"
@if exist "$(LIBTKVFS)\$(TKSCRIPTZIPTOP)" $(RMDIR) "$(LIBTKVFS)\$(TKSCRIPTZIPTOP)"
@$(CPYDIR) $(LIBDIR) "$(LIBTKVFS)\$(TKSCRIPTZIPTOP)"
@$(TCLSH) <<
cd {$(OUT_DIR)}
file delete -force {$@}
zipfs mkzip {$@} {$(LIBTKVFS)} {$(LIBTKVFS)}
<<
!if $(STATIC_BUILD)
$(WISHSCRIPTZIP): $(TKSCRIPTZIP)
@echo Building Wish Tcl+Tk library zip file
@if exist "$(LIBTKVFS)\tcl_library" $(RMDIR) "$(LIBTKVFS)\tcl_library"
@$(TCLSH) <<
cd {$(OUT_DIR)}
file delete -force {$@}
zipfs mount "$(TCLSCRIPTZIP:\=/)" mnt
file copy [file join [zipfs root] mnt tcl_library] "$(LIBTKVFS:\=/)"
zipfs mkzip {$@} {$(LIBTKVFS)} {$(LIBTKVFS)}
<<
!endif
$(CAT32): $(_TCLDIR)\win\cat.c
$(cc32) $(cflags) $(crt) /D_CRT_NONSTDC_NO_DEPRECATE /DCONSOLE /DUNICODE /D_UNICODE -Fo$(TMP_DIR)\ $?
$(CONEXECMD) -stack:16384 $(TMP_DIR)\cat.obj
$(_VC_MANIFEST_EMBED_EXE)
#---------------------------------------------------------------------
# Regenerate the stubs files. [Development use only]
#---------------------------------------------------------------------
genstubs:
!if !exist($(TCLSH))
@echo Build tclsh first!
!else
set TCL_LIBRARY=$(TCL_LIBRARY)
$(TCLSH) $(_TCLDIR)\tools\genStubs.tcl $(GENERICDIR) \
$(GENERICDIR)\$(PROJECT).decls $(GENERICDIR)\$(PROJECT)Int.decls
$(TCLSH) $(_TCLDIR)\tools\genStubs.tcl $(GENERICDIR)\ttk $(GENERICDIR)\ttk\ttk.decls
!endif
#---------------------------------------------------------------------
# Build the Windows HTML help file.
#---------------------------------------------------------------------
!if defined(PROCESSOR_ARCHITECTURE) && "$(PROCESSOR_ARCHITECTURE)" == "AMD64"
HHC="%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe"
!else
HHC="%ProgramFiles%\HTML Help Workshop\hhc.exe"
!endif
HTMLDIR=$(OUT_DIR)\html
HTMLBASE=TclTk$(TCL_VERSION)
HHPFILE=$(HTMLDIR)\$(HTMLBASE).hhp
CHMFILE=$(HTMLDIR)\$(HTMLBASE).chm
htmlhelp: chmsetup $(CHMFILE)
$(CHMFILE): $(DOCDIR)\*
@$(TCLSH) $(TCLTOOLSDIR)\tcltk-man2html.tcl "--htmldir=$(HTMLDIR)"
@echo Compiling HTML help project
@"$(HHC)" <<$(HHPFILE) >NUL
[OPTIONS]
Compatibility=1.1 or later
Compiled file=$(HTMLBASE).chm
Default topic=index.html
Display compile progress=no
Error log file=$(HTMLBASE).log
Language=0x409 English (United States)
Title=Tcl/Tk $(TCL_DOTVERSION) Help
[FILES]
index.html
docs.css
Keywords\*.html
TclCmd\*.html
TclLib\*.html
TkCmd\*.html
TkLib\*.html
UserCmd\*.html
<<
chmsetup:
@if not exist $(HTMLDIR)\nul mkdir $(HTMLDIR)
install-docs:
!if exist("$(CHMFILE)")
@echo Installing compiled HTML help
@$(CPY) "$(CHMFILE)" "$(DOC_INSTALL_DIR)\"
!endif
# "emacs font-lock highlighting fix
install-pdbs:
@echo Installing debug symbols
@$(CPY) "$(OUT_DIR)\*.pdb" "$(BIN_INSTALL_DIR)\"
# "emacs font-lock highlighting fix
#---------------------------------------------------------------------
# Special case object file targets
#---------------------------------------------------------------------
# Note: Static builds now always mandate statically linking Tcl registry etc.
$(TMP_DIR)\testMain.obj: $(WIN_DIR)\winMain.c
$(cc32) $(appcflags_nostubs) /DTK_TEST /DUNICODE /D_UNICODE \
/DTCL_USE_STATIC_PACKAGES=$(STATIC_BUILD) \
-Fo$@ $?
$(ROOT)\manifest.uuid:
copy $(WIN_DIR)\gitmanifest.in $(ROOT)\manifest.uuid
git rev-parse HEAD >>$(ROOT)\manifest.uuid
$(TMP_DIR)\tkUuid.h: $(ROOT)\manifest.uuid
copy $(WIN_DIR)\tkUuid.h.in+$(ROOT)\manifest.uuid $(TMP_DIR)\tkUuid.h
$(TMP_DIR)\tkTest.obj: $(GENERICDIR)\tkTest.c
$(cc32) $(appcflags_nostubs) -Fo$@ $?
$(TMP_DIR)\tkWinTest.obj: $(WIN_DIR)\tkWinTest.c
$(cc32) $(appcflags_nostubs) -Fo$@ $?
$(TMP_DIR)\tkSquare.obj: $(GENERICDIR)\tkSquare.c
$(cc32) $(appcflags_nostubs) -Fo$@ $?
# Note: Static builds now always mandate statically linking Tcl registry etc.
$(TMP_DIR)\winMain.obj: $(WIN_DIR)\winMain.c
$(cc32) $(appcflags_nostubs) /DUNICODE /D_UNICODE \
/DTCL_USE_STATIC_PACKAGES=$(STATIC_BUILD) \
-Fo$@ $?
$(TMP_DIR)\tkMain2.obj: $(GENERICDIR)\tkMain.c
$(cc32) $(pkgcflags) /DUNICODE /D_UNICODE -Fo$@ $?
$(TMP_DIR)\tkPkgConfig.obj: $(GENERICDIR)\tkPkgConfig.c
$(cc32) $(pkgcflags) \
-DCFG_RUNTIME_DLLFILE="\"$(TKLIBNAME)\"" \
-Fo$@ $?
$(TMP_DIR)\tkWindow.obj: $(GENERICDIR)\tkWindow.c $(TMP_DIR)\tkUuid.h
$(cc32) $(pkgcflags) -I$(TMP_DIR) -Fo$@ $?
# The following objects are part of the stub library and should not
# be built as DLL objects but none of the symbols should be exported
# and no reference made to a C runtime.
$(TMP_DIR)\tkStubLib.obj : $(GENERICDIR)\tkStubLib.c
$(cc32) $(stubscflags) -Fo$@ $?
$(TMP_DIR)\ttkStubLib.obj : $(TTKDIR)\ttkStubLib.c
$(cc32) $(stubscflags) -Fo$@ $?
$(TMP_DIR)\wish.exe.manifest: $(WIN_DIR)\wish.exe.manifest.in
@nmakehlp -s << $** >$@
@MACHINE@ $(MACHINE:IX86=X86)
@TK_WIN_VERSION@ $(DOTVERSION).0.0
<<
#---------------------------------------------------------------------
# Generate the source dependencies. Having dependency rules will
# improve incremental build accuracy without having to resort to a
# full rebuild just because some non-global header file like
# tclCompile.h was changed. These rules aren't needed when building
# from scratch.
#---------------------------------------------------------------------
depend:
!if !exist($(TCLSH))
@echo Build tclsh first!
!else
set TCL_LIBRARY=$(TCL_LIBRARY)
$(TCLSH) $(TCLTOOLSDIR:\=/)/mkdepend.tcl -vc32 -out:"$(OUT_DIR)\depend.mk" \
-passthru:"/DBUILD_tk $(TK_INCLUDES)" $(GENERICDIR),$$(GENERICDIR) \
$(WIN_DIR),$$(WIN_DIR) $(TTKDIR),$$(TTKDIR) $(XLIBDIR),$$(XLIBDIR) \
$(BITMAPDIR),$$(BITMAPDIR) @<<
$(TKOBJS)
<<
!endif
#---------------------------------------------------------------------
# Dependency rules
#---------------------------------------------------------------------
$(TMP_DIR)\tk.res: \
$(RCDIR)\cursor*.cur \
$(RCDIR)\tk.ico
!if exist("$(OUT_DIR)\depend.mk")
!include "$(OUT_DIR)\depend.mk"
!message *** Dependency rules in use.
!else
!message *** Dependency rules are not being used.
!endif
### add a spacer in the output
!message
#---------------------------------------------------------------------
# Implicit rules
#---------------------------------------------------------------------
{$(XLIBDIR)}.c{$(TMP_DIR)}.obj::
$(CCPKGCMD) @<<
$<
<<
{$(TTKDIR)}.c{$(TMP_DIR)}.obj::
$(CCPKGCMD) @<<
$<
<<
{$(ROOT)\unix}.c{$(TMP_DIR)}.obj::
$(CCPKGCMD) @<<
$<
<<
$(TMP_DIR)\tk.res: $(TMP_DIR)\wish.exe.manifest
$(TMP_DIR)\wish.res: $(TMP_DIR)\wish.exe.manifest
$(TMP_DIR)\tktest.res: $(TMP_DIR)\wish.exe.manifest
.SUFFIXES:
.SUFFIXES:.c .rc
#---------------------------------------------------------------------
# Installation.
#---------------------------------------------------------------------
install-binaries:
@echo installing binaries
@$(CPY) "$(WISH)" "$(BIN_INSTALL_DIR)\"
!if "$(TKLIB)" != "$(TKIMPLIB)"
@$(CPY) "$(TKLIB)" "$(BIN_INSTALL_DIR)\"
!endif
@$(CPY) "$(TKIMPLIB)" "$(LIB_INSTALL_DIR)\"
@$(CPY) "$(TKSTUBLIB)" "$(LIB_INSTALL_DIR)\"
!if !$(STATIC_BUILD)
@echo creating package index
@type << > $(OUT_DIR)\pkgIndex.tcl
if {![package vsatisfies [package provide Tcl] 8.7-]} return
if {($$::tcl_platform(platform) eq "unix") && ([info exists ::env(DISPLAY)]
|| ([info exists ::argv] && ("-display" in $$::argv)))} {
if {[package vsatisfies [package provide Tcl] 9.0]} {
package ifneeded tk $(TK_PATCH_LEVEL) [list load [file normalize [file join $$dir .. .. bin libtcl9tk$(DOTVERSION).dll]]]
} else {
package ifneeded tk $(TK_PATCH_LEVEL) [list load [file normalize [file join $$dir .. .. bin libtk$(DOTVERSION).dll]]]
}
} else {
if {[package vsatisfies [package provide Tcl] 9.0]} {
package ifneeded tk $(TK_PATCH_LEVEL) [list load [file normalize [file join $$dir .. .. bin $(TKLIBNAME9)]]]
} else {
package ifneeded tk $(TK_PATCH_LEVEL) [list load [file normalize [file join $$dir .. .. bin $(TKLIBNAME8)]]]
}
}
package ifneeded Tk $(TK_PATCH_LEVEL) [list package require -exact tk $(TK_PATCH_LEVEL)]
<<
@$(CPY) $(OUT_DIR)\pkgIndex.tcl "$(SCRIPT_INSTALL_DIR)\"
!endif
#"
install-libraries:
@echo installing Tk headers
@$(CPY) "$(GENERICDIR)\tk.h" "$(INCLUDE_INSTALL_DIR)\"
@$(CPY) "$(GENERICDIR)\tkDecls.h" "$(INCLUDE_INSTALL_DIR)\"
@$(CPY) "$(GENERICDIR)\tkPlatDecls.h" "$(INCLUDE_INSTALL_DIR)\"
@$(CPY) "$(GENERICDIR)\tkIntXlibDecls.h" "$(INCLUDE_INSTALL_DIR)\"
@$(CPY) "$(XLIBDIR)\X11\*.h" "$(INCLUDE_INSTALL_DIR)\X11\"
!if !$(USING_PRE87_TCL)
@$(CPY) "$(TKSCRIPTZIP)" "$(LIB_INSTALL_DIR)"
!endif
!if !$(TK_EMBED_SCRIPTS)
@echo installing script library
@$(CPY) "$(LIBDIR)\*" "$(SCRIPT_INSTALL_DIR)\"
@echo installing theme library
@$(CPY) "$(LIBDIR)\ttk\*" "$(SCRIPT_INSTALL_DIR)\ttk\"
@echo installing images
@$(CPY) "$(LIBDIR)\images\*" "$(SCRIPT_INSTALL_DIR)\images\"
@echo installing language files
@$(CPY) "$(LIBDIR)\msgs\*" "$(SCRIPT_INSTALL_DIR)\msgs\"
!endif
@echo installing demos
@$(CPY) "$(DEMODIR)\*" "$(DEMO_INSTALL_DIR)\"
@$(CPY) "$(DEMODIR)\images\*" "$(DEMO_INSTALL_DIR)\images\"
#"
#---------------------------------------------------------------------
# Clean up
#---------------------------------------------------------------------
clean: default-clean
realclean: hose
hose: default-hose
tidy:
!if "$(TKLIB)" != "$(TKIMPLIB)"
@echo Removing $(TKLIB) ...
@if exist $(TKLIB) del $(TKLIB)
!endif
@echo Removing $(TKIMPLIB) ...
@if exist $(TKIMPLIB) del $(TKIMPLIB)
@echo Removing $(WISH) ...
@if exist $(WISH) del $(WISH)
@echo Removing $(TKTEST) ...
@if exist $(TKTEST) del $(TKTEST)
@echo Removing $(TKSTUBLIB) ...
@if exist $(TKSTUBLIB) del $(TKSTUBLIB)
.PHONY:
# Local Variables:
# mode: makefile
# End: