@@ -13,20 +13,24 @@ # # Copyright (c) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Ajuba Solutions. # Copyright (c) 2001 ActiveState Corporation. # Copyright (c) 2001-2002 David Gravereaux. -# Copyright (c) 2003 Pat Thoyts +# Copyright (c) 2003-2006 Pat Thoyts # #------------------------------------------------------------------------- -# RCS: @(#)$Id: makefile.vc,v 1.3 2007/02/28 23:33:41 patthoyts Exp $ +# RCS: @(#)$Id: makefile.vc,v 1.4 2007/09/06 21:01:55 patthoyts Exp $ #------------------------------------------------------------------------- -!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCToolkitInstallDir) +# Check to see we are configured to build with MSVC (MSDEVDIR or MSVCDIR) +# or with the MS Platform SDK (MSSDK). Visual Studio .NET 2003 and 2005 define +# VCINSTALLDIR instead. The MSVC Toolkit release defines yet another. +!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(MSSDK) && !defined(VCINSTALLDIR) && !defined(VCToolkitInstallDir) MSG = ^ -You will need to run vcvars32.bat from Developer Studio, first, to setup^ -the environment. Jump to this line to read the new instructions. +You need to run vcvars32.bat from Developer Studio or setenv.bat from the^ +Platform SDK first to setup the environment. Jump to this line to read^ +the build instructions. !error $(MSG) !endif #------------------------------------------------------------------------------ # HOW TO USE this makefile: @@ -70,11 +74,11 @@ # msvcrt(d). This is useful for static embedding # support. # staticpkg = Effects the static option only to switch # tclshXX.exe to have the dde and reg extension linked # inside it. -# threads = Turns on full multithreading support. +# nothreads = Turns off multithreading support (not recommended) # thrdalloc = Use the thread allocator (shared global free pool). # symbols = Adds symbols for step debugging. # profile = Adds profiling hooks. Map file is assumed. # loimpact = Adds a flag for how NT treats the heap to keep memory # in use, low. This is said to impact alloc performance. @@ -86,15 +90,16 @@ # everything to nothing. # # memdbg = Enables the debugging memory allocator. # compdbg = Enables byte compilation logging. # -# MACHINE=(IX86|IA64|ALPHA) +# MACHINE=(IX86|IA64|ALPHA|AMD64) # Set the machine type used for the compiler, linker, and # resource compiler. This hook is needed to tell the tools # when alternate platforms are requested. IX86 is the default -# when not specified. +# when not specified. If the CPU environment variable has been +# set (ie: recent Platform SDK) then MACHINE is set from CPU. # # TMP_DIR= # OUT_DIR= # Hooks to allow the intermediate and output directories to be # changed. $(OUT_DIR) is assumed to be @@ -152,10 +157,13 @@ # binary here. # #------------------------------------------------------------------------- PROJECT = tls + +# Uncomment the following line if this is a Tk extension. +#PROJECT_REQUIRES_TK=1 !include "rules.vc" DOTVERSION = 1.5.1 VERSION = $(DOTVERSION:.=) STUBPREFIX = $(PROJECT)stub @@ -170,22 +178,27 @@ #------------------------------------------------------------------------- # Locate the OpenSSL library and headers #------------------------------------------------------------------------- !ifndef OPENSSL -OPENSSL = c:\opt +OPENSSL = c:\opt\openssl !endif +!ifndef SSL_INCLUDE_DIR SSL_INCLUDE_DIR = $(OPENSSL)\include +!endif +!ifndef SSL_LIB_DIR SSL_LIB_DIR = $(OPENSSL)\lib +!endif SSL_LIBS =-libpath:"$(SSL_LIB_DIR)" ssleay32s.lib libeay32s.lib SSL_CFLAGS =-DNO_IDEA=1 -DNO_RC5=1 !if !exist("$(SSL_LIB_DIR)\ssleay32s.lib") MSG = ^ +Failed to locate "$(SSL_LIB_DIR)\ssleay32s.lib" You must provide the path to your OpenSSL library.... !error $(MSG) !endif #------------------------------------------------------------------------- @@ -223,67 +236,81 @@ #--------------------------------------------------------------------- !if !$(DEBUG) !if $(OPTIMIZING) ### This cranks the optimization level to maximize speed -cdebug = -O2 -Op -Gs +cdebug = $(OPTIMIZATIONS) !else cdebug = !endif -!else if "$(MACHINE)" == "IA64" +!else if "$(MACHINE)" == "IA64" #|| "$(MACHINE)" == "AMD64" ### Warnings are too many, can't support warnings into errors. -cdebug = -Z7 -Od -GZ +cdebug = -Zi -Od $(DEBUGFLAGS) !else -cdebug = -Z7 -WX -Od -GZ +cdebug = -Zi -WX $(DEBUGFLAGS) !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 +cwarn = -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE +cflags = -nologo -c $(COMPILERFLAGS) $(cwarn) -Fp$(TMP_DIR)^\ + +# Warning level +!if $(FULLWARNINGS) +cflags = $(cflags) -W4 +!else +cflags = $(cflags) -W3 !endif !if $(MSVCRT) -!if $(DEBUG) +!if $(DEBUG) && !$(UNCHECKED) crt = -MDd !else crt = -MD !endif !else -!if $(DEBUG) +!if $(DEBUG) && !$(UNCHECKED) crt = -MTd !else crt = -MT !endif !endif + +!if !$(STATIC_BUILD) +cflags = $(cflags) -DUSE_TCL_STUBS +!if defined(TKSTUBLIB) +cflags = $(cflags) -DUSE_TK_STUBS +!endif +!endif INCLUDES = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)" \ -I"$(SSL_INCLUDE_DIR)" -BASE_CLFAGS = $(cflags) $(cdebug) $(crt) $(INCLUDES) +BASE_CFLAGS = $(cflags) $(cdebug) $(crt) $(INCLUDES) CON_CFLAGS = $(cflags) $(cdebug) $(crt) -DCONSOLE -TCL_CFLAGS = -DUSE_TCL_STUBS -DBUILD_$(PROJECT) $(SSL_CFLAGS) \ +TCL_CFLAGS = -DPACKAGE_NAME="\"$(PROJECT)\"" \ -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \ - -DPACKAGE_NAME="\"$(PROJECT)\"" \ - $(BASE_CLFAGS) $(OPTDEFINES) + $(SSL_CFLAGS) \ + $(BASE_CFLAGS) $(OPTDEFINES) #--------------------------------------------------------------------- # Link flags #--------------------------------------------------------------------- !if $(DEBUG) ldebug = -debug:full -debugtype:cv +!if $(MSVCRT) +ldebug = $(ldebug) -nodefaultlib:msvcrt +!endif !else ldebug = -release -opt:ref -opt:icf,3 !endif ### Declarations common to all linker options -lflags = -nologo -machine:$(MACHINE) $(ldebug) +lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug) + +!if $(FULLWARNINGS) +lflags = $(lflags) -warn:3 +!endif !if $(PROFILE) lflags = $(lflags) -profile !endif @@ -300,11 +327,24 @@ !endif dlllflags = $(lflags) -dll conlflags = $(lflags) -subsystem:console guilflags = $(lflags) -subsystem:windows -baselibs = $(TCLSTUBLIB) $(SSL_LIBS) ws2_32.lib user32.lib gdi32.lib advapi32.lib +!if !$(STATIC_BUILD) +baselibs = $(TCLSTUBLIB) +!if defined(TKSTUBLIB) +baselibs = $(baselibs) $(TKSTUBLIB) +!endif +!endif + +# Avoid 'unresolved external symbol __security_cookie' errors. +# c.f. http://support.microsoft.com/?id=894573 +!if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64" +baselibs = $(baselibs) bufferoverflowU.lib +!endif + +baselibs = $(baselibs) $(SSL_LIBS) ws2_32.lib user32.lib gdi32.lib advapi32.lib #--------------------------------------------------------------------- # TclTest flags #--------------------------------------------------------------------- @@ -326,11 +366,11 @@ !if "$(OS)" == "Windows_NT" || "$(MSVCDIR)" == "IDE" test: setup $(PROJECT) set TCL_LIBRARY=$(ROOT)/library $(TCLSH) << load $(PRJLIB:\=/) -source [file normalize [file join $(LIBDIR) tls.tcl]] +source [file join $(LIBDIR) tls.tcl] cd "$(ROOT)/tests" set argv "$(TESTFLAGS)" source all.tcl << !else @@ -351,14 +391,21 @@ @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR) @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR) # See /win/coffbase.txt for extension base addresses. $(PRJLIB): $(DLLOBJS) +!if $(STATIC_BUILD) + $(lib32) -nologo -out:$@ @<< +$** +<< +!else $(link32) $(dlllflags) -base:0x10780000 -out:$@ $(baselibs) @<< $** << + $(_VC_MANIFEST_EMBED_DLL) -@del $*.exp +!endif $(PRJSTUBLIB): $(PRJSTUBOBJS) $(lib32) -nologo -out:$@ $(PRJSTUBOBJS) #--------------------------------------------------------------------- @@ -380,13 +427,13 @@ $< << {$(WINDIR)}.rc{$(TMP_DIR)}.res: $(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \ - -DCOMMAVERSION=$(DOTVERSION:.=,),0 \ - -DDOTVERSION=\"$(DOTVERSION)\" \ - -DVERSION=\"$(VERSION)$(SUFX)\" \ + -DCOMMAVERSION=$(DOTVERSION:.=,),0 \ + -DDOTVERSION=\"$(DOTVERSION)\" \ + -DVERSION=\"$(VERSION)$(SUFX)\" \ !if $(DEBUG) -d DEBUG \ !endif !if $(TCL_THREADS) -d TCL_THREADS \ @@ -396,10 +443,22 @@ !endif $< .SUFFIXES: .SUFFIXES:.c .rc + +#------------------------------------------------------------------------- +# Explicit dependency rules +# +#------------------------------------------------------------------------- + +$(OUT_DIR)\pkgIndex.tcl: $(ROOT)\pkgIndex.tcl.in + nmakehlp -s << $** > $@ +@PACKAGE_VERSION@ $(DOTVERSION) +@PACKAGE_NAME@ $(PROJECT) +@PKG_LIB_FILE@ $(PRJLIBNAME) +<< #--------------------------------------------------------------------- # Installation. (EDIT) # # You may need to modify this section to reflect the final distribution @@ -431,12 +490,15 @@ #--------------------------------------------------------------------- clean: @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR) @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc + @if exist $(WINDIR)\vercl.i del $(WINDIR)\vercl.i + @if exist $(WINDIR)\vercl.x del $(WINDIR)\vercl.x + @if exist $(WINDIR)\_junk.pch del $(WINDIR)\_junk.pch realclean: clean @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR) distclean: realclean @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj