|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!ifndef _RULES_VC |
|
_RULES_VC = 1 |
|
|
|
|
|
|
|
|
|
RULES_VERSION_MAJOR = 1 |
|
RULES_VERSION_MINOR = 9 |
|
|
|
|
|
!if "$(PROJECT)" == "" |
|
!error *** Error: Macro PROJECT not defined! Please define it before including rules.vc |
|
!endif |
|
|
|
!if "$(PRJ_PACKAGE_TCLNAME)" == "" |
|
PRJ_PACKAGE_TCLNAME = $(PROJECT) |
|
!endif |
|
|
|
|
|
DOING_TCL = 0 |
|
DOING_TK = 0 |
|
!if "$(PROJECT)" == "tcl" |
|
DOING_TCL = 1 |
|
!elseif "$(PROJECT)" == "tk" |
|
DOING_TK = 1 |
|
!endif |
|
|
|
!ifndef NEED_TK |
|
|
|
!ifdef PROJECT_REQUIRES_TK |
|
NEED_TK = $(PROJECT_REQUIRES_TK) |
|
!else |
|
NEED_TK = 0 |
|
!endif |
|
!endif |
|
|
|
!ifndef NEED_TCL_SOURCE |
|
NEED_TCL_SOURCE = 0 |
|
!endif |
|
|
|
!ifdef NEED_TK_SOURCE |
|
!if $(NEED_TK_SOURCE) |
|
NEED_TK = 1 |
|
!endif |
|
!else |
|
NEED_TK_SOURCE = 0 |
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !defined(MSSDK) && !defined(WINDOWSSDKDIR) |
|
MSG = ^ |
|
Visual C++ compiler environment not initialized. |
|
!error $(MSG) |
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
!if "$(MAKEFILEVC)" == "" |
|
|
|
!if exist("$(PROJECT).vc") |
|
MAKEFILEVC = $(PROJECT).vc |
|
!elseif exist("makefile.vc") |
|
MAKEFILEVC = makefile.vc |
|
!endif |
|
!endif |
|
|
|
!if !exist("$(MAKEFILEVC)") |
|
MSG = ^ |
|
You must run nmake from the directory containing the project makefile.^ |
|
If you are doing that and getting this message, set the MAKEFILEVC^ |
|
macro to the name of the project makefile. |
|
!message WARNING: $(MSG) |
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RMDIR = rmdir /S /Q |
|
CPY = xcopy /i /y >NUL |
|
CPYDIR = xcopy /e /i /y >NUL |
|
COPY = copy /y >NUL |
|
MKDIR = mkdir |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ROOT = $(MAKEDIR)\.. |
|
|
|
|
|
!ifndef COMPATDIR |
|
COMPATDIR = $(ROOT)\compat |
|
!endif |
|
!ifndef DOCDIR |
|
DOCDIR = $(ROOT)\doc |
|
!endif |
|
!ifndef GENERICDIR |
|
GENERICDIR = $(ROOT)\generic |
|
!endif |
|
!ifndef TOOLSDIR |
|
TOOLSDIR = $(ROOT)\tools |
|
!endif |
|
!ifndef TESTDIR |
|
TESTDIR = $(ROOT)\tests |
|
!endif |
|
!ifndef LIBDIR |
|
!if exist("$(ROOT)\library") |
|
LIBDIR = $(ROOT)\library |
|
!else |
|
LIBDIR = $(ROOT)\lib |
|
!endif |
|
!endif |
|
!ifndef DEMODIR |
|
!if exist("$(LIBDIR)\demos") |
|
DEMODIR = $(LIBDIR)\demos |
|
!else |
|
DEMODIR = $(ROOT)\demos |
|
!endif |
|
!endif |
|
|
|
|
|
WIN_DIR = $(ROOT)\win |
|
|
|
!ifndef RCDIR |
|
!if exist("$(WIN_DIR)\rc") |
|
RCDIR = $(WIN_DIR)\rc |
|
!else |
|
RCDIR = $(WIN_DIR) |
|
!endif |
|
!endif |
|
RCDIR = $(RCDIR:/=\) |
|
|
|
|
|
|
|
|
|
!ifdef INSTALLDIR |
|
|
|
_INSTALLDIR = $(INSTALLDIR:/=\) |
|
!else |
|
|
|
_INSTALLDIR = $(HOMEDRIVE)\Tcl |
|
!endif |
|
|
|
!if $(DOING_TCL) |
|
|
|
|
|
|
|
|
|
_TCL_H = ..\generic\tcl.h |
|
|
|
|
|
|
|
!elseif $(DOING_TK) |
|
|
|
|
|
|
|
TCLINSTALL = 0 |
|
!if "$(TCLDIR)" == "" |
|
!if [echo TCLDIR = \> nmakehlp.out] \ |
|
|| [nmakehlp -L generic\tcl.h >> nmakehlp.out] |
|
!error *** Could not locate Tcl source directory. |
|
!endif |
|
!include nmakehlp.out |
|
!endif |
|
|
|
_TCLDIR = $(TCLDIR:/=\) |
|
_TCL_H = $(_TCLDIR)\generic\tcl.h |
|
!if !exist("$(_TCL_H)") |
|
!error Could not locate tcl.h. Please set the TCLDIR macro to point to the Tcl *source* directory. |
|
!endif |
|
|
|
_TK_H = ..\generic\tk.h |
|
|
|
|
|
|
|
!else |
|
|
|
|
|
|
|
|
|
|
|
!if "$(TCLDIR)" != "" |
|
|
|
_TCLDIR = $(TCLDIR:/=\) |
|
!if exist("$(_TCLDIR)\include\tcl.h") |
|
TCLINSTALL = 1 |
|
_TCL_H = $(_TCLDIR)\include\tcl.h |
|
!elseif exist("$(_TCLDIR)\generic\tcl.h") |
|
TCLINSTALL = 0 |
|
_TCL_H = $(_TCLDIR)\generic\tcl.h |
|
!endif |
|
|
|
!else |
|
|
|
|
|
|
|
|
|
!if exist("$(_INSTALLDIR)\include\tcl.h") && !$(NEED_TCL_SOURCE) |
|
|
|
TCLINSTALL = 1 |
|
TCLDIR = $(_INSTALLDIR)\.. |
|
|
|
|
|
_TCLDIR = $(_INSTALLDIR)\.. |
|
_TCL_H = $(_TCLDIR)\include\tcl.h |
|
|
|
!else |
|
|
|
!if [echo _TCLDIR = \> nmakehlp.out] \ |
|
|| [nmakehlp -L generic\tcl.h >> nmakehlp.out] |
|
!error *** Could not locate Tcl source directory. |
|
!endif |
|
!include nmakehlp.out |
|
TCLINSTALL = 0 |
|
TCLDIR = $(_TCLDIR) |
|
_TCL_H = $(_TCLDIR)\generic\tcl.h |
|
|
|
!endif |
|
|
|
!endif |
|
|
|
!ifndef _TCL_H |
|
MSG =^ |
|
Failed to find tcl.h. The TCLDIR macro is set incorrectly or is not set and default path does not contain tcl.h. |
|
!error $(MSG) |
|
!endif |
|
|
|
|
|
!if $(NEED_TK) |
|
|
|
!if "$(TKDIR)" != "" |
|
|
|
_TKDIR = $(TKDIR:/=\) |
|
!if exist("$(_TKDIR)\include\tk.h") |
|
TKINSTALL = 1 |
|
_TK_H = $(_TKDIR)\include\tk.h |
|
!elseif exist("$(_TKDIR)\generic\tk.h") |
|
TKINSTALL = 0 |
|
_TK_H = $(_TKDIR)\generic\tk.h |
|
!endif |
|
|
|
!else |
|
|
|
|
|
|
|
|
|
!if exist("$(_INSTALLDIR)\include\tk.h") && !$(NEED_TK_SOURCE) |
|
|
|
TKINSTALL = 1 |
|
|
|
|
|
_TKDIR = $(_INSTALLDIR)\.. |
|
_TK_H = $(_TKDIR)\include\tk.h |
|
TKDIR = $(_TKDIR) |
|
|
|
!else |
|
|
|
!if [echo _TKDIR = \> nmakehlp.out] \ |
|
|| [nmakehlp -L generic\tk.h >> nmakehlp.out] |
|
!error *** Could not locate Tk source directory. |
|
!endif |
|
!include nmakehlp.out |
|
TKINSTALL = 0 |
|
TKDIR = $(_TKDIR) |
|
_TK_H = $(_TKDIR)\generic\tk.h |
|
|
|
!endif |
|
|
|
!endif |
|
|
|
!ifndef _TK_H |
|
MSG =^ |
|
Failed to find tk.h. The TKDIR macro is set incorrectly or is not set and default path does not contain tk.h. |
|
!error $(MSG) |
|
!endif |
|
|
|
!endif |
|
|
|
!if $(NEED_TCL_SOURCE) && $(TCLINSTALL) |
|
MSG = ^ |
|
*** Warning: This extension requires the source distribution of Tcl.^ |
|
*** Please set the TCLDIR macro to point to the Tcl sources. |
|
!error $(MSG) |
|
!endif |
|
|
|
!if $(NEED_TK_SOURCE) |
|
!if $(TKINSTALL) |
|
MSG = ^ |
|
*** Warning: This extension requires the source distribution of Tk.^ |
|
*** Please set the TKDIR macro to point to the Tk sources. |
|
!error $(MSG) |
|
!endif |
|
!endif |
|
|
|
|
|
|
|
|
|
!if exist("$(_INSTALLDIR)\include\tcl.h") |
|
_INSTALLDIR=$(_INSTALLDIR)\lib |
|
!endif |
|
|
|
|
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cc32 = $(CC) |
|
link32 = link |
|
lib32 = lib |
|
rc32 = $(RC) |
|
|
|
|
|
|
|
|
|
|
|
|
|
_HASH=^ |
|
_VC_MANIFEST_EMBED_EXE= |
|
_VC_MANIFEST_EMBED_DLL= |
|
VCVER=0 |
|
!if ![echo VCVERSION=_MSC_VER > vercl.x] \ |
|
&& ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \ |
|
&& ![echo ARCH=IX86 >> vercl.x] \ |
|
&& ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \ |
|
&& ![echo ARCH=AMD64 >> vercl.x] \ |
|
&& ![echo $(_HASH)endif >> vercl.x] \ |
|
&& ![$(cc32) -nologo -TC -P vercl.x 2>NUL] |
|
!include vercl.i |
|
!if $(VCVERSION) < 1900 |
|
!if ![echo VCVER= ^\> vercl.vc] \ |
|
&& ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc] |
|
!include vercl.vc |
|
!endif |
|
!else |
|
|
|
|
|
VCVER = $(VCVERSION) |
|
!endif |
|
!endif |
|
|
|
!if ![del 2>NUL /q/f vercl.x vercl.i vercl.vc] |
|
!endif |
|
|
|
|
|
|
|
!ifdef MACHINE |
|
!if "$(MACHINE)" == "x86" |
|
!undef MACHINE |
|
MACHINE = IX86 |
|
!elseif "$(MACHINE)" == "x64" |
|
!undef MACHINE |
|
MACHINE = AMD64 |
|
!endif |
|
!if "$(MACHINE)" != "$(ARCH)" |
|
!error Specified MACHINE macro $(MACHINE) does not match detected target architecture $(ARCH). |
|
!endif |
|
!else |
|
MACHINE=$(ARCH) |
|
!endif |
|
|
|
|
|
|
|
|
|
!if "$(MACHINE)" == "AMD64" |
|
PLATFORM_IDENTIFY = win32-x86_64 |
|
!else |
|
PLATFORM_IDENTIFY = win32-ix86 |
|
!endif |
|
|
|
|
|
|
|
!ifndef MULTIPLATFORM_INSTALL |
|
MULTIPLATFORM_INSTALL = 0 |
|
!endif |
|
|
|
|
|
|
|
|
|
!if ![reg query HKLM\Hardware\Description\System\CentralProcessor\0 /v Identifier | findstr /i x86] |
|
NATIVE_ARCH=IX86 |
|
!else |
|
NATIVE_ARCH=AMD64 |
|
!endif |
|
|
|
|
|
!if $(VCVERSION) >= 1400 |
|
_VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1 |
|
_VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2 |
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!ifndef NMAKEHLPC |
|
|
|
NMAKEHLPC = nmakehlp.c |
|
|
|
!if !$(DOING_TCL) |
|
!if $(TCLINSTALL) |
|
!if exist("$(_TCLDIR)\lib\nmake\nmakehlp.c") |
|
NMAKEHLPC = $(_TCLDIR)\lib\nmake\nmakehlp.c |
|
!endif |
|
!else |
|
!if exist("$(_TCLDIR)\win\nmakehlp.c") |
|
NMAKEHLPC = $(_TCLDIR)\win\nmakehlp.c |
|
!endif |
|
!endif |
|
!endif |
|
|
|
!endif |
|
|
|
|
|
|
|
!if [$(cc32) -nologo "$(NMAKEHLPC)" -link -subsystem:console > nul] |
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!if [nmakehlp -c -Op] |
|
FPOPTS = -Op |
|
!endif |
|
|
|
|
|
!if [nmakehlp -c -fp:strict] |
|
FPOPTS = $(FPOPTS) -fp:strict |
|
!endif |
|
|
|
!if "$(MACHINE)" == "IX86" |
|
|
|
!if [nmakehlp -c -QI0f] |
|
!message *** Compiler has 'Pentium 0x0f fix' |
|
FPOPTS = $(FPOPTS) -QI0f |
|
!else |
|
!message *** Compiler does not have 'Pentium 0x0f fix' |
|
!endif |
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OPTIMIZATIONS = $(FPOPTS) |
|
|
|
!if [nmakehlp -c -O2] |
|
OPTIMIZING = 1 |
|
OPTIMIZATIONS = $(OPTIMIZATIONS) -O2 |
|
!else |
|
|
|
!message *** Compiler does not have 'Optimizations' |
|
OPTIMIZING = 0 |
|
!endif |
|
|
|
|
|
!if [nmakehlp -c -GS] |
|
OPTIMIZATIONS = $(OPTIMIZATIONS) -GS |
|
!endif |
|
|
|
|
|
|
|
|
|
!if [nmakehlp -c -GL] |
|
OPTIMIZATIONS = $(OPTIMIZATIONS) -GL |
|
CC_GL_OPT_ENABLED = 1 |
|
!else |
|
|
|
!if [nmakehlp -c -YX] |
|
OPTIMIZATIONS = $(OPTIMIZATIONS) -YX |
|
!endif |
|
!endif |
|
|
|
DEBUGFLAGS = $(FPOPTS) |
|
|
|
|
|
|
|
!if [nmakehlp -c -RTC1] |
|
DEBUGFLAGS = $(DEBUGFLAGS) -RTC1 |
|
!elseif [nmakehlp -c -GZ] |
|
DEBUGFLAGS = $(DEBUGFLAGS) -GZ |
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!ifndef LINKER_TESTFLAGS |
|
LINKER_TESTFLAGS = /DLL /NOENTRY /OUT:nmakehlp.out |
|
!endif |
|
|
|
LINKERFLAGS = |
|
|
|
|
|
!ifdef CC_GL_OPT_ENABLED |
|
!if [nmakehlp -l -ltcg $(LINKER_TESTFLAGS)] |
|
LINKERFLAGS = $(LINKERFLAGS) -ltcg |
|
!endif |
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!if [echo REM = This file is generated from rules.vc > versions.vc] |
|
!endif |
|
!if [echo TCL_MAJOR_VERSION = \>> versions.vc] \ |
|
&& [nmakehlp -V "$(_TCL_H)" TCL_MAJOR_VERSION >> versions.vc] |
|
!endif |
|
!if [echo TCL_MINOR_VERSION = \>> versions.vc] \ |
|
&& [nmakehlp -V "$(_TCL_H)" TCL_MINOR_VERSION >> versions.vc] |
|
!endif |
|
!if [echo TCL_RELEASE_SERIAL = \>> versions.vc] \ |
|
&& [nmakehlp -V "$(_TCL_H)" TCL_RELEASE_SERIAL >> versions.vc] |
|
!endif |
|
!if [echo TCL_PATCH_LEVEL = \>> versions.vc] \ |
|
&& [nmakehlp -V "$(_TCL_H)" TCL_PATCH_LEVEL >> versions.vc] |
|
!endif |
|
|
|
!if defined(_TK_H) |
|
!if [echo TK_MAJOR_VERSION = \>> versions.vc] \ |
|
&& [nmakehlp -V $(_TK_H) TK_MAJOR_VERSION >> versions.vc] |
|
!endif |
|
!if [echo TK_MINOR_VERSION = \>> versions.vc] \ |
|
&& [nmakehlp -V $(_TK_H) TK_MINOR_VERSION >> versions.vc] |
|
!endif |
|
!if [echo TK_RELEASE_SERIAL = \>> versions.vc] \ |
|
&& [nmakehlp -V "$(_TK_H)" TK_RELEASE_SERIAL >> versions.vc] |
|
!endif |
|
!if [echo TK_PATCH_LEVEL = \>> versions.vc] \ |
|
&& [nmakehlp -V $(_TK_H) TK_PATCH_LEVEL >> versions.vc] |
|
!endif |
|
!endif |
|
|
|
!include versions.vc |
|
|
|
TCL_VERSION = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION) |
|
TCL_DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION) |
|
!if [nmakehlp -f $(TCL_PATCH_LEVEL) "a"] |
|
TCL_PATCH_LETTER = a |
|
!elseif [nmakehlp -f $(TCL_PATCH_LEVEL) "b"] |
|
TCL_PATCH_LETTER = b |
|
!else |
|
TCL_PATCH_LETTER = . |
|
!endif |
|
|
|
!if defined(_TK_H) |
|
|
|
TK_VERSION = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION) |
|
TK_DOTVERSION = $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION) |
|
!if [nmakehlp -f $(TK_PATCH_LEVEL) "a"] |
|
TK_PATCH_LETTER = a |
|
!elseif [nmakehlp -f $(TK_PATCH_LEVEL) "b"] |
|
TK_PATCH_LETTER = b |
|
!else |
|
TK_PATCH_LETTER = . |
|
!endif |
|
|
|
!endif |
|
|
|
|
|
!if $(DOING_TCL) |
|
|
|
DOTVERSION = $(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION) |
|
VERSION = $(TCL_VERSION) |
|
|
|
!elseif $(DOING_TK) |
|
|
|
DOTVERSION = $(TK_DOTVERSION) |
|
VERSION = $(TK_VERSION) |
|
|
|
!else |
|
|
|
|
|
|
|
!ifndef DOTVERSION |
|
!if [echo DOTVERSION = \> versions.vc] \ |
|
|| [nmakehlp -V $(ROOT)\configure.in ^[$(PROJECT)^] >> versions.vc] |
|
!if [echo DOTVERSION = \> versions.vc] \ |
|
|| [nmakehlp -V $(ROOT)\configure.ac ^[$(PROJECT)^] >> versions.vc] |
|
!error *** Could not figure out extension version. Please define DOTVERSION in parent makefile before including rules.vc. |
|
!endif |
|
!endif |
|
!include versions.vc |
|
!endif |
|
VERSION = $(DOTVERSION:.=) |
|
|
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
DOTSEPARATED=$(DOTVERSION:a=.) |
|
DOTSEPARATED=$(DOTSEPARATED:b=.) |
|
!if [echo RCCOMMAVERSION = \> versions.vc] \ |
|
|| [for /f "tokens=1,2,3,4,5* delims=." %a in ("$(DOTSEPARATED).0.0.0.0") do echo %a,%b,%c,%d >> versions.vc] |
|
!error *** Could not generate RCCOMMAVERSION *** |
|
!endif |
|
!include versions.vc |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
STATIC_BUILD = 0 |
|
TCL_THREADS = 1 |
|
DEBUG = 0 |
|
SYMBOLS = 0 |
|
PROFILE = 0 |
|
PGO = 0 |
|
MSVCRT = 1 |
|
TCL_USE_STATIC_PACKAGES = 0 |
|
USE_THREAD_ALLOC = 1 |
|
UNCHECKED = 0 |
|
CONFIG_CHECK = 1 |
|
!if $(DOING_TCL) |
|
USE_STUBS = 0 |
|
!else |
|
USE_STUBS = 1 |
|
!endif |
|
|
|
|
|
|
|
!if "$(OPTS)" != "" && ![nmakehlp -f "$(OPTS)" "none"] |
|
|
|
|
|
|
|
!if [nmakehlp -f $(OPTS) "static"] |
|
!message *** Doing static |
|
STATIC_BUILD = 1 |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "nostubs"] |
|
!message *** Not using stubs |
|
USE_STUBS = 0 |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "nomsvcrt"] |
|
!message *** Doing nomsvcrt |
|
MSVCRT = 0 |
|
!else |
|
!if [nmakehlp -f $(OPTS) "msvcrt"] |
|
!message *** Doing msvcrt |
|
!else |
|
!if $(TCL_MAJOR_VERSION) == 8 && $(TCL_MINOR_VERSION) < 7 && $(STATIC_BUILD) |
|
MSVCRT = 0 |
|
!endif |
|
!endif |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD) |
|
!message *** Doing staticpkg |
|
TCL_USE_STATIC_PACKAGES = 1 |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "nothreads"] |
|
!message *** Compile explicitly for non-threaded tcl |
|
TCL_THREADS = 0 |
|
USE_THREAD_ALLOC= 0 |
|
!endif |
|
|
|
!if $(TCL_MAJOR_VERSION) == 8 |
|
!if [nmakehlp -f $(OPTS) "time64bit"] |
|
!message *** Force 64-bit time_t |
|
_USE_64BIT_TIME_T = 1 |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "utfmax"] |
|
!message *** Force allowing 4-byte UTF-8 sequences internally |
|
TCL_UTF_MAX = 4 |
|
!endif |
|
!endif |
|
|
|
|
|
|
|
!if [nmakehlp -f $(OPTS) "symbols"] |
|
!message *** Doing symbols |
|
DEBUG = 1 |
|
!else |
|
DEBUG = 0 |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "pdbs"] |
|
!message *** Doing pdbs |
|
SYMBOLS = 1 |
|
!else |
|
SYMBOLS = 0 |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "profile"] |
|
!message *** Doing profile |
|
PROFILE = 1 |
|
!else |
|
PROFILE = 0 |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "pgi"] |
|
!message *** Doing profile guided optimization instrumentation |
|
PGO = 1 |
|
!elseif [nmakehlp -f $(OPTS) "pgo"] |
|
!message *** Doing profile guided optimization |
|
PGO = 2 |
|
!else |
|
PGO = 0 |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "loimpact"] |
|
!message *** Warning: ignoring option "loimpact" - deprecated on modern Windows. |
|
!endif |
|
|
|
|
|
!if [nmakehlp -f $(OPTS) "thrdalloc"] |
|
!message *** Doing thrdalloc |
|
USE_THREAD_ALLOC = 1 |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "tclalloc"] |
|
USE_THREAD_ALLOC = 0 |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "unchecked"] |
|
!message *** Doing unchecked |
|
UNCHECKED = 1 |
|
!else |
|
UNCHECKED = 0 |
|
!endif |
|
|
|
!if [nmakehlp -f $(OPTS) "noconfigcheck"] |
|
CONFIG_CHECK = 1 |
|
!else |
|
CONFIG_CHECK = 0 |
|
!endif |
|
|
|
!endif |
|
|
|
|
|
|
|
!if $(PGO) > 1 |
|
!if [nmakehlp -l -ltcg:pgoptimize $(LINKER_TESTFLAGS)] |
|
LINKERFLAGS = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize |
|
!else |
|
MSG=^ |
|
This compiler does not support profile guided optimization. |
|
!error $(MSG) |
|
!endif |
|
!elseif $(PGO) > 0 |
|
!if [nmakehlp -l -ltcg:pginstrument $(LINKER_TESTFLAGS)] |
|
LINKERFLAGS = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument |
|
!else |
|
MSG=^ |
|
This compiler does not support profile guided optimization. |
|
!error $(MSG) |
|
!endif |
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TCL_MEM_DEBUG = 0 |
|
TCL_COMPILE_DEBUG = 0 |
|
|
|
!if "$(STATS)" != "" && ![nmakehlp -f "$(STATS)" "none"] |
|
|
|
!if [nmakehlp -f $(STATS) "memdbg"] |
|
!message *** Doing memdbg |
|
TCL_MEM_DEBUG = 1 |
|
!else |
|
TCL_MEM_DEBUG = 0 |
|
!endif |
|
|
|
!if [nmakehlp -f $(STATS) "compdbg"] |
|
!message *** Doing compdbg |
|
TCL_COMPILE_DEBUG = 1 |
|
!else |
|
TCL_COMPILE_DEBUG = 0 |
|
!endif |
|
|
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TCL_NO_DEPRECATED = 0 |
|
WARNINGS = -W3 |
|
|
|
!if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"] |
|
|
|
!if [nmakehlp -f $(CHECKS) "nodep"] |
|
!message *** Doing nodep check |
|
TCL_NO_DEPRECATED = 1 |
|
!endif |
|
|
|
!if [nmakehlp -f $(CHECKS) "fullwarn"] |
|
!message *** Doing full warnings check |
|
WARNINGS = -W4 |
|
!if [nmakehlp -l -warn:3 $(LINKER_TESTFLAGS)] |
|
LINKERFLAGS = $(LINKERFLAGS) -warn:3 |
|
!endif |
|
!endif |
|
|
|
!if [nmakehlp -f $(CHECKS) "64bit"] && [nmakehlp -c -Wp64] |
|
!message *** Doing 64bit portability warnings |
|
WARNINGS = $(WARNINGS) -Wp64 |
|
!endif |
|
|
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SUFX = tsgx |
|
|
|
!if $(DEBUG) |
|
BUILDDIRTOP = Debug |
|
!else |
|
BUILDDIRTOP = Release |
|
!endif |
|
|
|
!if "$(MACHINE)" != "IX86" |
|
BUILDDIRTOP =$(BUILDDIRTOP)_$(MACHINE) |
|
!endif |
|
!if $(VCVER) > 6 |
|
BUILDDIRTOP =$(BUILDDIRTOP)_VC$(VCVER) |
|
!endif |
|
|
|
!if !$(DEBUG) || $(TCL_VERSION) > 86 || $(DEBUG) && $(UNCHECKED) |
|
SUFX = $(SUFX:g=) |
|
!endif |
|
|
|
TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX |
|
|
|
!if !$(STATIC_BUILD) |
|
TMP_DIRFULL = $(TMP_DIRFULL:Static=) |
|
SUFX = $(SUFX:s=) |
|
EXT = dll |
|
TMP_DIRFULL = $(TMP_DIRFULL:X=) |
|
SUFX = $(SUFX:x=) |
|
!else |
|
TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=) |
|
EXT = lib |
|
!if !$(MSVCRT) |
|
TMP_DIRFULL = $(TMP_DIRFULL:X=) |
|
SUFX = $(SUFX:x=) |
|
!endif |
|
!endif |
|
|
|
!if !$(TCL_THREADS) || $(TCL_VERSION) > 86 |
|
TMP_DIRFULL = $(TMP_DIRFULL:Threaded=) |
|
SUFX = $(SUFX:t=) |
|
!endif |
|
|
|
!ifndef TMP_DIR |
|
TMP_DIR = $(TMP_DIRFULL) |
|
!ifndef OUT_DIR |
|
OUT_DIR = .\$(BUILDDIRTOP) |
|
!endif |
|
!else |
|
!ifndef OUT_DIR |
|
OUT_DIR = $(TMP_DIR) |
|
!endif |
|
!endif |
|
|
|
|
|
!if [echo OUT_DIR = \> nmakehlp.out] \ |
|
|| [nmakehlp -Q "$(OUT_DIR)" >> nmakehlp.out] |
|
!error *** Could not fully qualify path OUT_DIR=$(OUT_DIR) |
|
!endif |
|
!if [echo TMP_DIR = \>> nmakehlp.out] \ |
|
|| [nmakehlp -Q "$(TMP_DIR)" >> nmakehlp.out] |
|
!error *** Could not fully qualify path TMP_DIR=$(TMP_DIR) |
|
!endif |
|
!include nmakehlp.out |
|
|
|
|
|
STUBPREFIX = $(PROJECT)stub |
|
|
|
|
|
|
|
|
|
|
|
|
|
TCLSCRIPTZIPNAME = libtcl$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION)$(TCL_PATCH_LETTER)$(TCL_RELEASE_SERIAL).zip |
|
TKSCRIPTZIPNAME = libtk$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION)$(TK_PATCH_LETTER)$(TK_RELEASE_SERIAL).zip |
|
|
|
!if $(DOING_TCL) |
|
TCLSHNAME = $(PROJECT)sh$(VERSION)$(SUFX).exe |
|
TCLSH = $(OUT_DIR)\$(TCLSHNAME) |
|
TCLIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib |
|
TCLLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT) |
|
TCLLIB = $(OUT_DIR)\$(TCLLIBNAME) |
|
TCLSCRIPTZIP = $(OUT_DIR)\$(TCLSCRIPTZIPNAME) |
|
|
|
TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib |
|
TCLSTUBLIB = $(OUT_DIR)\$(TCLSTUBLIBNAME) |
|
TCL_INCLUDES = -I"$(WIN_DIR)" -I"$(GENERICDIR)" |
|
|
|
!else |
|
|
|
!if $(TCLINSTALL) |
|
|
|
|
|
|
|
|
|
TCLSH = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX:t=).exe |
|
!if !exist("$(TCLSH)") |
|
TCLSH = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX:t=).exe |
|
!endif |
|
|
|
TCLSTUBLIB = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib |
|
TCLIMPLIB = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX:t=).lib |
|
|
|
|
|
!if !exist("$(TCLIMPLIB)") |
|
TCLIMPLIB = $(_TCLDIR)\lib\tcl$(TCL_VERSION)t$(SUFX:t=).lib |
|
!endif |
|
TCL_LIBRARY = $(_TCLDIR)\lib |
|
TCLREGLIB = $(_TCLDIR)\lib\tclreg13$(SUFX:t=).lib |
|
TCLDDELIB = $(_TCLDIR)\lib\tcldde14$(SUFX:t=).lib |
|
TCLSCRIPTZIP = $(_TCLDIR)\lib\$(TCLSCRIPTZIPNAME) |
|
TCLTOOLSDIR = \must\have\tcl\sources\to\build\this\target |
|
TCL_INCLUDES = -I"$(_TCLDIR)\include" |
|
|
|
!else |
|
|
|
TCLSH = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX:t=).exe |
|
!if !exist($(TCLSH)) |
|
TCLSH = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX:t=).exe |
|
!endif |
|
TCLSTUBLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib |
|
TCLIMPLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX:t=).lib |
|
|
|
|
|
!if !exist("$(TCLIMPLIB)") |
|
TCLIMPLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)t$(SUFX:t=).lib |
|
!endif |
|
TCL_LIBRARY = $(_TCLDIR)\library |
|
TCLREGLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg13$(SUFX:t=).lib |
|
TCLDDELIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde14$(SUFX:t=).lib |
|
TCLSCRIPTZIP = $(_TCLDIR)\win\$(BUILDDIRTOP)\$(TCLSCRIPTZIPNAME) |
|
TCLTOOLSDIR = $(_TCLDIR)\tools |
|
TCL_INCLUDES = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win" |
|
|
|
!endif |
|
|
|
tcllibs = "$(TCLSTUBLIB)" "$(TCLIMPLIB)" |
|
|
|
!endif |
|
|
|
|
|
|
|
!ifndef TCLSH_NATIVE |
|
!if "$(MACHINE)" == "IX86" || "$(MACHINE)" == "$(NATIVE_ARCH)" |
|
TCLSH_NATIVE = $(TCLSH) |
|
!else |
|
!error You must explicitly set TCLSH_NATIVE for cross-compilation |
|
!endif |
|
!endif |
|
|
|
|
|
!if $(DOING_TK) || $(NEED_TK) |
|
WISHNAMEPREFIX = wish |
|
WISHNAME = $(WISHNAMEPREFIX)$(TK_VERSION)$(SUFX).exe |
|
TKLIBNAME8 = tk$(TK_VERSION)$(SUFX).$(EXT) |
|
TKLIBNAME9 = tcl9tk$(TK_VERSION)$(SUFX).$(EXT) |
|
!if $(TCL_MAJOR_VERSION) == 8 |
|
TKLIBNAME = tk$(TK_VERSION)$(SUFX).$(EXT) |
|
TKIMPLIBNAME = tk$(TK_VERSION)$(SUFX).lib |
|
!else |
|
TKLIBNAME = tcl9tk$(TK_VERSION)$(SUFX).$(EXT) |
|
TKIMPLIBNAME = tcl9tk$(TK_VERSION)$(SUFX).lib |
|
!endif |
|
TKSTUBLIBNAME = tkstub$(TK_VERSION).lib |
|
|
|
!if $(DOING_TK) |
|
WISH = $(OUT_DIR)\$(WISHNAME) |
|
TKSTUBLIB = $(OUT_DIR)\$(TKSTUBLIBNAME) |
|
TKIMPLIB = $(OUT_DIR)\$(TKIMPLIBNAME) |
|
TKLIB = $(OUT_DIR)\$(TKLIBNAME) |
|
TK_INCLUDES = -I"$(WIN_DIR)" -I"$(GENERICDIR)" |
|
TKSCRIPTZIP = $(OUT_DIR)\$(TKSCRIPTZIPNAME) |
|
|
|
!else |
|
|
|
!if $(TKINSTALL) |
|
WISH = $(_TKDIR)\bin\$(WISHNAME) |
|
TKSTUBLIB = $(_TKDIR)\lib\$(TKSTUBLIBNAME) |
|
TKIMPLIB = $(_TKDIR)\lib\$(TKIMPLIBNAME) |
|
|
|
|
|
!if !exist("$(TKIMPLIB)") |
|
TKIMPLIBNAME = tk$(TK_VERSION)$(SUFX:t=).lib |
|
TKIMPLIB = $(_TKDIR)\lib\$(TKIMPLIBNAME) |
|
!endif |
|
TK_INCLUDES = -I"$(_TKDIR)\include" |
|
TKSCRIPTZIP = $(_TKDIR)\lib\$(TKSCRIPTZIPNAME) |
|
|
|
!else |
|
|
|
WISH = $(_TKDIR)\win\$(BUILDDIRTOP)\$(WISHNAME) |
|
TKSTUBLIB = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKSTUBLIBNAME) |
|
TKIMPLIB = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKIMPLIBNAME) |
|
|
|
|
|
!if !exist("$(TKIMPLIB)") |
|
TKIMPLIBNAME = tk$(TK_VERSION)$(SUFX:t=).lib |
|
TKIMPLIB = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKIMPLIBNAME) |
|
!endif |
|
TK_INCLUDES = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib" |
|
TKSCRIPTZIP = $(_TKDIR)\win\$(BUILDDIRTOP)\$(TKSCRIPTZIPNAME) |
|
|
|
!endif |
|
|
|
tklibs = "$(TKSTUBLIB)" "$(TKIMPLIB)" |
|
|
|
!endif |
|
!endif |
|
|
|
|
|
PRJIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib |
|
PRJLIBNAME8 = $(PROJECT)$(VERSION)$(SUFX).$(EXT) |
|
PRJLIBNAME9 = tcl9$(PROJECT)$(VERSION)$(SUFX).$(EXT) |
|
!if $(TCL_MAJOR_VERSION) == 8 |
|
PRJLIBNAME = $(PRJLIBNAME8) |
|
!else |
|
PRJLIBNAME = $(PRJLIBNAME9) |
|
!endif |
|
PRJLIB = $(OUT_DIR)\$(PRJLIBNAME) |
|
|
|
PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib |
|
PRJSTUBLIB = $(OUT_DIR)\$(PRJSTUBLIBNAME) |
|
|
|
|
|
|
|
!if !$(DOING_TCL) && !$(DOING_TK) && !$(STATIC_BUILD) |
|
!ifdef RCFILE |
|
RESFILE = $(TMP_DIR)\$(RCFILE:.rc=.res) |
|
!else |
|
RESFILE = $(TMP_DIR)\$(PROJECT).res |
|
!endif |
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!if $(DOING_TCL) || $(DOING_TK) |
|
LIB_INSTALL_DIR = $(_INSTALLDIR)\lib |
|
BIN_INSTALL_DIR = $(_INSTALLDIR)\bin |
|
DOC_INSTALL_DIR = $(_INSTALLDIR)\doc |
|
!if $(DOING_TCL) |
|
SCRIPT_INSTALL_DIR = $(_INSTALLDIR)\lib\$(PROJECT)$(TCL_MAJOR_VERSION).$(TCL_MINOR_VERSION) |
|
MODULE_INSTALL_DIR = $(_INSTALLDIR)\lib\tcl$(TCL_MAJOR_VERSION) |
|
!else |
|
SCRIPT_INSTALL_DIR = $(_INSTALLDIR)\lib\$(PROJECT)$(TK_MAJOR_VERSION).$(TK_MINOR_VERSION) |
|
!endif |
|
DEMO_INSTALL_DIR = $(SCRIPT_INSTALL_DIR)\demos |
|
INCLUDE_INSTALL_DIR = $(_INSTALLDIR)\include |
|
|
|
!else |
|
|
|
PRJ_INSTALL_DIR = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION) |
|
!if $(MULTIPLATFORM_INSTALL) |
|
LIB_INSTALL_DIR = $(PRJ_INSTALL_DIR)\$(PLATFORM_IDENTIFY) |
|
BIN_INSTALL_DIR = $(PRJ_INSTALL_DIR)\$(PLATFORM_IDENTIFY) |
|
!else |
|
LIB_INSTALL_DIR = $(PRJ_INSTALL_DIR) |
|
BIN_INSTALL_DIR = $(PRJ_INSTALL_DIR) |
|
!endif |
|
DOC_INSTALL_DIR = $(PRJ_INSTALL_DIR) |
|
SCRIPT_INSTALL_DIR = $(PRJ_INSTALL_DIR) |
|
DEMO_INSTALL_DIR = $(PRJ_INSTALL_DIR)\demos |
|
INCLUDE_INSTALL_DIR = $(_INSTALLDIR)\..\include |
|
|
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OPTDEFINES = /DSTDC_HEADERS /DUSE_NMAKE=1 |
|
!if $(VCVERSION) > 1600 |
|
OPTDEFINES = $(OPTDEFINES) /DHAVE_STDINT_H=1 |
|
!else |
|
OPTDEFINES = $(OPTDEFINES) /DMP_NO_STDINT=1 |
|
!endif |
|
!if $(VCVERSION) >= 1800 |
|
OPTDEFINES = $(OPTDEFINES) /DHAVE_INTTYPES_H=1 /DHAVE_STDBOOL_H=1 |
|
!endif |
|
|
|
!if $(TCL_MEM_DEBUG) |
|
OPTDEFINES = $(OPTDEFINES) /DTCL_MEM_DEBUG |
|
!endif |
|
!if $(TCL_COMPILE_DEBUG) |
|
OPTDEFINES = $(OPTDEFINES) /DTCL_COMPILE_DEBUG /DTCL_COMPILE_STATS |
|
!endif |
|
!if $(TCL_THREADS) && $(TCL_VERSION) < 87 |
|
OPTDEFINES = $(OPTDEFINES) /DTCL_THREADS=1 |
|
!if $(USE_THREAD_ALLOC) && $(TCL_VERSION) < 87 |
|
OPTDEFINES = $(OPTDEFINES) /DUSE_THREAD_ALLOC=1 |
|
!endif |
|
!endif |
|
!if $(STATIC_BUILD) |
|
OPTDEFINES = $(OPTDEFINES) /DSTATIC_BUILD |
|
!elseif $(TCL_VERSION) > 86 |
|
OPTDEFINES = $(OPTDEFINES) /DTCL_WITH_EXTERNAL_TOMMATH |
|
!if "$(MACHINE)" == "AMD64" |
|
OPTDEFINES = $(OPTDEFINES) /DMP_64BIT |
|
!endif |
|
!endif |
|
!if $(TCL_NO_DEPRECATED) |
|
OPTDEFINES = $(OPTDEFINES) /DTCL_NO_DEPRECATED |
|
!endif |
|
|
|
!if $(USE_STUBS) |
|
|
|
|
|
!if !$(DOING_TCL) |
|
USE_STUBS_DEFS = /DUSE_TCL_STUBS /DUSE_TCLOO_STUBS |
|
!if $(NEED_TK) |
|
USE_STUBS_DEFS = $(USE_STUBS_DEFS) /DUSE_TK_STUBS |
|
!endif |
|
!endif |
|
!endif |
|
|
|
!if !$(DEBUG) |
|
OPTDEFINES = $(OPTDEFINES) /DNDEBUG |
|
!if $(OPTIMIZING) |
|
OPTDEFINES = $(OPTDEFINES) /DTCL_CFG_OPTIMIZED |
|
!endif |
|
!endif |
|
!if $(PROFILE) |
|
OPTDEFINES = $(OPTDEFINES) /DTCL_CFG_PROFILED |
|
!endif |
|
!if "$(MACHINE)" == "AMD64" |
|
OPTDEFINES = $(OPTDEFINES) /DTCL_CFG_DO64BIT |
|
!endif |
|
!if $(VCVERSION) < 1300 |
|
OPTDEFINES = $(OPTDEFINES) /DNO_STRTOI64=1 |
|
!endif |
|
|
|
!if "$(TCL_MAJOR_VERSION)" == "8" |
|
!if "$(_USE_64BIT_TIME_T)" == "1" |
|
OPTDEFINES = $(OPTDEFINES) /D_USE_64BIT_TIME_T=1 |
|
!endif |
|
!if "$(TCL_UTF_MAX)" == "4" |
|
OPTDEFINES = $(OPTDEFINES) /DTCL_UTF_MAX=4 |
|
!endif |
|
|
|
|
|
COMPILERFLAGS = /D_ATL_XP_TARGETING |
|
!endif |
|
|
|
|
|
|
|
|
|
!if !$(DOING_TCL) && !$(DOING_TK) |
|
PKGNAMEFLAGS = /DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \ |
|
/DPACKAGE_TCLNAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \ |
|
/DPACKAGE_VERSION="\"$(DOTVERSION)\"" \ |
|
/DMODULE_SCOPE=extern |
|
!endif |
|
|
|
|
|
!if $(MSVCRT) |
|
!if $(DEBUG) && !$(UNCHECKED) |
|
crt = -MDd |
|
!else |
|
crt = -MD |
|
!endif |
|
!else |
|
!if $(DEBUG) && !$(UNCHECKED) |
|
crt = -MTd |
|
!else |
|
crt = -MT |
|
!endif |
|
!endif |
|
|
|
|
|
!if $(DEBUG) |
|
|
|
|
|
cdebug = -Zi -Od $(DEBUGFLAGS) |
|
|
|
!else |
|
|
|
cdebug = $(OPTIMIZATIONS) |
|
!if $(SYMBOLS) |
|
cdebug = $(cdebug) -Zi |
|
!endif |
|
|
|
!endif |
|
|
|
|
|
cwarn = $(WARNINGS) |
|
|
|
!if "$(MACHINE)" == "AMD64" |
|
|
|
|
|
|
|
|
|
|
|
cwarn = $(cwarn) -wd4311 -wd4312 |
|
!endif |
|
|
|
|
|
!if "$(MACHINE)" == "ARM" |
|
carch = /D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE |
|
!else |
|
carch = |
|
!endif |
|
|
|
!if $(DEBUG) |
|
|
|
cwarn = $(cwarn) -WX |
|
!endif |
|
|
|
INCLUDES = $(TCL_INCLUDES) $(TK_INCLUDES) $(PRJ_INCLUDES) |
|
!if !$(DOING_TCL) && !$(DOING_TK) |
|
INCLUDES = $(INCLUDES) -I"$(GENERICDIR)" -I"$(WIN_DIR)" -I"$(COMPATDIR)" |
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\ $(cdebug) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
appcflags_nostubs = $(cflags) $(crt) $(INCLUDES) $(TCL_DEFINES) $(PRJ_DEFINES) $(OPTDEFINES) |
|
appcflags = $(appcflags_nostubs) $(USE_STUBS_DEFS) |
|
pkgcflags = $(appcflags) $(PKGNAMEFLAGS) /DBUILD_$(PROJECT) |
|
pkgcflags_nostubs = $(appcflags_nostubs) $(PKGNAMEFLAGS) /DBUILD_$(PROJECT) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
stubscflags = $(cflags) $(PKGNAMEFLAGS) $(PRJ_DEFINES) $(OPTDEFINES) /Zl /GL- /DSTATIC_BUILD $(INCLUDES) $(USE_STUBS_DEFS) |
|
|
|
|
|
|
|
!if $(DEBUG) |
|
ldebug = -debug -debugtype:cv |
|
!else |
|
ldebug = -release -opt:ref -opt:icf,3 |
|
!if $(SYMBOLS) |
|
ldebug = $(ldebug) -debug -debugtype:cv |
|
!endif |
|
!endif |
|
|
|
|
|
!if $(PROFILE) |
|
ldebug= $(ldebug) -profile |
|
!endif |
|
|
|
|
|
lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug) |
|
|
|
!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900 |
|
lflags = $(lflags) -nodefaultlib:libucrt.lib |
|
!endif |
|
|
|
dlllflags = $(lflags) -dll |
|
conlflags = $(lflags) -subsystem:console |
|
guilflags = $(lflags) -subsystem:windows |
|
|
|
|
|
|
|
winlibs = kernel32.lib advapi32.lib |
|
|
|
!if $(NEED_TK) |
|
winlibs = $(winlibs) gdi32.lib user32.lib uxtheme.lib |
|
!endif |
|
|
|
|
|
|
|
!if "$(MACHINE)" == "AMD64" |
|
!if $(VCVERSION) > 1399 && $(VCVERSION) < 1500 |
|
winlibs = $(winlibs) bufferoverflowU.lib |
|
!endif |
|
!endif |
|
|
|
baselibs = $(winlibs) $(PRJ_LIBS) |
|
|
|
!if $(MSVCRT) && !($(DEBUG) && !$(UNCHECKED)) && $(VCVERSION) >= 1900 |
|
baselibs = $(baselibs) ucrt.lib |
|
!endif |
|
|
|
|
|
|
|
|
|
CCPKGCMD = $(cc32) $(pkgcflags) -Fo$(TMP_DIR)^\ |
|
CCAPPCMD = $(cc32) $(appcflags) -Fo$(TMP_DIR)^\ |
|
CCSTUBSCMD = $(cc32) $(stubscflags) -Fo$(TMP_DIR)^\ |
|
|
|
LIBCMD = $(lib32) -nologo $(LINKERFLAGS) -out:$@ |
|
DLLCMD = $(link32) $(dlllflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs) |
|
|
|
CONEXECMD = $(link32) $(conlflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs) |
|
GUIEXECMD = $(link32) $(guilflags) -out:$@ $(baselibs) $(tcllibs) $(tklibs) |
|
RESCMD = $(rc32) -fo $@ -r -i "$(GENERICDIR)" -i "$(TMP_DIR)" \ |
|
$(TCL_INCLUDES) \ |
|
/DDEBUG=$(DEBUG) -d UNCHECKED=$(UNCHECKED) \ |
|
/DCOMMAVERSION=$(RCCOMMAVERSION) \ |
|
/DDOTVERSION=\"$(DOTVERSION)\" \ |
|
/DVERSION=\"$(VERSION)\" \ |
|
/DSUFX=\"$(SUFX)\" \ |
|
/DPROJECT=\"$(PROJECT)\" \ |
|
/DPRJLIBNAME=\"$(PRJLIBNAME)\" |
|
|
|
!ifndef DEFAULT_BUILD_TARGET |
|
DEFAULT_BUILD_TARGET = $(PROJECT) |
|
!endif |
|
|
|
default-target: $(DEFAULT_BUILD_TARGET) |
|
|
|
!if $(MULTIPLATFORM_INSTALL) |
|
default-pkgindex: |
|
@echo if {[package vsatisfies [package provide Tcl] 9.0-]} { > $(OUT_DIR)\pkgIndex.tcl |
|
@echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \ |
|
[list load [file join $$dir $(PLATFORM_IDENTIFY) $(PRJLIBNAME9)]] >> $(OUT_DIR)\pkgIndex.tcl |
|
@echo } else { >> $(OUT_DIR)\pkgIndex.tcl |
|
@echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \ |
|
[list load [file join $$dir $(PLATFORM_IDENTIFY) $(PRJLIBNAME8)]] >> $(OUT_DIR)\pkgIndex.tcl |
|
@echo } >> $(OUT_DIR)\pkgIndex.tcl |
|
!else |
|
default-pkgindex: |
|
@echo if {[package vsatisfies [package provide Tcl] 9.0-]} { > $(OUT_DIR)\pkgIndex.tcl |
|
@echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \ |
|
[list load [file join $$dir $(PRJLIBNAME9)]] >> $(OUT_DIR)\pkgIndex.tcl |
|
@echo } else { >> $(OUT_DIR)\pkgIndex.tcl |
|
@echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \ |
|
[list load [file join $$dir $(PRJLIBNAME8)]] >> $(OUT_DIR)\pkgIndex.tcl |
|
@echo } >> $(OUT_DIR)\pkgIndex.tcl |
|
!endif |
|
|
|
default-pkgindex-tea: |
|
@if exist $(ROOT)\pkgIndex.tcl.in nmakehlp -s << $(ROOT)\pkgIndex.tcl.in > $(OUT_DIR)\pkgIndex.tcl |
|
@PACKAGE_VERSION@ $(DOTVERSION) |
|
@PACKAGE_NAME@ $(PRJ_PACKAGE_TCLNAME) |
|
@PACKAGE_TCLNAME@ $(PRJ_PACKAGE_TCLNAME) |
|
@PKG_LIB_FILE@ $(PRJLIBNAME) |
|
@PKG_LIB_FILE8@ $(PRJLIBNAME8) |
|
@PKG_LIB_FILE9@ $(PRJLIBNAME9) |
|
<< |
|
|
|
default-install: default-install-binaries default-install-libraries |
|
!if $(SYMBOLS) |
|
default-install: default-install-pdbs |
|
!endif |
|
|
|
# Again to deal with historical brokenness, there is some confusion |
|
# in terminlogy. For extensions, the "install-binaries" was used to |
|
# locate target directory for *binary shared libraries* and thus |
|
# the appropriate macro is LIB_INSTALL_DIR since BIN_INSTALL_DIR is |
|
# for executables (exes). On the other hand the "install-libraries" |
|
# target is for *scripts* and should have been called "install-scripts". |
|
default-install-binaries: $(PRJLIB) |
|
@echo Installing binaries to '$(LIB_INSTALL_DIR)' |
|
@if not exist "$(LIB_INSTALL_DIR)" mkdir "$(LIB_INSTALL_DIR)" |
|
@$(CPY) $(PRJLIB) "$(LIB_INSTALL_DIR)" >NUL |
|
|
|
# Alias for default-install-scripts |
|
default-install-libraries: default-install-scripts |
|
|
|
default-install-scripts: $(OUT_DIR)\pkgIndex.tcl |
|
@echo Installing libraries to '$(SCRIPT_INSTALL_DIR)' |
|
@if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)" |
|
@echo Installing package index in '$(SCRIPT_INSTALL_DIR)' |
|
@$(CPY) $(OUT_DIR)\pkgIndex.tcl $(SCRIPT_INSTALL_DIR) |
|
|
|
default-install-stubs: |
|
@echo Installing stubs library to '$(SCRIPT_INSTALL_DIR)' |
|
@if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)" |
|
@$(CPY) $(PRJSTUBLIB) "$(SCRIPT_INSTALL_DIR)" >NUL |
|
|
|
default-install-pdbs: |
|
@echo Installing PDBs to '$(LIB_INSTALL_DIR)' |
|
@if not exist "$(LIB_INSTALL_DIR)" mkdir "$(LIB_INSTALL_DIR)" |
|
@$(CPY) "$(OUT_DIR)\*.pdb" "$(LIB_INSTALL_DIR)\" |
|
|
|
|
|
|
|
default-install-docs-html: |
|
@echo Installing documentation files to '$(DOC_INSTALL_DIR)' |
|
@if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)" |
|
@if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.html" "$(DOCDIR)\*.css" "$(DOCDIR)\*.png") do @$(COPY) %f "$(DOC_INSTALL_DIR)" |
|
|
|
default-install-docs-n: |
|
@echo Installing documentation files to '$(DOC_INSTALL_DIR)' |
|
@if not exist "$(DOC_INSTALL_DIR)" mkdir "$(DOC_INSTALL_DIR)" |
|
@if exist $(DOCDIR) for %f in ("$(DOCDIR)\*.n") do @$(COPY) %f "$(DOC_INSTALL_DIR)" |
|
|
|
default-install-demos: |
|
@echo Installing demos to '$(DEMO_INSTALL_DIR)' |
|
@if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)" |
|
@if exist $(DEMODIR) $(CPYDIR) "$(DEMODIR)" "$(DEMO_INSTALL_DIR)" |
|
|
|
default-clean: |
|
@echo Cleaning $(TMP_DIR)\* ... |
|
@if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR) |
|
@echo Cleaning $(WIN_DIR)\nmakehlp.obj, nmakehlp.exe ... |
|
@if exist $(WIN_DIR)\nmakehlp.obj del $(WIN_DIR)\nmakehlp.obj |
|
@if exist $(WIN_DIR)\nmakehlp.exe del $(WIN_DIR)\nmakehlp.exe |
|
@if exist $(WIN_DIR)\nmakehlp.out del $(WIN_DIR)\nmakehlp.out |
|
@echo Cleaning $(WIN_DIR)\nmhlp-out.txt ... |
|
@if exist $(WIN_DIR)\nmhlp-out.txt del $(WIN_DIR)\nmhlp-out.txt |
|
@echo Cleaning $(WIN_DIR)\_junk.pch ... |
|
@if exist $(WIN_DIR)\_junk.pch del $(WIN_DIR)\_junk.pch |
|
@echo Cleaning $(WIN_DIR)\vercl.x, vercl.i ... |
|
@if exist $(WIN_DIR)\vercl.x del $(WIN_DIR)\vercl.x |
|
@if exist $(WIN_DIR)\vercl.i del $(WIN_DIR)\vercl.i |
|
@echo Cleaning $(WIN_DIR)\versions.vc, version.vc ... |
|
@if exist $(WIN_DIR)\versions.vc del $(WIN_DIR)\versions.vc |
|
@if exist $(WIN_DIR)\version.vc del $(WIN_DIR)\version.vc |
|
|
|
default-hose: default-clean |
|
@echo Hosing $(OUT_DIR)\* ... |
|
@if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR) |
|
|
|
|
|
default-distclean: default-hose |
|
|
|
default-setup: |
|
@if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR) |
|
@if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR) |
|
|
|
!if "$(TESTPAT)" != "" |
|
TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT) |
|
!endif |
|
|
|
default-test: default-setup $(PROJECT) |
|
@set TCLLIBPATH=$(OUT_DIR:\=/) |
|
@if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)" |
|
cd "$(TESTDIR)" && $(DEBUGGER) $(TCLSH) all.tcl $(TESTFLAGS) |
|
|
|
default-shell: default-setup $(PROJECT) |
|
@set TCLLIBPATH=$(OUT_DIR:\=/) |
|
@if exist $(LIBDIR) for %f in ("$(LIBDIR)\*.tcl") do @$(COPY) %f "$(OUT_DIR)" |
|
$(DEBUGGER) $(TCLSH) |
|
|
|
|
|
!ifdef RCFILE |
|
|
|
|
|
|
|
$(TMP_DIR)\$(PROJECT).res: $(RCDIR)\$(PROJECT).rc |
|
$(RESCMD) $(RCDIR)\$(PROJECT).rc |
|
|
|
!else |
|
|
|
|
|
|
|
$(TMP_DIR)\$(PROJECT).res: $(TMP_DIR)\$(PROJECT).rc |
|
|
|
$(TMP_DIR)\$(PROJECT).rc: |
|
@$(COPY) << $(TMP_DIR)\$(PROJECT).rc |
|
|
|
|
|
VS_VERSION_INFO VERSIONINFO |
|
FILEVERSION COMMAVERSION |
|
PRODUCTVERSION COMMAVERSION |
|
FILEFLAGSMASK 0x3fL |
|
|
|
FILEFLAGS VS_FF_DEBUG |
|
|
|
FILEFLAGS 0x0L |
|
|
|
FILEOS VOS_NT_WINDOWS32 |
|
FILETYPE VFT_DLL |
|
FILESUBTYPE 0x0L |
|
BEGIN |
|
BLOCK "StringFileInfo" |
|
BEGIN |
|
BLOCK "040904b0" |
|
BEGIN |
|
VALUE "FileDescription", "Tcl extension " PROJECT |
|
VALUE "OriginalFilename", PRJLIBNAME |
|
VALUE "FileVersion", DOTVERSION |
|
VALUE "ProductName", "Package " PROJECT " for Tcl" |
|
VALUE "ProductVersion", DOTVERSION |
|
END |
|
END |
|
BLOCK "VarFileInfo" |
|
BEGIN |
|
VALUE "Translation", 0x409, 1200 |
|
END |
|
END |
|
|
|
<< |
|
|
|
!endif |
|
|
|
!ifndef DISABLE_IMPLICIT_RULES |
|
DISABLE_IMPLICIT_RULES = 0 |
|
!endif |
|
|
|
!if !$(DISABLE_IMPLICIT_RULES) |
|
|
|
|
|
|
|
{$(ROOT)}.c{$(TMP_DIR)}.obj:: |
|
$(CCPKGCMD) @<< |
|
$< |
|
<< |
|
|
|
{$(WIN_DIR)}.c{$(TMP_DIR)}.obj:: |
|
$(CCPKGCMD) @<< |
|
$< |
|
<< |
|
|
|
{$(GENERICDIR)}.c{$(TMP_DIR)}.obj:: |
|
$(CCPKGCMD) @<< |
|
$< |
|
<< |
|
|
|
{$(COMPATDIR)}.c{$(TMP_DIR)}.obj:: |
|
$(CCPKGCMD) @<< |
|
$< |
|
<< |
|
|
|
{$(RCDIR)}.rc{$(TMP_DIR)}.res: |
|
$(RESCMD) $< |
|
|
|
{$(WIN_DIR)}.rc{$(TMP_DIR)}.res: |
|
$(RESCMD) $< |
|
|
|
{$(TMP_DIR)}.rc{$(TMP_DIR)}.res: |
|
$(RESCMD) $< |
|
|
|
.SUFFIXES: |
|
.SUFFIXES:.c .rc |
|
|
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
!if !$(DOING_TCL) |
|
|
|
!if $(TCLINSTALL) |
|
!if exist("$(_TCLDIR)\lib\nmake\tcl.nmake") |
|
TCLNMAKECONFIG = "$(_TCLDIR)\lib\nmake\tcl.nmake" |
|
!endif |
|
!else |
|
!if exist("$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl.nmake") |
|
TCLNMAKECONFIG = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl.nmake" |
|
!endif |
|
!endif |
|
|
|
!if $(CONFIG_CHECK) |
|
!ifdef TCLNMAKECONFIG |
|
!include $(TCLNMAKECONFIG) |
|
|
|
!if defined(CORE_MACHINE) && "$(CORE_MACHINE)" != "$(MACHINE)" |
|
!error ERROR: Build target ($(MACHINE)) does not match the Tcl library architecture ($(CORE_MACHINE)). |
|
!endif |
|
!if $(TCL_VERSION) < 87 && defined(CORE_USE_THREAD_ALLOC) && $(CORE_USE_THREAD_ALLOC) != $(USE_THREAD_ALLOC) |
|
!message WARNING: Value of USE_THREAD_ALLOC ($(USE_THREAD_ALLOC)) does not match its Tcl core value ($(CORE_USE_THREAD_ALLOC)). |
|
!endif |
|
!if defined(CORE_DEBUG) && $(CORE_DEBUG) != $(DEBUG) |
|
!message WARNING: Value of DEBUG ($(DEBUG)) does not match its Tcl library configuration ($(DEBUG)). |
|
!endif |
|
!endif |
|
|
|
!endif |
|
|
|
!endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
!if !$(DOING_TCL) |
|
!message *** Building against Tcl at '$(_TCLDIR)' |
|
!endif |
|
!if !$(DOING_TK) && $(NEED_TK) |
|
!message *** Building against Tk at '$(_TKDIR)' |
|
!endif |
|
!message *** Intermediate directory will be '$(TMP_DIR)' |
|
!message *** Output directory will be '$(OUT_DIR)' |
|
!message *** Installation, if selected, will be in '$(_INSTALLDIR)' |
|
!message *** Suffix for binaries will be '$(SUFX)' |
|
!message *** Compiler version $(VCVER). Target $(MACHINE), host $(NATIVE_ARCH). |
|
|
|
!endif |
|
|