makefile.vc
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:26k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #------------------------------------------------------------------------------
  2. # makefile.vc --
  3. #
  4. # Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)
  5. #
  6. # See the file "license.terms" for information on usage and redistribution
  7. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  8. # Copyright (c) 1995-1996 Sun Microsystems, Inc.
  9. # Copyright (c) 1998-2000 Ajuba Solutions.
  10. # Copyright (c) 2001-2005 ActiveState Corporation.
  11. # Copyright (c) 2001-2002 David Gravereaux.
  12. #
  13. #------------------------------------------------------------------------------
  14. # RCS: @(#) $Id: makefile.vc,v 1.100.2.10 2007/09/11 00:10:48 patthoyts Exp $
  15. #------------------------------------------------------------------------------
  16. # Check to see we are configured to build with MSVC (MSDEVDIR or MSVCDIR)
  17. # or with the MS Platform SDK (MSSDK). Visual Studio .NET 2003 and 2005 define
  18. # VCINSTALLDIR instead.
  19. !if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(MSSDK) && !defined(VCINSTALLDIR)
  20. MSG = ^
  21. You need to run vcvars32.bat from Developer Studio or setenv.bat from the^
  22. Platform SDK first to setup the environment.  Jump to this line to read^
  23. the build instructions.
  24. !error $(MSG)
  25. !endif
  26. #------------------------------------------------------------------------------
  27. # HOW TO USE this makefile:
  28. #
  29. # 1)  It is now necessary to have MSVCDir, MSDevDir or MSSDK set in the
  30. #     environment.  This is used as a check to see if vcvars32.bat had been
  31. #     run prior to running nmake or during the installation of Microsoft
  32. #     Visual C++, MSVCDir had been set globally and the PATH adjusted.
  33. #     Either way is valid.
  34. #
  35. #     You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin
  36. #     directory to setup the proper environment, if needed, for your
  37. #     current setup.  This is a needed bootstrap requirement and allows the
  38. #     swapping of different environments to be easier.
  39. #
  40. # 2)  To use the Platform SDK (not expressly needed), run setenv.bat after
  41. #     vcvars32.bat according to the instructions for it.  This can also
  42. #     turn on the 64-bit compiler, if your SDK has it.
  43. #
  44. # 3)  Targets are:
  45. # release  -- Builds the core, the shell and the dlls. (default)
  46. # dlls     -- Just builds the windows extensions and the 16-bit DOS
  47. #     pipe/thunk helper app.
  48. # shell    -- Just builds the shell and the core.
  49. # core     -- Only builds the core [tclXX.(dll|lib)].
  50. # all      -- Builds everything.
  51. # test     -- Builds and runs the test suite.
  52. # tcltest  -- Just builds the test shell.
  53. # install  -- Installs the built binaries and libraries to $(INSTALLDIR)
  54. #     as the root of the install tree.
  55. # tidy/clean/hose -- varying levels of cleaning.
  56. # genstubs -- Rebuilds the Stubs table and support files (dev only).
  57. # depend   -- Generates an accurate set of source dependancies for this
  58. #     makefile.  Helpful to avoid problems when the sources are
  59. #     refreshed and you rebuild, but can "overbuild" when common
  60. #     headers like tclInt.h just get small changes.
  61. # winhelp  -- Builds the windows .hlp file for Tcl from the troff man
  62. #     files found in $(ROOT)doc .
  63. #
  64. # 4)  Macros usable on the commandline:
  65. # INSTALLDIR=<path>
  66. # Sets where to install Tcl from the built binaries.
  67. # C:Progra~1Tcl is assumed when not specified.
  68. #
  69. # OPTS=static,msvcrt,staticpkg,threads,symbols,profile,loimpact,none
  70. # Sets special options for the core.  The default is for none.
  71. # Any combination of the above may be used (comma separated).
  72. # 'none' will over-ride everything to nothing.
  73. #
  74. # static  =  Builds a static library of the core instead of a
  75. #    dll.  The shell will be static (and large), as well.
  76. # msvcrt  =  Effects the static option only to switch it from
  77. #    using libcmt(d) as the C runtime [by default] to
  78. #    msvcrt(d). This is useful for static embedding
  79. #    support.
  80. # staticpkg = Effects the static option only to switch
  81. #    tclshXX.exe to have the dde and reg extension linked
  82. #    inside it.
  83. # threads =  Turns on full multithreading support.
  84. # thrdalloc = Use the thread allocator (shared global free pool).
  85. # symbols =  Adds symbols for step debugging.
  86. # profile =  Adds profiling hooks.  Map file is assumed.
  87. # loimpact =  Adds a flag for how NT treats the heap to keep memory
  88. #    in use, low.  This is said to impact alloc performance.
  89. #
  90. # STATS=memdbg,compdbg,none
  91. # Sets optional memory and bytecode compiler debugging code added
  92. # to the core.  The default is for none.  Any combination of the
  93. # above may be used (comma separated).  'none' will over-ride
  94. # everything to nothing.
  95. #
  96. # memdbg   = Enables the debugging memory allocator.
  97. # compdbg  = Enables byte compilation logging.
  98. #
  99. # MACHINE=(IX86|IA64|AMD64|ALPHA)
  100. # Set the machine type used for the compiler, linker, and
  101. # resource compiler.  This hook is needed to tell the tools
  102. # when alternate platforms are requested.  IX86 is the default
  103. # when not specified.
  104. #
  105. # TMP_DIR=<path>
  106. # OUT_DIR=<path>
  107. # Hooks to allow the intermediate and output directories to be
  108. # changed.  $(OUT_DIR) is assumed to be 
  109. # $(BINROOT)(Release|Debug) based on if symbols are requested.
  110. # $(TMP_DIR) will de $(OUT_DIR)<buildtype> by default.
  111. #
  112. # TESTPAT=<file>
  113. # Reads the tests requested to be run from this file.
  114. #
  115. # 5)  Examples:
  116. #
  117. # Basic syntax of calling nmake looks like this:
  118. # nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]]
  119. #
  120. #                        Standard (no frills)
  121. #       c:tcl_srcwin>c:progra~1micros~1vc98binvcvars32.bat
  122. #       Setting environment for using Microsoft Visual C++ tools.
  123. #       c:tcl_srcwin>nmake -f makefile.vc release
  124. #       c:tcl_srcwin>nmake -f makefile.vc install INSTALLDIR=c:progra~1tcl
  125. #
  126. #                         Building for Win64
  127. #       c:tcl_srcwin>c:progra~1micros~1vc98binvcvars32.bat
  128. #       Setting environment for using Microsoft Visual C++ tools.
  129. #       c:tcl_srcwin>c:progra~1platfo~1setenv.bat /pre64 /RETAIL
  130. #       Targeting Windows pre64 RETAIL
  131. #       c:tcl_srcwin>nmake -f makefile.vc MACHINE=IA64
  132. #
  133. #------------------------------------------------------------------------------
  134. #==============================================================================
  135. ###############################################################################
  136. #    //==================================================================\
  137. #   >>[               -> Do not modify below this line. <-               ]<<
  138. #   >>[  Please, use the commandline macros to modify how Tcl is built.  ]<<
  139. #   >>[  If you need more features, send us a patch for more macros.     ]<<
  140. #    \==================================================================//
  141. ###############################################################################
  142. #==============================================================================
  143. #------------------------------------------------------------------------------
  144. !if !exist("makefile.vc")
  145. MSG = ^
  146. You must run this makefile only from the directory it is in.^
  147. Please `cd` to its location first.
  148. !error $(MSG)
  149. !endif
  150. PROJECT = tcl
  151. !include "rules.vc"
  152. STUBPREFIX = $(PROJECT)stub
  153. DOTVERSION = 8.4
  154. VERSION = $(DOTVERSION:.=)
  155. DDEDOTVERSION = 1.2
  156. DDEVERSION = $(DDEDOTVERSION:.=)
  157. REGDOTVERSION = 1.1
  158. REGVERSION = $(REGDOTVERSION:.=)
  159. BINROOT = .
  160. ROOT = ..
  161. TCLIMPLIB = $(OUT_DIR)$(PROJECT)$(VERSION)$(SUFX).lib
  162. TCLLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
  163. TCLLIB = $(OUT_DIR)$(TCLLIBNAME)
  164. TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
  165. TCLSTUBLIB = $(OUT_DIR)$(TCLSTUBLIBNAME)
  166. TCLSHNAME = $(PROJECT)sh$(VERSION)$(SUFX).exe
  167. TCLSH = $(OUT_DIR)$(TCLSHNAME)
  168. TCLPIPEDLLNAME = $(PROJECT)pip$(VERSION)$(SUFX:t=).dll
  169. TCLPIPEDLL = $(OUT_DIR)$(TCLPIPEDLLNAME)
  170. TCLREGLIBNAME = $(PROJECT)reg$(REGVERSION)$(SUFX:t=).$(EXT)
  171. TCLREGLIB = $(OUT_DIR)$(TCLREGLIBNAME)
  172. TCLDDELIBNAME = $(PROJECT)dde$(DDEVERSION)$(SUFX:t=).$(EXT)
  173. TCLDDELIB = $(OUT_DIR)$(TCLDDELIBNAME)
  174. TCLTEST = $(OUT_DIR)$(PROJECT)test.exe
  175. CAT32 = $(OUT_DIR)cat32.exe
  176. ### Make sure we use backslash only.
  177. LIB_INSTALL_DIR = $(_INSTALLDIR)lib
  178. BIN_INSTALL_DIR = $(_INSTALLDIR)bin
  179. DOC_INSTALL_DIR = $(_INSTALLDIR)doc
  180. SCRIPT_INSTALL_DIR = $(_INSTALLDIR)libtcl$(DOTVERSION)
  181. INCLUDE_INSTALL_DIR = $(_INSTALLDIR)include
  182. TCLSHOBJS = 
  183. $(TMP_DIR)tclAppInit.obj 
  184. !if $(TCL_USE_STATIC_PACKAGES)
  185. $(TMP_DIR)tclWinReg.obj 
  186. $(TMP_DIR)tclWinDde.obj 
  187. !endif
  188. $(TMP_DIR)tclsh.res
  189. TCLTESTOBJS = 
  190. $(TMP_DIR)tclTest.obj 
  191. $(TMP_DIR)tclTestObj.obj 
  192. $(TMP_DIR)tclTestProcBodyObj.obj 
  193. $(TMP_DIR)tclThreadTest.obj 
  194. $(TMP_DIR)tclWinTest.obj 
  195. !if $(TCL_USE_STATIC_PACKAGES)
  196. $(TMP_DIR)tclWinReg.obj 
  197. $(TMP_DIR)tclWinDde.obj 
  198. !endif
  199. $(TMP_DIR)testMain.obj
  200. TCLOBJS = 
  201. $(TMP_DIR)regcomp.obj 
  202. $(TMP_DIR)regerror.obj 
  203. $(TMP_DIR)regexec.obj 
  204. $(TMP_DIR)regfree.obj 
  205. $(TMP_DIR)strftime.obj 
  206. $(TMP_DIR)strtoll.obj 
  207. $(TMP_DIR)strtoull.obj 
  208. $(TMP_DIR)tclAlloc.obj 
  209. $(TMP_DIR)tclAsync.obj 
  210. $(TMP_DIR)tclBasic.obj 
  211. $(TMP_DIR)tclBinary.obj 
  212. $(TMP_DIR)tclCkalloc.obj 
  213. $(TMP_DIR)tclClock.obj 
  214. $(TMP_DIR)tclCmdAH.obj 
  215. $(TMP_DIR)tclCmdIL.obj 
  216. $(TMP_DIR)tclCmdMZ.obj 
  217. $(TMP_DIR)tclCompCmds.obj 
  218. $(TMP_DIR)tclCompExpr.obj 
  219. $(TMP_DIR)tclCompile.obj 
  220. $(TMP_DIR)tclDate.obj 
  221. $(TMP_DIR)tclEncoding.obj 
  222. $(TMP_DIR)tclEnv.obj 
  223. $(TMP_DIR)tclEvent.obj 
  224. $(TMP_DIR)tclExecute.obj 
  225. $(TMP_DIR)tclFCmd.obj 
  226. $(TMP_DIR)tclFileName.obj 
  227. $(TMP_DIR)tclGet.obj 
  228. $(TMP_DIR)tclHash.obj 
  229. $(TMP_DIR)tclHistory.obj 
  230. $(TMP_DIR)tclIndexObj.obj 
  231. $(TMP_DIR)tclInterp.obj 
  232. $(TMP_DIR)tclIO.obj 
  233. $(TMP_DIR)tclIOCmd.obj 
  234. $(TMP_DIR)tclIOGT.obj 
  235. $(TMP_DIR)tclIOSock.obj 
  236. $(TMP_DIR)tclIOUtil.obj 
  237. $(TMP_DIR)tclLink.obj 
  238. $(TMP_DIR)tclListObj.obj 
  239. $(TMP_DIR)tclLiteral.obj 
  240. $(TMP_DIR)tclLoad.obj 
  241. $(TMP_DIR)tclMain.obj 
  242. $(TMP_DIR)tclNamesp.obj 
  243. $(TMP_DIR)tclNotify.obj 
  244. $(TMP_DIR)tclObj.obj 
  245. $(TMP_DIR)tclPanic.obj 
  246. $(TMP_DIR)tclParse.obj 
  247. $(TMP_DIR)tclParseExpr.obj 
  248. $(TMP_DIR)tclPipe.obj 
  249. $(TMP_DIR)tclPkg.obj 
  250. $(TMP_DIR)tclPosixStr.obj 
  251. $(TMP_DIR)tclPreserve.obj 
  252. $(TMP_DIR)tclProc.obj 
  253. $(TMP_DIR)tclRegexp.obj 
  254. $(TMP_DIR)tclResolve.obj 
  255. $(TMP_DIR)tclResult.obj 
  256. $(TMP_DIR)tclScan.obj 
  257. $(TMP_DIR)tclStringObj.obj 
  258. $(TMP_DIR)tclStubInit.obj 
  259. $(TMP_DIR)tclStubLib.obj 
  260. $(TMP_DIR)tclThread.obj 
  261. $(TMP_DIR)tclThreadAlloc.obj 
  262. $(TMP_DIR)tclThreadJoin.obj 
  263. $(TMP_DIR)tclTimer.obj 
  264. $(TMP_DIR)tclUtf.obj 
  265. $(TMP_DIR)tclUtil.obj 
  266. $(TMP_DIR)tclVar.obj 
  267. $(TMP_DIR)tclWin32Dll.obj 
  268. $(TMP_DIR)tclWinChan.obj 
  269. $(TMP_DIR)tclWinConsole.obj 
  270. $(TMP_DIR)tclWinSerial.obj 
  271. $(TMP_DIR)tclWinError.obj 
  272. $(TMP_DIR)tclWinFCmd.obj 
  273. $(TMP_DIR)tclWinFile.obj 
  274. $(TMP_DIR)tclWinInit.obj 
  275. $(TMP_DIR)tclWinLoad.obj 
  276. $(TMP_DIR)tclWinMtherr.obj 
  277. $(TMP_DIR)tclWinNotify.obj 
  278. $(TMP_DIR)tclWinPipe.obj 
  279. $(TMP_DIR)tclWinSock.obj 
  280. $(TMP_DIR)tclWinThrd.obj 
  281. $(TMP_DIR)tclWinTime.obj 
  282. !if !$(STATIC_BUILD)
  283. $(TMP_DIR)tcl.res
  284. !endif
  285. TCLSTUBOBJS = $(TMP_DIR)tclStubLib.obj
  286. ### The following paths CANNOT have spaces in them.
  287. COMPATDIR = $(ROOT)compat
  288. DOCDIR = $(ROOT)doc
  289. GENERICDIR = $(ROOT)generic
  290. TOOLSDIR = $(ROOT)tools
  291. WINDIR = $(ROOT)win
  292. #---------------------------------------------------------------------
  293. # Compile flags
  294. #---------------------------------------------------------------------
  295. !if !$(DEBUG)
  296. !if $(OPTIMIZING)
  297. ### This cranks the optimization level to maximize speed
  298. cdebug = -O2 $(OPTIMIZATIONS)
  299. !else
  300. cdebug =
  301. !endif
  302. !else if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
  303. ### Warnings are too many, can't support warnings into errors.
  304. cdebug = -Zi -Od $(DEBUGFLAGS)
  305. !else
  306. cdebug = -Zi -WX $(DEBUGFLAGS)
  307. !endif
  308. ### Declarations common to all compiler options
  309. cwarn = -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE
  310. cflags = -nologo -c $(COMPILERFLAGS) $(cwarn) -Fp$(TMP_DIR)^
  311. !if $(FULLWARNINGS)
  312. cflags = $(cflags) -W4
  313. !else
  314. cflags = $(cflags) -W3
  315. !endif
  316. !if $(MSVCRT)
  317. !if "$(DBGX)" == ""
  318. crt = -MD
  319. !else
  320. crt = -MDd
  321. !endif
  322. !else
  323. !if "$(DBGX)" == ""
  324. crt = -MT
  325. !else
  326. crt = -MTd
  327. !endif
  328. !endif
  329. TCL_INCLUDES = -I"$(WINDIR)" -I"$(GENERICDIR)"
  330. BASE_CFLAGS = $(cflags) $(cdebug) $(crt) $(TCL_INCLUDES) 
  331. -DTCL_PIPE_DLL="$(TCLPIPEDLLNAME)"
  332. CON_CFLAGS = $(cflags) $(cdebug) $(crt) -DCONSOLE
  333. TCL_CFLAGS = $(BASE_CFLAGS) $(OPTDEFINES)
  334. #---------------------------------------------------------------------
  335. # Link flags
  336. #---------------------------------------------------------------------
  337. !if $(DEBUG)
  338. ldebug = -debug:full -debugtype:cv
  339. !else
  340. ldebug = -release -opt:ref -opt:icf,3
  341. !endif
  342. ### Declarations common to all linker options
  343. lflags = -nologo -machine:$(MACHINE) $(LINKERFLAGS) $(ldebug)
  344. !if $(FULLWARNINGS)
  345. lflags = $(lflags) -warn:3
  346. !endif
  347. !if $(PROFILE)
  348. lflags = $(lflags) -profile
  349. !endif
  350. !if $(ALIGN98_HACK) && !$(STATIC_BUILD)
  351. ### Align sections for PE size savings.
  352. lflags = $(lflags) -opt:nowin98
  353. !else if !$(ALIGN98_HACK) && $(STATIC_BUILD)
  354. ### Align sections for speed in loading by choosing the virtual page size.
  355. lflags = $(lflags) -align:4096
  356. !endif
  357. !if $(LOIMPACT)
  358. lflags = $(lflags) -ws:aggressive
  359. !endif
  360. dlllflags = $(lflags) -dll
  361. conlflags = $(lflags) -subsystem:console
  362. guilflags = $(lflags) -subsystem:windows
  363. baselibs  = kernel32.lib advapi32.lib user32.lib
  364. # Avoid 'unresolved external symbol __security_cookie' errors.
  365. # c.f. http://support.microsoft.com/?id=894573
  366. !if "$(MACHINE)" == "IA64" || "$(MACHINE)" == "AMD64"
  367. baselibs   = $(baselibs) bufferoverflowU.lib
  368. !endif
  369. #---------------------------------------------------------------------
  370. # TclTest flags
  371. #---------------------------------------------------------------------
  372. !if "$(TESTPAT)" != ""
  373. TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
  374. !endif
  375. #---------------------------------------------------------------------
  376. # Project specific targets
  377. #---------------------------------------------------------------------
  378. release:    setup $(TCLSH) $(TCLSTUBLIB) dlls
  379. core:     setup $(TCLLIB) $(TCLSTUBLIB)
  380. shell:     setup $(TCLSH)
  381. dlls:     setup $(TCLPIPEDLL) $(TCLREGLIB) $(TCLDDELIB)
  382. all:     setup $(TCLSH) $(TCLSTUBLIB) dlls $(CAT32) 
  383. tcltest:    setup $(TCLTEST) dlls $(CAT32)
  384. install:    install-binaries install-libraries install-docs
  385. test: setup $(TCLTEST) dlls $(CAT32)
  386. set TCL_LIBRARY=$(ROOT)/library
  387. !if "$(OS)" == "Windows_NT"  || "$(MSVCDIR)" == "IDE"
  388. $(TCLTEST) "$(ROOT)/tests/all.tcl" $(TESTFLAGS)
  389. !else
  390. $(TCLTEST) "$(ROOT)/tests/all.tcl" $(TESTFLAGS) > tests.log
  391. type tests.log | more
  392. !endif
  393. runtest: setup $(TCLTEST) dlls $(CAT32)
  394. set TCL_LIBRARY=$(ROOT)/library
  395. $(TCLTEST)
  396. setup:
  397. @if not exist $(OUT_DIR)nul mkdir $(OUT_DIR)
  398. @if not exist $(TMP_DIR)nul mkdir $(TMP_DIR)
  399. !if !$(STATIC_BUILD)
  400. $(TCLIMPLIB): $(TCLLIB)
  401. !endif
  402. $(TCLLIB): $(TCLOBJS)
  403. !if $(STATIC_BUILD)
  404. $(lib32) -nologo -out:$@ @<<
  405. $**
  406. <<
  407. !else
  408. $(link32) $(dlllflags) -base:@$(WINDIR)coffbase.txt,tcl -out:$@ 
  409. $(baselibs) @<<
  410. $**
  411. <<
  412. $(_VC_MANIFEST_EMBED_DLL)
  413. -@del $*.exp
  414. !endif
  415. $(TCLSTUBLIB): $(TCLSTUBOBJS)
  416. $(lib32) -nologo -out:$@ $(TCLSTUBOBJS)
  417. $(TCLSH): $(TCLSHOBJS) $(TCLIMPLIB)
  418. $(link32) $(conlflags) -stack:2300000 -out:$@ $(baselibs) $**
  419. $(_VC_MANIFEST_EMBED_EXE)
  420. $(TCLTEST): $(TCLTESTOBJS) $(TCLIMPLIB)
  421. $(link32) $(conlflags) -stack:2300000 -out:$@ $(baselibs) $**
  422. $(_VC_MANIFEST_EMBED_EXE)
  423. $(TCLPIPEDLL): $(WINDIR)stub16.c
  424. $(cc32) $(CON_CFLAGS) -Fo$(TMP_DIR) $(WINDIR)stub16.c
  425. $(link32) $(conlflags) -out:$@ $(TMP_DIR)stub16.obj $(baselibs)
  426. $(_VC_MANIFEST_EMBED_DLL)
  427. !if $(STATIC_BUILD)
  428. $(TCLDDELIB): $(TMP_DIR)tclWinDde.obj
  429. $(lib32) -nologo -out:$@ $(TMP_DIR)tclWinDde.obj
  430. !else
  431. $(TCLDDELIB): $(TMP_DIR)tclWinDde.obj $(TCLSTUBLIB)
  432. $(link32) $(dlllflags) -base:@$(WINDIR)coffbase.txt,tcldde -out:$@ 
  433. $** $(baselibs)
  434. $(_VC_MANIFEST_EMBED_DLL)
  435. -@del $*.exp
  436. -@del $*.lib
  437. !endif
  438. !if $(STATIC_BUILD)
  439. $(TCLREGLIB): $(TMP_DIR)tclWinReg.obj
  440. $(lib32) -nologo -out:$@ $(TMP_DIR)tclWinReg.obj
  441. !else
  442. $(TCLREGLIB): $(TMP_DIR)tclWinReg.obj $(TCLSTUBLIB)
  443. $(link32) $(dlllflags) -base:@$(WINDIR)coffbase.txt,tclreg -out:$@ 
  444. $** $(baselibs)
  445. $(_VC_MANIFEST_EMBED_DLL)
  446. -@del $*.exp
  447. -@del $*.lib
  448. !endif
  449. $(CAT32): $(WINDIR)cat.c
  450. $(cc32) $(CON_CFLAGS) -Fo$(TMP_DIR) $?
  451. $(link32) $(conlflags) -out:$@ -stack:16384 $(TMP_DIR)cat.obj 
  452. $(baselibs)
  453. $(_VC_MANIFEST_EMBED_EXE)
  454. #---------------------------------------------------------------------
  455. # Regenerate the stubs files.  [Development use only]
  456. #---------------------------------------------------------------------
  457. genstubs:
  458. !if !exist($(TCLSH))
  459. @echo Build tclsh first!
  460. !else
  461. $(TCLSH) $(TOOLSDIR:=/)genStubs.tcl $(GENERICDIR:=/) 
  462. $(GENERICDIR:=/)/tcl.decls $(GENERICDIR:=/)/tclInt.decls
  463. !endif
  464. #---------------------------------------------------------------------
  465. # Generate the makefile depedancies.
  466. #---------------------------------------------------------------------
  467. depend:
  468. !if !exist($(TCLSH))
  469. @echo Build tclsh first!
  470. !else
  471. $(TCLSH) $(TOOLSDIR:=/)/mkdepend.tcl -vc32 -out:"$(OUT_DIR)depend.mk" 
  472. -passthru:"-DBUILD_tcl $(TCL_INCLUDES:"="")" $(GENERICDIR) 
  473. $(COMPATDIR) $(WINDIR) @<<
  474. $(TCLOBJS)
  475. <<
  476. !endif
  477. #---------------------------------------------------------------------
  478. # Build the windows help file.
  479. #---------------------------------------------------------------------
  480. TCLHLPBASE = $(PROJECT)$(VERSION)
  481. HELPFILE = $(OUT_DIR)$(TCLHLPBASE).hlp
  482. HELPCNT = $(OUT_DIR)$(TCLHLPBASE).cnt
  483. DOCTMP_DIR = $(OUT_DIR)$(PROJECT)_docs
  484. HELPRTF = $(DOCTMP_DIR)$(PROJECT).rtf
  485. MAN2HELP = $(DOCTMP_DIR)man2help.tcl
  486. MAN2HELP2 = $(DOCTMP_DIR)man2help2.tcl
  487. INDEX = $(DOCTMP_DIR)index.tcl
  488. BMP = $(DOCTMP_DIR)feather.bmp
  489. BMP_NOPATH = feather.bmp
  490. MAN2TCL = $(DOCTMP_DIR)man2tcl.exe
  491. winhelp: docsetup $(HELPFILE)
  492. docsetup:
  493. @if not exist $(DOCTMP_DIR)nul mkdir $(DOCTMP_DIR)
  494. $(MAN2HELP) $(MAN2HELP2) $(INDEX) $(BMP): $(TOOLSDIR)$$(@F)
  495. @$(CPY) $(TOOLSDIR)$(@F) $(@D)
  496. $(HELPFILE): $(HELPRTF) $(BMP)
  497. cd $(DOCTMP_DIR)
  498. start /wait hcrtf.exe -x <<$(PROJECT).hpj
  499. [OPTIONS]
  500. COMPRESS=12 Hall Zeck
  501. LCID=0x409 0x0 0x0 ; English (United States)
  502. TITLE=Tcl/Tk Reference Manual
  503. BMROOT=.
  504. CNT=$(@B).cnt
  505. HLP=$(@B).hlp
  506. [FILES]
  507. $(PROJECT).rtf
  508. [WINDOWS]
  509. main="Tcl/Tk Reference Manual",,27648,(r15263976),(r65535)
  510. [CONFIG]
  511. BrowseButtons()
  512. CreateButton(1, "Web", ExecFile("http://www.tcl.tk"))
  513. CreateButton(2, "SF", ExecFile("http://sf.net/projects/tcl"))
  514. CreateButton(3, "Wiki", ExecFile("http://wiki.tcl.tk"))
  515. CreateButton(4, "FAQ", ExecFile("http://www.purl.org/NET/Tcl-FAQ/"))
  516. <<
  517. cd $(MAKEDIR)
  518. @$(CPY) "$(DOCTMP_DIR)$(@B).hlp" "$(OUT_DIR)"
  519. @$(CPY) "$(DOCTMP_DIR)$(@B).cnt" "$(OUT_DIR)"
  520. $(MAN2TCL): $(TOOLSDIR)$$(@B).c
  521. $(cc32) $(TCL_CFLAGS) -Fo$(@D) $(TOOLSDIR)$(@B).c
  522. $(link32) $(conlflags) -out:$@ -stack:16384 $(@D)man2tcl.obj
  523. $(_VC_MANIFEST_EMBED_EXE)
  524. $(HELPRTF): $(MAN2TCL) $(MAN2HELP) $(MAN2HELP2) $(INDEX) $(DOCDIR)*
  525. $(TCLSH) $(MAN2HELP) -bitmap $(BMP_NOPATH) $(PROJECT) $(VERSION) $(DOCDIR:=/)
  526. install-docs:
  527. !if exist($(HELPFILE))
  528. @$(CPY) "$(HELPFILE)" "$(DOC_INSTALL_DIR)"
  529. @$(CPY) "$(HELPCNT)" "$(DOC_INSTALL_DIR)"
  530. !endif
  531. #---------------------------------------------------------------------
  532. # Special case object file targets
  533. #---------------------------------------------------------------------
  534. $(TMP_DIR)testMain.obj: $(WINDIR)tclAppInit.c
  535. !if $(TCL_USE_STATIC_PACKAGES)
  536. $(cc32) $(TCL_CFLAGS) -DTCL_TEST -DTCL_USE_STATIC_PACKAGES -Fo$@ $?
  537. !else
  538. $(cc32) $(TCL_CFLAGS) -DTCL_TEST -Fo$@ $?
  539. !endif
  540. $(TMP_DIR)tclTest.obj: $(GENERICDIR)tclTest.c
  541. $(cc32) $(TCL_CFLAGS) -Fo$@ $?
  542. $(TMP_DIR)tclTestObj.obj: $(GENERICDIR)tclTestObj.c
  543. $(cc32) $(TCL_CFLAGS) -Fo$@ $?
  544. $(TMP_DIR)tclWinTest.obj: $(WINDIR)tclWinTest.c
  545. $(cc32) $(TCL_CFLAGS) -Fo$@ $?
  546. $(TMP_DIR)tclAppInit.obj: $(WINDIR)tclAppInit.c
  547. !if $(TCL_USE_STATIC_PACKAGES)
  548. $(cc32) $(TCL_CFLAGS) -DTCL_USE_STATIC_PACKAGES -Fo$@ $?
  549. !else
  550. $(cc32) $(TCL_CFLAGS) -Fo$@ $?
  551. !endif
  552. ### The following objects should be built using the stub interfaces
  553. ### *ALL* extensions need to built with -DTCL_THREADS=1
  554. $(TMP_DIR)tclWinReg.obj: $(WINDIR)tclWinReg.c
  555. !if $(STATIC_BUILD)
  556. $(cc32) $(BASE_CFLAGS) -DTCL_THREADS=1 -DSTATIC_BUILD -Fo$@ $?
  557. !else
  558. $(cc32) $(BASE_CFLAGS) -DTCL_THREADS=1 -DUSE_TCL_STUBS -Fo$@ $?
  559. !endif
  560. $(TMP_DIR)tclWinDde.obj: $(WINDIR)tclWinDde.c
  561. !if $(STATIC_BUILD)
  562. $(cc32) $(BASE_CFLAGS) -DTCL_THREADS=1 -DSTATIC_BUILD -Fo$@ $?
  563. !else
  564. $(cc32) $(BASE_CFLAGS) -DTCL_THREADS=1 -DUSE_TCL_STUBS -Fo$@ $?
  565. !endif
  566. ### The following objects are part of the stub library and should not
  567. ### be built as DLL objects.  -Zl is used to avoid a dependancy on any
  568. ### specific C run-time.
  569. $(TMP_DIR)tclStubLib.obj: $(GENERICDIR)tclStubLib.c
  570. $(cc32) $(cdebug) $(cflags) -Zl -DSTATIC_BUILD $(TCL_INCLUDES) -Fo$@ $?
  571. #---------------------------------------------------------------------
  572. # Dedependency rules
  573. #---------------------------------------------------------------------
  574. $(GENERICDIR)regcomp.c: 
  575. $(GENERICDIR)regguts.h 
  576. $(GENERICDIR)regc_lex.c 
  577. $(GENERICDIR)regc_color.c 
  578. $(GENERICDIR)regc_nfa.c 
  579. $(GENERICDIR)regc_cvec.c 
  580. $(GENERICDIR)regc_locale.c
  581. $(GENERICDIR)regcustom.h: 
  582. $(GENERICDIR)tclInt.h 
  583. $(GENERICDIR)tclPort.h 
  584. $(GENERICDIR)regex.h
  585. $(GENERICDIR)regexec.c: 
  586. $(GENERICDIR)rege_dfa.c 
  587. $(GENERICDIR)regguts.h
  588. $(GENERICDIR)regerror.c: $(GENERICDIR)regguts.h
  589. $(GENERICDIR)regfree.c: $(GENERICDIR)regguts.h
  590. $(GENERICDIR)regfronts.c: $(GENERICDIR)regguts.h
  591. $(GENERICDIR)regguts.h: $(GENERICDIR)regcustom.h
  592. !if exist("$(OUT_DIR)depend.mk")
  593. !include "$(OUT_DIR)depend.mk"
  594. !message *** Dependency rules in effect.
  595. !else
  596. !message *** Dependency rules are not being used.
  597. !endif
  598. ### add a spacer in the output
  599. !message
  600. #---------------------------------------------------------------------
  601. # Implicit rules
  602. #---------------------------------------------------------------------
  603. {$(WINDIR)}.c{$(TMP_DIR)}.obj::
  604.     $(cc32) $(TCL_CFLAGS) -DBUILD_tcl -Fo$(TMP_DIR) @<<
  605. $<
  606. <<
  607. {$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
  608.     $(cc32) $(TCL_CFLAGS) -DBUILD_tcl -Fo$(TMP_DIR) @<<
  609. $<
  610. <<
  611. {$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
  612.     $(cc32) $(TCL_CFLAGS) -DBUILD_tcl -Fo$(TMP_DIR) @<<
  613. $<
  614. <<
  615. {$(WINDIR)}.rc{$(TMP_DIR)}.res:
  616. $(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ 
  617. !if $(DEBUG)
  618. -d DEBUG 
  619. !endif
  620. !if $(TCL_THREADS)
  621. -d TCL_THREADS 
  622. !endif
  623. !if $(STATIC_BUILD)
  624. -d STATIC_BUILD 
  625. !endif
  626. $<
  627. .SUFFIXES:
  628. .SUFFIXES:.c .rc
  629. #---------------------------------------------------------------------
  630. # Installation.
  631. #---------------------------------------------------------------------
  632. install-binaries:
  633. @echo Installing to '$(_INSTALLDIR)'
  634. @echo installing $(TCLLIBNAME)
  635. !if "$(TCLLIB)" != "$(TCLIMPLIB)"
  636. @$(CPY) "$(TCLLIB)" "$(BIN_INSTALL_DIR)"
  637. !endif
  638. @$(CPY) "$(TCLIMPLIB)" "$(LIB_INSTALL_DIR)"
  639. !if exist($(TCLSH))
  640. @echo installing $(TCLSHNAME)
  641. @$(CPY) "$(TCLSH)" "$(BIN_INSTALL_DIR)"
  642. !endif
  643. !if exist($(TCLPIPEDLL))
  644. @echo installing $(TCLPIPEDLLNAME)
  645. @$(CPY) "$(TCLPIPEDLL)" "$(BIN_INSTALL_DIR)"
  646. !endif
  647. @echo installing $(TCLSTUBLIBNAME)
  648. @$(CPY) "$(TCLSTUBLIB)" "$(LIB_INSTALL_DIR)"
  649. install-libraries:
  650. @echo installing http1.0
  651. @$(CPY) "$(ROOT)libraryhttp1.0*.tcl" 
  652. "$(SCRIPT_INSTALL_DIR)http1.0"
  653. @echo installing http2.5
  654. @$(CPY) "$(ROOT)libraryhttp*.tcl" 
  655. "$(SCRIPT_INSTALL_DIR)http2.5"
  656. @echo installing opt0.4
  657. @$(CPY) "$(ROOT)libraryopt*.tcl" 
  658. "$(SCRIPT_INSTALL_DIR)opt0.4"
  659. @echo installing msgcat1.3
  660. @$(CPY) "$(ROOT)librarymsgcat*.tcl" 
  661.     "$(SCRIPT_INSTALL_DIR)msgcat1.3"
  662. @echo installing tcltest2.2 
  663. @$(CPY) "$(ROOT)librarytcltest*.tcl" 
  664.     "$(SCRIPT_INSTALL_DIR)tcltest2.2"
  665. @echo installing $(TCLDDELIBNAME)
  666. !if $(STATIC_BUILD)
  667. @$(CPY) "$(TCLDDELIB)" "$(LIB_INSTALL_DIR)"
  668. !else
  669. @$(CPY) "$(TCLDDELIB)" "$(LIB_INSTALL_DIR)dde$(DDEDOTVERSION)"
  670. @$(CPY) "$(ROOT)libraryddepkgIndex.tcl" 
  671.     "$(LIB_INSTALL_DIR)dde$(DDEDOTVERSION)"
  672. !endif
  673. @echo installing $(TCLREGLIBNAME)
  674. !if $(STATIC_BUILD)
  675. @$(CPY) "$(TCLREGLIB)" "$(LIB_INSTALL_DIR)"
  676. !else
  677. @$(CPY) "$(TCLREGLIB)" "$(LIB_INSTALL_DIR)reg$(REGDOTVERSION)"
  678. @$(CPY) "$(ROOT)libraryregpkgIndex.tcl" 
  679.     "$(LIB_INSTALL_DIR)reg$(REGDOTVERSION)"
  680. !endif
  681. @echo installing encoding files
  682. @$(CPY) "$(ROOT)libraryencoding*.enc" 
  683. "$(SCRIPT_INSTALL_DIR)encoding"
  684. @echo installing library files
  685. @$(CPY) "$(GENERICDIR)tcl.h"          "$(INCLUDE_INSTALL_DIR)"
  686. @$(CPY) "$(GENERICDIR)tclDecls.h"     "$(INCLUDE_INSTALL_DIR)"
  687. @$(CPY) "$(GENERICDIR)tclPlatDecls.h" "$(INCLUDE_INSTALL_DIR)"
  688. @$(CPY) "$(ROOT)libraryhistory.tcl"  "$(SCRIPT_INSTALL_DIR)"
  689. @$(CPY) "$(ROOT)libraryinit.tcl"     "$(SCRIPT_INSTALL_DIR)"
  690. @$(CPY) "$(ROOT)libraryldAout.tcl"   "$(SCRIPT_INSTALL_DIR)"
  691. @$(CPY) "$(ROOT)libraryparray.tcl"   "$(SCRIPT_INSTALL_DIR)"
  692. @$(CPY) "$(ROOT)librarysafe.tcl"     "$(SCRIPT_INSTALL_DIR)"
  693. @$(CPY) "$(ROOT)librarytclIndex"     "$(SCRIPT_INSTALL_DIR)"
  694. @$(CPY) "$(ROOT)librarypackage.tcl"  "$(SCRIPT_INSTALL_DIR)"
  695. @$(CPY) "$(ROOT)libraryword.tcl"     "$(SCRIPT_INSTALL_DIR)"
  696. @$(CPY) "$(ROOT)libraryauto.tcl"     "$(SCRIPT_INSTALL_DIR)"
  697. #---------------------------------------------------------------------
  698. # Clean up
  699. #---------------------------------------------------------------------
  700. tidy:
  701. @echo Removing $(TCLLIB) ...
  702. @if exist $(TCLLIB) del $(TCLLIB)
  703. @echo Removing $(TCLSH) ...
  704. @if exist $(TCLSH) del $(TCLSH)
  705. @echo Removing $(TCLTEST) ...
  706. @if exist $(TCLTEST) del $(TCLTEST)
  707. @echo Removing $(TCLDDELIB) ...
  708. @if exist $(TCLDDELIB) del $(TCLDDELIB)
  709. @echo Removing $(TCLREGLIB) ...
  710. @if exist $(TCLREGLIB) del $(TCLREGLIB)
  711. clean:
  712. @echo Cleaning $(TMP_DIR)* ...
  713. @if exist $(TMP_DIR)nul $(RMDIR) $(TMP_DIR)
  714. hose:
  715. @echo Hosing $(OUT_DIR)* ...
  716. @if exist $(OUT_DIR)nul $(RMDIR) $(OUT_DIR)