#------------------------------------------------------------------------------ # Visual C++ 5.0+ makefile for [Incr Tk] # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # Copyright (c) 1993-1998 Lucent Technologies, Inc. # RCS: $Id: makefile.vc,v 1.31 2007/11/05 22:35:17 davygrvy Exp $ #------------------------------------------------------------------------------ # Do not modify this file! #------------------------------------------------------------------------------ !if !exist("makefile.vc") MSG = ^ You must run this makefile only from the directory it is in.^ Please `cd` to its location first. !error $(MSG) !endif PROJECT = itk !include "..\..\rules.vc" !if $(TCLINSTALL) !message *** Warning: [Incr Tk] requires the source distribution of Tcl to build from, !message *** at this time, sorry. Please set the TCLDIR and TKDIR macros to point !message *** to the sources. !endif ITCLDIR = ..\..\itcl !if [nmakehlp -g $(ITCLDIR)\generic\itcl.h ITCL_VERSION] == 33 ITCL_DOTVERSION = 3.3 !elseif [nmakehlp -g $(ITCLDIR)\generic\itcl.h ITCL_VERSION] == 34 ITCL_DOTVERSION = 3.4 !elseif [nmakehlp -g $(ITCLDIR)\generic\itcl.h ITCL_VERSION] == 35 ITCL_DOTVERSION = 3.5 !elseif [nmakehlp -g $(ITCLDIR)\generic\itcl.h ITCL_VERSION] == 0 MSG =^ Can't get version string from ..\generic\itcl.h !error $(MSG) !endif ITCL_VERSION = $(ITCL_DOTVERSION:.=) !if [nmakehlp -g ..\generic\itk.h ITK_VERSION] == 33 ITK_DOTVERSION = 3.3 !elseif [nmakehlp -g ..\generic\itk.h ITK_VERSION] == 34 ITK_DOTVERSION = 3.4 !elseif [nmakehlp -g ..\generic\itk.h ITK_VERSION] == 35 ITK_DOTVERSION = 3.5 !elseif [nmakehlp -g ..\generic\itk.h ITK_VERSION] == 0 MSG =^ Can't get version string from ..\generic\itk.h !error $(MSG) !endif ITK_VERSION = $(ITK_DOTVERSION:.=) BINROOT = . ROOT = .. STUBPREFIX = $(PROJECT)stub PKGINDEX = "$(TMP_DIR)\pkgIndex.tcl" ITCLLIBNAME = itcl$(ITCL_VERSION)$(SUFX).$(EXT) ITCLLIB = "$(ITCLDIR)\win\$(OUT_DIR)\$(ITCLLIBNAME)" ITKIMPLIB = "$(OUT_DIR)\$(PROJECT)$(ITK_VERSION)$(SUFX).lib" ITKSTUBLIBNAME = $(STUBPREFIX)$(ITK_VERSION).lib ITKSTUBLIB = "$(OUT_DIR)\$(ITKSTUBLIBNAME)" !if $(TCL_DOES_STUBS) ITKLIBNAME = $(PROJECT)$(ITK_VERSION)$(SUFX).$(EXT) ITCLIMPLIBNAME = itcl$(ITCL_VERSION)$(SUFX).$(EXT) !else ITKLIBNAME = $(PROJECT)$(ITK_VERSION)80$(SUFX).$(EXT) ITCLIMPLIBNAME = itcl$(ITCL_VERSION)80$(SUFX).lib !endif ITKLIB = "$(OUT_DIR)\$(ITKLIBNAME)" ITCLIMPLIB = "$(ITCLDIR)\win\Release\$(ITCLIMPLIBNAME)" !if $(TCLINSTALL) TKSTUBLIB = "$(TCLDIR)\lib\tkstub$(TCL_VERSION).lib" TKIMPLIB = "$(TCLDIR)\lib\tk$(TCL_VERSION)$(DBGX).lib" TKLIB = "$(TCLDIR)\bin\tk$(TCL_VERSION)$(DBGX).dll" WISH = "$(TCLDIR)\bin\wish$(TCL_VERSION)$(DBGX).exe" TCL_LIBRARY = TK_LIBRARY = !else TKSTUBLIB = "$(TKDIR)\win\Release\tkstub$(TCL_VERSION).lib" TKIMPLIB = "$(TKDIR)\win\$(OUT_DIR)\tk$(TCL_VERSION)$(DBGX).lib" TKLIB = "$(TKDIR)\win\$(OUT_DIR)\tk$(TCL_VERSION)$(DBGX).dll" WISH = "$(TKDIR)\win\$(OUT_DIR)\wish$(TCL_VERSION)$(DBGX).exe" TCL_LIBRARY = "$(TCLDIR)\library" TK_LIBRARY = "$(TKDIR)\library" !endif ITCL_LIBRARY = "$(ITCLDIR:\=/)/library" ITK_LIBRARY = "$(ROOT)/library" ITCLSTUBLIBNAME = itclstub$(ITCL_VERSION).lib ITCLSTUBLIB = "$(ITCLDIR)\win\Release\$(ITCLSTUBLIBNAME)" ### For Tcl 8.0 !if !$(TCL_DOES_STUBS) TCLSTUBLIB = $(TCLIMPLIB) TKSTUBLIB = $(TKIMPLIB) ITCLSTUBLIB = $(ITCLIMPLIB) !endif BIN_INSTALL_DIR = $(_INSTALLDIR)\bin DOC_INSTALL_DIR = $(_INSTALLDIR)\doc LIB_INSTALL_DIR = $(_INSTALLDIR)\lib SCRIPT_INSTALL_DIR = $(_INSTALLDIR)\lib\itk$(ITK_DOTVERSION) INCLUDE_INSTALL_DIR = $(_INSTALLDIR)\include ITKOBJS = \ $(TMP_DIR)\itk_archetype.obj \ $(TMP_DIR)\itk_cmds.obj \ $(TMP_DIR)\itk_option.obj \ $(TMP_DIR)\itk_util.obj \ !if !$(STATIC_BUILD) $(TMP_DIR)\dllEntryPoint.obj \ $(TMP_DIR)\itk.res \ !endif !if $(TCL_DOES_STUBS) $(TMP_DIR)\itkStubInit.obj !endif ITKSTUBOBJS = \ !if $(TCL_DOES_STUBS) $(TMP_DIR)\itkStubLib.obj !endif GENERICDIR = $(ROOT)\generic DOCDIR = $(ROOT)\doc WINDIR = $(ROOT)\win RCDIR = $(ROOT)\win\rc TOOLSDIR = ..\..\tools #--------------------------------------------------------------------- # Link flags #--------------------------------------------------------------------- !if $(DEBUG) ldebug = -debug:full -debugtype:cv !else ldebug = -release -opt:ref -opt:icf,3 !endif # declarations common to all linker options lflags = -nologo -machine:$(MACHINE) $(ldebug) !if $(PROFILE) lflags = $(lflags) -profile !endif !if $(ALIGN98_HACK) && !$(STATIC_BUILD) # align sections for PE size savings. lflags = $(lflags) -opt:nowin98 !else if !$(ALIGN98_HACK) && $(STATIC_BUILD) # align sections for speed in loading by choosing the virtual page size. lflags = $(lflags) -align:4096 !endif !if $(LOIMPACT) lflags = $(lflags) -ws:aggressive !endif ITK_LFLAGS = $(lflags) -subsystem:windows -dll ITK_LLIBS = $(TCLSTUBLIB) $(TKSTUBLIB) $(ITCLSTUBLIB) !if exist("$(TCLDIR)\win\coffbase.txt") ITK_DLLBASE = -base:@$(TCLDIR)\win\coffbase.txt,itk !else ITK_DLLBASE = !endif #--------------------------------------------------------------------- # Compile flags #--------------------------------------------------------------------- !if $(DEBUG) !if "$(MACHINE)" == "IA64" cdebug = -Od -Zi !else cdebug = -Z7 -Od -WX !endif !else # This cranks the optimization level up to max. cdebug = -O2 !endif # declarations common to all compiler options cflags = -nologo -c -W3 -YX -Fp$(TMP_DIR)^\ !if $(PENT_0F_ERRATA) cflags = $(cflags) -QI0f !endif !if $(ITAN_B_ERRATA) cflags = $(cflags) -QIA64_Bx !endif !if $(MSVCRT) crt = -MD$(DBGX) !else crt = -MT$(DBGX) !endif !if $(TCLINSTALL) TCL_INCLUDES = -I"$(TCLDIR)\include" TK_INCLUDES = !else TCL_INCLUDES = -I"$(TCLDIR)\generic" -I"$(TCLDIR)\win" TK_INCLUDES = -I"$(TKDIR)\generic" -I"$(TKDIR)\xlib" !endif ITK_INCLUDES = -I$(WINDIR) -I$(GENERICDIR) ITCL_INCLUDES = -I"$(ITCLDIR)\generic" ITK_DEFINES = -DBUILD_itk -DTCL_THREADS=1 ITK_EXE_CFLAGS = $(cdebug) $(cflags) $(crt) $(ITCL_INCLUDES) $(ITK_INCLUDES) \ $(TCL_INCLUDES) $(TK_INCLUDES) $(ITK_DEFINES) ### By convention, static builds do not use Stubs. This is just a practice, ### not a technical limitation. !if $(STATIC_BUILD) ITK_CFLAGS = $(ITK_EXE_CFLAGS) -DSTATIC_BUILD $(OPTDEFINES) !elseif $(TCL_DOES_STUBS) ITK_CFLAGS = $(ITK_EXE_CFLAGS) -DUSE_TCL_STUBS -DUSE_TK_STUBS -DUSE_ITCL_STUBS $(OPTDEFINES) !else ITK_CFLAGS = $(ITK_EXE_CFLAGS) $(OPTDEFINES) !endif #--------------------------------------------------------------------- # Project specific targets #--------------------------------------------------------------------- all : setup $(ITKLIB) $(ITKSTUBLIB) release : setup $(ITKLIB) $(ITKSTUBLIB) install : install-binaries install-docs !if $(STATIC_BUILD) test : @echo test target not supported for a static library. !else test : setup $(ITKLIB) $(ITKSTUBLIB) $(TCLSH) ..\tests\all.tcl $(TESTFLAGS) -loadfile << set env(TK_LIBRARY) $(TK_LIBRARY:\=/) set env(ITCL_LIBRARY) [file normalize $(ITCL_LIBRARY:\=/)] set env(ITK_LIBRARY) [file normalize $(ITK_LIBRARY:\=/)] load [file normalize $(ITCLLIB:\=/)] Itcl load [file normalize $(TKLIB:\=/)] Tk load [file normalize $(ITKLIB:\=/)] Itk << !endif setup : @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR) @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR) $(ITKLIB): $(ITKOBJS) !if $(STATIC_BUILD) $(lib32) -nologo -machine:$(MACHINE) -out:$@ @<< !else $(link32) $(ITK_LFLAGS) $(ITK_DLLBASE) -out:$@ $(ITK_LLIBS) @<< !endif $(ITKOBJS) << !if $(TCL_DOES_STUBS) $(ITKSTUBLIB) : $(ITKSTUBOBJS) $(lib32) -nologo -out:$@ $(ITKSTUBOBJS) !endif install-binaries: if not exist "$(_INSTALLDIR)" mkdir "$(_INSTALLDIR)" if not exist "$(BIN_INSTALL_DIR)" mkdir "$(BIN_INSTALL_DIR)" if not exist "$(LIB_INSTALL_DIR)" mkdir "$(LIB_INSTALL_DIR)" if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)" if not exist "$(INCLUDE_INSTALL_DIR)" mkdir "$(INCLUDE_INSTALL_DIR)" copy $(ITKLIB) "$(SCRIPT_INSTALL_DIR)" !if $(ITKSTUBLIB) != "" copy $(ITKSTUBLIB) "$(LIB_INSTALL_DIR)" !endif copy $(ROOT)\generic\itk.h "$(INCLUDE_INSTALL_DIR)" copy $(ROOT)\generic\itkDecls.h "$(INCLUDE_INSTALL_DIR)" copy $(ROOT)\library\*.* "$(SCRIPT_INSTALL_DIR)" echo if {[package vsatisfies 8.0 [package provide Tcl]]} {\ > "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" echo ^ ^ ^ ^ set add 80>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" echo } else {>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" echo ^ ^ ^ ^ set add {}>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" echo }>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" echo if {[info exists ::tcl_platform(debug)] ^&^&\ $$::tcl_platform(debug) ^&^& \>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" echo ^ ^ ^ ^ ^ ^ ^ ^ [file exists [file join $$dir\ $(PROJECT)$(ITK_VERSION)$${add}g.dll]]}\ {>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" echo ^ ^ ^ ^ package ifneeded Itk $(ITK_DOTVERSION) [list load\ [file join $$dir $(PROJECT)$(ITK_VERSION)$${add}g.dll]\ Itk]>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" echo } else {>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" echo ^ ^ ^ ^ package ifneeded Itk $(ITK_DOTVERSION) [list load\ [file join $$dir $(PROJECT)$(ITK_VERSION)$${add}.dll]\ Itk]>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" echo }>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" echo unset add>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" #--------------------------------------------------------------------- # Regenerate the stubs files. #--------------------------------------------------------------------- !if !$(TCLINSTALL) # Only from the sources of Tcl does genStubs.tcl exist. genstubs: $(TCLSH) $(TOOLSDIR)\genStubs.tcl $(GENERICDIR) \ $(GENERICDIR)\itk.decls !else genstubs: @echo ERROR: Can't rebuild stubs tables without the Tcl source distribution !endif #--------------------------------------------------------------------- # Generate the source dependencies. #--------------------------------------------------------------------- depend: !if !exist($(TCLSH)) @echo Build tclsh first! !else $(TCLSH) $(TCLTOOLSDIR)\mkdepend.tcl -vc32 -out:"$(OUT_DIR)\depend.mk" \ -passthru:"-DBUILD_itcl $(ITCL_INCLUDES) $(TCL_INCLUDES) $(ITK_INCLUDES) $(TK_INCLUDES)" \ $(GENERICDIR),$$(GENERICDIR) $(WINDIR),$$(WINDIR) @<< $(ITKOBJS) << !endif #--------------------------------------------------------------------- # Dependency rules #--------------------------------------------------------------------- !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 #--------------------------------------------------------------------- # Special case object file targets #--------------------------------------------------------------------- # The following object is part of the stub library and should not # be built as DLL objects but none of the symbols should be exported $(TMP_DIR)\itkStubLib.obj : $(GENERICDIR)\itkStubLib.c $(cc32) -DSTATIC_BUILD $(ITK_EXE_CFLAGS) -Zl -Fo$@ $? #--------------------------------------------------------------------- # Inference rules. #--------------------------------------------------------------------- {$(WINDIR)}.c{$(TMP_DIR)}.obj :: $(cc32) $(ITK_CFLAGS) -Fo$(TMP_DIR)\ @<< $< << {$(GENERICDIR)}.c{$(TMP_DIR)}.obj :: $(cc32) $(ITK_CFLAGS) -Fo$(TMP_DIR)\ @<< $< << {$(RCDIR)}.rc{$(TMP_DIR)}.res : $(rc32) -fo $@ -DDEBUG=$(DEBUG) $(ITK_INCLUDES) $(TCL_INCLUDES) $(ITCL_INCLUDES) $(ITK_DEFINES) $< #--------------------------------------------------------------------- # Generate the windows help files. #--------------------------------------------------------------------- HLPBASE = $(PROJECT)$(ITK_VERSION) HELPFILE = $(OUT_DIR)\$(HLPBASE).hlp HELPCNT = $(OUT_DIR)\$(HLPBASE).cnt DOCTMP_DIR = $(OUT_DIR)\$(PROJECT)_docs HELPRTF = $(DOCTMP_DIR)\$(PROJECT).rtf MAN2HELP = $(DOCTMP_DIR)\man2help.tcl MAN2HELP2 = $(DOCTMP_DIR)\man2help2.tcl INDEX = $(DOCTMP_DIR)\index.tcl BMP = $(DOCTMP_DIR)\toaster.bmp BMP_NOPATH = toaster.bmp MAN2TCL = $(DOCTMP_DIR)\man2tcl.exe winhelp: docsetup $(HELPFILE) docsetup: @if not exist $(DOCTMP_DIR)\nul mkdir $(DOCTMP_DIR) $(MAN2HELP) $(MAN2HELP2) $(INDEX): $(TCLTOOLSDIR)\$$(@F) copy $(TCLTOOLSDIR)\$(@F) $(@D) $(BMP): copy $(WINDIR)\$(@F) $(@D) $(HELPFILE): $(HELPRTF) $(BMP) cd $(DOCTMP_DIR) start /wait hcrtf.exe -x <<$(PROJECT).hpj [OPTIONS] COMPRESS=12 Hall Zeck LCID=0x409 0x0 0x0 ; English (United States) TITLE=[Incr Tk] Reference Manual BMROOT=. CNT=$(@B).cnt HLP=$(@B).hlp [FILES] $(PROJECT).rtf [WINDOWS] main="[Incr Tk] Reference Manual",,27648,(r15263976),(r65280) [CONFIG] BrowseButtons() CreateButton(1, "Web", ExecFile("http://www.tcl.tk")) CreateButton(2, "SF", ExecFile("http://sf.net/projects/incrtcl")) CreateButton(3, "Wiki", ExecFile("http://wiki.tcl.tk")) CreateButton(4, "FAQ", ExecFile("http://www.purl.org/NET/Tcl-FAQ/")) << cd $(MAKEDIR) copy "$(DOCTMP_DIR)\$(@B).hlp" "$(OUT_DIR)" copy "$(DOCTMP_DIR)\$(@B).cnt" "$(OUT_DIR)" $(MAN2TCL): $(TCLTOOLSDIR)\$$(@B).c $(cc32) -nologo -G4 -ML -O2 -Fo$(@D)\ $(TCLTOOLSDIR)\$(@B).c -link -out:$@ $(HELPRTF): $(MAN2TCL) $(MAN2HELP) $(MAN2HELP2) $(INDEX) $(TCLSH) $(MAN2HELP) -bitmap $(BMP_NOPATH) $(PROJECT) $(ITK_VERSION) $(DOCDIR:\=/) install-docs: !if exist($(HELPFILE)) @xcopy /i /y "$(HELPFILE)" "$(DOC_INSTALL_DIR)\" @xcopy /i /y "$(HELPCNT)" "$(DOC_INSTALL_DIR)\" $(TCLSH) << puts "Installing $(PROJECT)'s helpfile contents into Tcl's ..." set f [open {$(DOC_INSTALL_DIR:\=/)/tcl$(TCL_VERSION).cnt} r] while {![eof $$f]} { if {[regexp {:Include $(PROJECT)([0-9]{2}).cnt} [gets $$f] dummy ver]} { if {$$ver == $(ITK_VERSION)} { puts "Already installed." exit } else { # do something here logical to remove (or replace) it. puts "$$ver != $(ITK_VERSION), unfinished code path, die, die!" exit 1 } } } close $$f set f [open {$(DOC_INSTALL_DIR:\=/)/tcl$(TCL_VERSION).cnt} a] puts $$f {:Include $(HLPBASE).cnt} close $$f << start /wait winhlp32 -g $(DOC_INSTALL_DIR)\tcl$(TCL_VERSION).hlp !endif #--------------------------------------------------------------------- # Clean up #--------------------------------------------------------------------- tidy : -del $(TMP_DIR)\*.pch -del $(TMP_DIR)\*.obj -del $(TMP_DIR)\*.res clean : tidy -del $(OUT_DIR)\*.exp -del $(OUT_DIR)\*.lib -del $(OUT_DIR)\*.dll hose : clean -rmdir $(OUT_DIR) -rmdir $(TMP_DIR)