1 #------------------------------------------------------------------------------
2 # Visual C++ 5.0+ makefile for [Incr Tk]
4 # See the file "license.terms" for information on usage and redistribution
5 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
7 # Copyright (c) 1993-1998 Lucent Technologies, Inc.
9 #------------------------------------------------------------------------------
10 # Do not modify this file!
11 #------------------------------------------------------------------------------
13 !if !exist("makefile.vc")
15 You must run this makefile only from the directory it is in.^
16 Please `cd` to its location first.
21 !include "..\..\rules.vc"
25 !message *** Warning: [Incr Tk] requires the source distribution of Tcl to build from,
26 !message *** at this time, sorry. Please set the TCLDIR and TKDIR macros to point
27 !message *** to the sources.
33 !if [nmakehlp -g $(ITCLDIR)\generic\itcl.h ITCL_VERSION] == 33
35 !elseif [nmakehlp -g $(ITCLDIR)\generic\itcl.h ITCL_VERSION] == 34
37 !elseif [nmakehlp -g $(ITCLDIR)\generic\itcl.h ITCL_VERSION] == 35
39 !elseif [nmakehlp -g $(ITCLDIR)\generic\itcl.h ITCL_VERSION] == 0
41 Can't get version string from ..\generic\itcl.h
44 ITCL_VERSION = $(ITCL_DOTVERSION:.=)
46 !if [nmakehlp -g ..\generic\itk.h ITK_VERSION] == 33
48 !elseif [nmakehlp -g ..\generic\itk.h ITK_VERSION] == 34
50 !elseif [nmakehlp -g ..\generic\itk.h ITK_VERSION] == 35
52 !elseif [nmakehlp -g ..\generic\itk.h ITK_VERSION] == 0
54 Can't get version string from ..\generic\itk.h
57 ITK_VERSION = $(ITK_DOTVERSION:.=)
62 STUBPREFIX = $(PROJECT)stub
64 PKGINDEX = "$(TMP_DIR)\pkgIndex.tcl"
66 ITCLLIBNAME = itcl$(ITCL_VERSION)$(SUFX).$(EXT)
67 ITCLLIB = "$(ITCLDIR)\win\$(OUT_DIR)\$(ITCLLIBNAME)"
68 ITKIMPLIB = "$(OUT_DIR)\$(PROJECT)$(ITK_VERSION)$(SUFX).lib"
69 ITKSTUBLIBNAME = $(STUBPREFIX)$(ITK_VERSION).lib
70 ITKSTUBLIB = "$(OUT_DIR)\$(ITKSTUBLIBNAME)"
73 ITKLIBNAME = $(PROJECT)$(ITK_VERSION)$(SUFX).$(EXT)
74 ITCLIMPLIBNAME = itcl$(ITCL_VERSION)$(SUFX).$(EXT)
76 ITKLIBNAME = $(PROJECT)$(ITK_VERSION)80$(SUFX).$(EXT)
77 ITCLIMPLIBNAME = itcl$(ITCL_VERSION)80$(SUFX).lib
79 ITKLIB = "$(OUT_DIR)\$(ITKLIBNAME)"
80 ITCLIMPLIB = "$(ITCLDIR)\win\Release\$(ITCLIMPLIBNAME)"
84 TKSTUBLIB = "$(TCLDIR)\lib\tkstub$(TCL_VERSION).lib"
85 TKIMPLIB = "$(TCLDIR)\lib\tk$(TCL_VERSION)$(DBGX).lib"
86 WISH = "$(TCLDIR)\bin\wish$(TCL_VERSION)$(DBGX).exe"
90 TKSTUBLIB = "$(TKDIR)\win\Release\tkstub$(TCL_VERSION).lib"
91 TKIMPLIB = "$(TKDIR)\win\$(OUT_DIR)\tk$(TCL_VERSION)$(DBGX).lib"
92 WISH = "$(TKDIR)\win\$(OUT_DIR)\wish$(TCL_VERSION)$(DBGX).exe"
93 TCL_LIBRARY = "$(TCLDIR)\library"
94 TK_LIBRARY = "$(TKDIR)\library"
96 ITCL_LIBRARY = "$(ITCLDIR:\=/)/library"
97 ITK_LIBRARY = "$(ROOT)/library
99 ITCLSTUBLIBNAME = itclstub$(ITCL_VERSION).lib
100 ITCLSTUBLIB = "$(ITCLDIR)\win\Release\$(ITCLSTUBLIBNAME)"
103 !if !$(TCL_DOES_STUBS)
104 TCLSTUBLIB = $(TCLIMPLIB)
105 TKSTUBLIB = $(TKIMPLIB)
106 ITCLSTUBLIB = $(ITCLIMPLIB)
110 BIN_INSTALL_DIR = $(_INSTALLDIR)\bin
111 DOC_INSTALL_DIR = $(_INSTALLDIR)\doc
112 LIB_INSTALL_DIR = $(_INSTALLDIR)\lib
113 SCRIPT_INSTALL_DIR = $(_INSTALLDIR)\lib\itk$(ITK_DOTVERSION)
114 INCLUDE_INSTALL_DIR = $(_INSTALLDIR)\include
117 $(TMP_DIR)\itk_archetype.obj \
118 $(TMP_DIR)\itk_cmds.obj \
119 $(TMP_DIR)\itk_option.obj \
120 $(TMP_DIR)\itk_util.obj \
122 $(TMP_DIR)\dllEntryPoint.obj \
125 !if $(TCL_DOES_STUBS)
126 $(TMP_DIR)\itkStubInit.obj
130 !if $(TCL_DOES_STUBS)
131 $(TMP_DIR)\itkStubLib.obj
134 GENERICDIR = $(ROOT)\generic
137 RCDIR = $(ROOT)\win\rc
138 TOOLSDIR = ..\..\tools
140 #---------------------------------------------------------------------
142 #---------------------------------------------------------------------
145 ldebug = -debug:full -debugtype:cv
147 ldebug = -release -opt:ref -opt:icf,3
150 # declarations common to all linker options
151 lflags = -nologo -machine:$(MACHINE) $(ldebug)
154 lflags = $(lflags) -profile
157 !if $(ALIGN98_HACK) && !$(STATIC_BUILD)
158 # align sections for PE size savings.
159 lflags = $(lflags) -opt:nowin98
160 !else if !$(ALIGN98_HACK) && $(STATIC_BUILD)
161 # align sections for speed in loading by choosing the virtual page size.
162 lflags = $(lflags) -align:4096
166 lflags = $(lflags) -ws:aggressive
169 ITK_LFLAGS = $(lflags) -subsystem:windows -dll
170 ITK_LLIBS = $(TCLSTUBLIB) $(TKSTUBLIB) $(ITCLSTUBLIB)
172 !if exist("$(TCLDIR)\win\coffbase.txt")
173 ITK_DLLBASE = -base:@$(TCLDIR)\win\coffbase.txt,itk
178 #---------------------------------------------------------------------
180 #---------------------------------------------------------------------
183 !if "$(MACHINE)" == "IA64"
189 # This cranks the optimization level up to max.
193 # declarations common to all compiler options
194 cflags = -nologo -c -W3 -YX -Fp$(TMP_DIR)^\
196 !if $(PENT_0F_ERRATA)
197 cflags = $(cflags) -QI0f
201 cflags = $(cflags) -QIA64_Bx
211 TCL_INCLUDES = -I"$(TCLDIR)\include"
214 TCL_INCLUDES = -I"$(TCLDIR)\generic" -I"$(TCLDIR)\win"
215 TK_INCLUDES = -I"$(TKDIR)\generic" -I"$(TKDIR)\xlib"
218 ITK_INCLUDES = -I$(WINDIR) -I$(GENERICDIR)
219 ITCL_INCLUDES = -I"$(ITCLDIR)\generic"
220 ITK_DEFINES = -DBUILD_itk -DTCL_THREADS=1
221 ITK_EXE_CFLAGS = $(cdebug) $(cflags) $(crt) $(ITCL_INCLUDES) $(ITK_INCLUDES) \
222 $(TCL_INCLUDES) $(TK_INCLUDES) $(ITK_DEFINES)
224 ### By convention, static builds do not use Stubs. This is just a practice,
225 ### not a technical limitation.
227 ITK_CFLAGS = $(ITK_EXE_CFLAGS) -DSTATIC_BUILD
228 !elseif $(TCL_DOES_STUBS)
229 ITK_CFLAGS = $(ITK_EXE_CFLAGS) -DUSE_TCL_STUBS -DUSE_TK_STUBS -DUSE_ITCL_STUBS
231 ITK_CFLAGS = $(ITK_EXE_CFLAGS)
234 #---------------------------------------------------------------------
235 # Project specific targets
236 #---------------------------------------------------------------------
238 all : setup $(ITKLIB) $(ITKSTUBLIB)
239 release : setup $(ITKLIB) $(ITKSTUBLIB)
240 install : install-binaries install-docs
244 @echo test target not supported for a static library.
246 test : setup $(ITKLIB) $(ITKSTUBLIB)
247 set TCL_LIBRARY=$(TCL_LIBRARY)
248 set TK_LIBRARY=$(TK_LIBRARY)
249 set ITCL_LIBRARY=$(ITCL_LIBRARY)
250 set ITK_LIBRARY=$(ITK_LIBRARY)
251 $(TCLSH) ..\tests\all.tcl $(TESTFLAGS) -loadfile <<
252 load [file normalize $(ITCLLIB:\=/)] Itcl
253 load [file normalize $(ITKLIB:\=/)] Itk
258 @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
259 @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
261 $(ITKLIB): $(ITKOBJS)
263 $(lib32) -nologo -machine:$(MACHINE) -out:$@ @<<
265 $(link32) $(ITK_LFLAGS) $(ITK_DLLBASE) -out:$@ $(ITK_LLIBS) @<<
271 !if $(TCL_DOES_STUBS)
272 $(ITKSTUBLIB) : $(ITKSTUBOBJS)
273 $(lib32) -nologo -out:$@ $(ITKSTUBOBJS)
277 if not exist "$(_INSTALLDIR)" mkdir "$(_INSTALLDIR)"
278 if not exist "$(BIN_INSTALL_DIR)" mkdir "$(BIN_INSTALL_DIR)"
279 if not exist "$(LIB_INSTALL_DIR)" mkdir "$(LIB_INSTALL_DIR)"
280 if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
281 if not exist "$(INCLUDE_INSTALL_DIR)" mkdir "$(INCLUDE_INSTALL_DIR)"
282 copy $(ITKLIB) "$(SCRIPT_INSTALL_DIR)"
283 !if $(ITKSTUBLIB) != ""
284 copy $(ITKSTUBLIB) "$(LIB_INSTALL_DIR)"
286 copy $(ROOT)\generic\itk.h "$(INCLUDE_INSTALL_DIR)"
287 copy $(ROOT)\generic\itkDecls.h "$(INCLUDE_INSTALL_DIR)"
288 copy $(ROOT)\library\*.* "$(SCRIPT_INSTALL_DIR)"
289 echo if {[package vsatisfies 8.0 [package provide Tcl]]} {\
290 > "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
291 echo ^ ^ ^ ^ set add 80>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
292 echo } else {>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
293 echo ^ ^ ^ ^ set add {}>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
294 echo }>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
295 echo if {[info exists ::tcl_platform(debug)] ^&^&\
296 $$::tcl_platform(debug) ^&^& \>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
297 echo ^ ^ ^ ^ ^ ^ ^ ^ [file exists [file join $$dir\
298 $(PROJECT)$(ITK_VERSION)$${add}g.dll]]}\
299 {>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
300 echo ^ ^ ^ ^ package ifneeded Itk $(ITK_DOTVERSION) [list load\
301 [file join $$dir $(PROJECT)$(ITK_VERSION)$${add}g.dll]\
302 Itk]>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
303 echo } else {>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
304 echo ^ ^ ^ ^ package ifneeded Itk $(ITK_DOTVERSION) [list load\
305 [file join $$dir $(PROJECT)$(ITK_VERSION)$${add}.dll]\
306 Itk]>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
307 echo }>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
308 echo unset add>> "$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
311 #---------------------------------------------------------------------
312 # Regenerate the stubs files.
313 #---------------------------------------------------------------------
316 # Only from the sources of Tcl does genStubs.tcl exist.
318 $(TCLSH) $(TOOLSDIR)\genStubs.tcl $(GENERICDIR) \
319 $(GENERICDIR)\itk.decls
322 @echo ERROR: Can't rebuild stubs tables without the Tcl source distribution
325 #---------------------------------------------------------------------
326 # Special case object file targets
327 #---------------------------------------------------------------------
329 # The following object is part of the stub library and should not
330 # be built as DLL objects but none of the symbols should be exported
332 $(TMP_DIR)\itkStubLib.obj : $(GENERICDIR)\itkStubLib.c
333 $(cc32) -DSTATIC_BUILD $(ITK_EXE_CFLAGS) -Zl -Fo$@ $?
335 #---------------------------------------------------------------------
337 #---------------------------------------------------------------------
339 {$(WINDIR)}.c{$(TMP_DIR)}.obj ::
340 $(cc32) $(ITK_CFLAGS) -Fo$(TMP_DIR)\ @<<
344 {$(GENERICDIR)}.c{$(TMP_DIR)}.obj ::
345 $(cc32) $(ITK_CFLAGS) -Fo$(TMP_DIR)\ @<<
349 {$(RCDIR)}.rc{$(TMP_DIR)}.res :
350 $(rc32) -fo $@ -DDEBUG=$(DEBUG) $(ITK_INCLUDES) $(TCL_INCLUDES) $(ITCL_INCLUDES) $(ITK_DEFINES) $<
352 #---------------------------------------------------------------------
353 # Generate the windows help files.
354 #---------------------------------------------------------------------
356 HLPBASE = $(PROJECT)$(ITK_VERSION)
357 HELPFILE = $(OUT_DIR)\$(HLPBASE).hlp
358 HELPCNT = $(OUT_DIR)\$(HLPBASE).cnt
359 DOCTMP_DIR = $(OUT_DIR)\$(PROJECT)_docs
360 HELPRTF = $(DOCTMP_DIR)\$(PROJECT).rtf
361 MAN2HELP = $(DOCTMP_DIR)\man2help.tcl
362 MAN2HELP2 = $(DOCTMP_DIR)\man2help2.tcl
363 INDEX = $(DOCTMP_DIR)\index.tcl
364 BMP = $(DOCTMP_DIR)\toaster.bmp
365 BMP_NOPATH = toaster.bmp
366 MAN2TCL = $(DOCTMP_DIR)\man2tcl.exe
368 winhelp: docsetup $(HELPFILE)
371 @if not exist $(DOCTMP_DIR)\nul mkdir $(DOCTMP_DIR)
373 $(MAN2HELP) $(MAN2HELP2) $(INDEX): $(TCLTOOLSDIR)\$$(@F)
374 copy $(TCLTOOLSDIR)\$(@F) $(@D)
377 copy $(WINDIR)\$(@F) $(@D)
379 $(HELPFILE): $(HELPRTF) $(BMP)
381 start /wait hcrtf.exe -x <<$(PROJECT).hpj
383 COMPRESS=12 Hall Zeck
384 LCID=0x409 0x0 0x0 ; English (United States)
385 TITLE=[Incr Tk] Reference Manual
394 main="[Incr Tk] Reference Manual",,27648,(r15263976),(r65280)
398 CreateButton(1, "Web", ExecFile("http://www.tcl.tk"))
399 CreateButton(2, "SF", ExecFile("http://sf.net/projects/incrtcl"))
400 CreateButton(3, "Wiki", ExecFile("http://wiki.tcl.tk"))
401 CreateButton(4, "FAQ", ExecFile("http://www.purl.org/NET/Tcl-FAQ/"))
404 copy "$(DOCTMP_DIR)\$(@B).hlp" "$(OUT_DIR)"
405 copy "$(DOCTMP_DIR)\$(@B).cnt" "$(OUT_DIR)"
407 $(MAN2TCL): $(TCLTOOLSDIR)\$$(@B).c
408 $(cc32) -nologo -G4 -ML -O2 -Fo$(@D)\ $(TCLTOOLSDIR)\$(@B).c -link -out:$@
410 $(HELPRTF): $(MAN2TCL) $(MAN2HELP) $(MAN2HELP2) $(INDEX)
411 $(TCLSH) $(MAN2HELP) -bitmap $(BMP_NOPATH) $(PROJECT) $(ITK_VERSION) $(DOCDIR:\=/)
414 !if exist($(HELPFILE))
415 @xcopy /i /y "$(HELPFILE)" "$(DOC_INSTALL_DIR)\"
416 @xcopy /i /y "$(HELPCNT)" "$(DOC_INSTALL_DIR)\"
418 puts "Installing $(PROJECT)'s helpfile contents into Tcl's ..."
419 set f [open {$(DOC_INSTALL_DIR:\=/)/tcl$(TCL_VERSION).cnt} r]
421 if {[regexp {:Include $(PROJECT)([0-9]{2}).cnt} [gets $$f] dummy ver]} {
422 if {$$ver == $(ITK_VERSION)} {
423 puts "Already installed."
426 # do something here logical to remove (or replace) it.
427 puts "$$ver != $(ITK_VERSION), unfinished code path, die, die!"
433 set f [open {$(DOC_INSTALL_DIR:\=/)/tcl$(TCL_VERSION).cnt} a]
434 puts $$f {:Include $(HLPBASE).cnt}
437 start /wait winhlp32 -g $(DOC_INSTALL_DIR)\tcl$(TCL_VERSION).hlp
440 #---------------------------------------------------------------------
442 #---------------------------------------------------------------------
445 -del $(TMP_DIR)\*.pch
446 -del $(TMP_DIR)\*.obj
447 -del $(TMP_DIR)\*.res
450 -del $(OUT_DIR)\*.exp
451 -del $(OUT_DIR)\*.lib
452 -del $(OUT_DIR)\*.dll