Advertisement
Guest User

makefile.new

a guest
Mar 20th, 2010
8,270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 352.40 KB | None | 0 0
  1.  
  2. !IF 0
  3.  
  4. Copyright (c) Microsoft Corporation
  5.  
  6. Module Name:
  7.  
  8. makefile.def
  9.  
  10. Abstract:
  11.  
  12. This is the standard makefile for the components of the NT project.
  13. It includes the following files:
  14.  
  15. .\sources. - developer supplies this file. It defines the
  16. required TARGETNAME, TARGETTYPE and
  17. SOURCES as well as optional macros that control
  18. the behavior of the compiler and linker:
  19.  
  20. $(OBJ_PATH)\$O\_objects.mac - built by BUILD.EXE from .\sources.
  21.  
  22.  
  23. Targets:
  24.  
  25. all - Builds all targets in this make file
  26.  
  27.  
  28. Useful Variables Set:
  29.  
  30. CPUTYPE={I386|IA64|AMD64|ARM}
  31.  
  32. Optional Controls Variables (partial list), these are environment variables,
  33. remember they can be set with env=value on the command line as well:
  34.  
  35. NOTE: xxx_... is {MSC|386|ia64|amd64} where MSC_ applies to the C compiler
  36. independent of the cpu type. Specific cpu_ will take precedence
  37. over the equivalent MSC_ variable.
  38.  
  39. NTKERNEL=filename
  40.  
  41. UMAPPL=filename
  42.  
  43. NT_UP
  44. Define as 0 in environment to turn on MP.
  45. If undefined or equal to 1, you get UP.
  46.  
  47. xxx_warning_level
  48.  
  49. xxx_optimization
  50.  
  51. xxx_STDCALL = 1 use _stdcall calling convention
  52. 0 use _cdecl calling convention
  53.  
  54. NTDEBUG
  55.  
  56. BROWSER_INFO
  57.  
  58. NT_INST - set to turn on instrumentation
  59.  
  60. BASEDIR - \nt or \ntrel (default \nt)
  61.  
  62. PRECOMPILED_CXX=1 - do precompiled headers for CXX instead of C files
  63. note: precompiled headers can not be used on both
  64. c and cxx files in a single directory.
  65. !ENDIF
  66.  
  67.  
  68. #
  69. # Managed code is x86 and is very slow on IA64, doubling build times.
  70. # Turn off some of the build tools that use managed code.
  71. # More critical x86 tools remain -- csc.exe, managed C++ cl.exe.
  72. #
  73. !if "$(HOST_PROCESSOR_ARCHITECTURE)" == "ia64" || "$(PROCESSOR_ARCHITECTURE)" == "IA64"
  74.  
  75. DISABLE_CV=1
  76. !undef DO_LSBUILD
  77.  
  78. !endif
  79.  
  80. # Store away the original value of %_NTTREE% so we can use it later
  81. # for things like LCG creation that binplace extra generated files
  82. # to a different root under %_NTTREE% with %_ALT_TARGET_PATH% (if set)
  83. # appended after that.
  84. !if [set NTTREE_ORIG=$(_NTTREE)]
  85. !endif
  86.  
  87. !ifdef BINPLACE_LOG
  88. BUILD_LOGS=$(BINPLACE_LOG)\..
  89. !if !exist($(BUILD_LOGS)\sidebyside)
  90. !if [mkdir $(BUILD_LOGS)\sidebyside 2>nul]
  91. !endif
  92. !endif
  93. !endif
  94.  
  95. # See if the user wants BROWSER_INFO.
  96. !ifdef BROWSER_INFO
  97. USER_ENV_BROWSER_INFO=1
  98. !endif
  99.  
  100. !ifndef MUI
  101. MUI=1
  102. !endif
  103.  
  104. #
  105. # Select build target and set platform specific variables.
  106. #
  107.  
  108. !ifdef BUILD_ALLOW_ALL_WARNINGS
  109. BUILD_ALLOW_LINKER_WARNINGS=1
  110. BUILD_ALLOW_COMPILER_WARNINGS=1
  111. !endif
  112. BUILD_ALLOW_MIDL_WARNINGS=1
  113.  
  114. !ifndef BUILD_ALLOW_LINKER_WARNINGS
  115. LINKER_WX_SWITCH=/WX
  116. !else
  117. LINKER_WX_SWITCH=
  118. !endif
  119.  
  120. !ifndef BUILD_ALLOW_COMPILER_WARNINGS
  121. COMPILER_WX_SWITCH=/WX
  122. !else
  123. COMPILER_WX_SWITCH=
  124. !endif
  125.  
  126. !ifndef BUILD_ALLOW_MIDL_WARNINGS
  127. MIDL_WX_SWITCH=/WX
  128. !else
  129. MIDL_WX_SWITCH=
  130. !endif
  131.  
  132. !include $(NTMAKEENV)\makefile.plt
  133.  
  134. !ifndef MASTER_VERSION_FILE
  135. !if "$(POCKETPC)" == ""
  136. MASTER_VERSION_FILE = $(SDK_INC_PATH)\ntverp.h
  137. !endif
  138. DEFAULT_VERSION_FILE=1
  139. !endif
  140.  
  141. !if exist($(OBJECT_ROOT)\$O\ntverpmk.inc)
  142. !include $(OBJECT_ROOT)\$O\ntverpmk.inc
  143. !endif
  144.  
  145. !ifdef OFFICIAL_BUILD_MACHINE
  146. TARGET_DBG_DEFINES=$(TARGET_DBG_DEFINES) /DOFFICIAL_BUILD=1
  147. BBT_BINPLACE_PREBBT=1
  148. !endif
  149.  
  150. BINPLACE_INSTRUMENTED_BINARIES=1
  151.  
  152. #
  153. # Optionally include version and public key information from generated file.
  154. # The file is large and slow to be processed by nmake so we only use it if
  155. # it is asked for.
  156. #
  157. !if defined(USE_VERSIONS)
  158. !if "$(USE_VERSIONS)" != "1"
  159. !error The only legal value for USE_VERSIONS is 1.
  160. !endif
  161. !if exist($(OBJECT_ROOT)\$O\versionsmk.inc)
  162. !include $(OBJECT_ROOT)\$O\versionsmk.inc
  163. !endif
  164. !endif
  165.  
  166. !ifndef LANGUAGE
  167. LANGUAGE=usa
  168. !endif
  169.  
  170. #
  171. # Include the developer supplied file that defines the TARGETNAME,
  172. # TARGETTYPE and SOURCES macros. Make sure it defines them.
  173. #
  174.  
  175. !ifdef USE_CAPK
  176. # Kernel profiling - icecap api's come from the kernel or from rtl\icecap.c when building the kernel/hal/ntdll
  177. USE_ICECAP4=1
  178. PERFLIBS=
  179. !endif
  180.  
  181. !if defined(USE_ICECAP) || defined(USE_ICECAP4) || defined(USE_DLP)
  182. ! ifdef USE_ICECAP
  183. PERFFLAGS=-Gh
  184. PERFLIBS=$(SDK_LIB_PATH)\icap.lib
  185. ! else
  186. ! ifdef USE_ICECAP4
  187. PERFFLAGS=/fastcap
  188. ! else # USE_DLP
  189. PERFFLAGS=/dlp
  190. ! endif
  191. ! ifndef PERFLIBS
  192. PERFLIBS=$(SDK_LIB_PATH)\icecap.lib
  193. ! endif
  194. ! endif
  195. ! if $(FREEBUILD)
  196. NTDEBUG=ntsdnodbg
  197. ! else
  198. NTDEBUG=ntsd
  199. ! endif
  200. NTDEBUGTYPE=windbg
  201. !endif
  202.  
  203. #
  204. # If you want to run on an older version of the OS, then set
  205. # _NT_TARGET_VERSION to one of the below in your sources file
  206. #
  207.  
  208. _NT_TARGET_VERSION_LATEST =$(__LATEST_NT_TARGET_VERSION)
  209. _NT_TARGET_VERSION_WIN7 =0x601
  210. _NT_TARGET_VERSION_VISTA =0x600
  211. _NT_TARGET_VERSION_LONGHORN =0x600
  212. _NT_TARGET_VERSION_WS03 =0x502
  213. _NT_TARGET_VERSION_WINXP =0x501
  214. _NT_TARGET_VERSION_WIN2K =0x500
  215. _NT_TARGET_VERSION_NT4 =0x400
  216.  
  217. #
  218. # Most current defaults for version info, can be overridden explicitly or
  219. # by setting _NT_TARGET_VERSION in your sources file
  220. #
  221.  
  222. LATEST_NTDDI_VERSION =0x06010000
  223.  
  224. LATEST_WIN32_IE_VERSION =0x0800
  225. LATEST_WIN32_WINNT_VERSION =0x0601
  226.  
  227. LATEST_WIN32_WIN95_VERSION =0x0400
  228. LATEST_WIN32_WCE_VERSION =0x0300
  229. LATEST_SUBSYSTEM_VERSION =6.01
  230.  
  231. #
  232. # Run miscfiles rules during both compile and link phases. Sources file
  233. # can override by setting this a value other than 0
  234. #
  235.  
  236. MISCFILES_DURING_LINK=0
  237.  
  238. # Validate INTL_DEPOT if it's set
  239. !if defined (INTL_DEPOT)
  240. ! if "$(INTL_DEPOT)" != "1"
  241. ! error INTL_DEPOT can only be set to 1
  242. ! endif
  243. !endif
  244.  
  245. #
  246. # Special macros used to point to things in %_NTTREE%\loc\src.
  247. # Can be used throughout this makefile and in sources files.
  248. #
  249. LOC_DIR=loc
  250. LOC_SRC=$(LOC_DIR)\src
  251. LOC_BIN=$(LOC_SRC)\bin
  252. LOC_MULTI=$(LOC_SRC)\multi
  253. LOC_LCG=$(LOC_SRC)\LCG
  254. !if "$(INTL_DEPOT)" == "1"
  255. LOC_PRELOC=$(LOC_DIR)\bindrop
  256. !else
  257. LOC_PRELOC=$(LOC_SRC)\preloc
  258. !endif
  259.  
  260. #
  261. # Set LOC_UA properly so it can be used in sources files. NOTE: This is _not_
  262. # for use in the rest of this makefile. We do this here to allow PRELOC_LANG
  263. # or PRELOC_BASE_LANG to be set in project.mk and have that affect what LOC_UA
  264. # is set to in their sources files. This is how the UA bits in the Intl depots work.
  265. #
  266. !if defined(PRELOC_LANG)
  267. LOC_UA=$(LOC_PRELOC)\$(PRELOC_LANG)\UA
  268. LOC_EULA=$(LOC_PRELOC)\$(PRELOC_LANG)
  269. !else
  270. # This covers the case of PRELOC_BASE_LANG=1 and of neither PRELOC_BASE_LANG
  271. # or PRELOC_LANG being set - we default to the same location in both cases.
  272. LOC_UA=$(LOC_BIN)\UA
  273. LOC_EULA=$(LOC_BIN)
  274. !endif
  275.  
  276.  
  277.  
  278. !INCLUDE .\sources
  279. SOURCES_USED=$(SOURCES_USED) .\sources
  280.  
  281. #
  282. # Attempt to include the sources file from the target subdirectory.
  283. #
  284. !IF EXIST(.\$(TARGET_DIRECTORY)\sources)
  285. !message BUILDMSG: $(MAKEDIR): this directory includes .\$(TARGET_DIRECTORY)\sources. This may override macros specificed in $(MAKEDIR)\sources.
  286. ! INCLUDE .\$(TARGET_DIRECTORY)\sources
  287. SOURCES_USED=$(SOURCES_USED) .\$(TARGET_DIRECTORY)\sources
  288. !ENDIF
  289.  
  290. #
  291. # Attempt to include the sources file from the parent target subdirectory.
  292. #
  293.  
  294. !IF EXIST(..\$(TARGET_DIRECTORY)\sources)
  295. !message BUILDMSG: $(MAKEDIR): this directory includes ..\$(TARGET_DIRECTORY)\sources. This may override macros specificed in $(MAKEDIR)\sources.
  296. ! INCLUDE ..\$(TARGET_DIRECTORY)\sources
  297. SOURCES_USED=$(SOURCES_USED) ..\$(TARGET_DIRECTORY)\sources
  298. !ENDIF
  299.  
  300.  
  301. # move into build.exe for perf
  302.  
  303. #
  304. # People tend to think that just because their C++ code #includes some midl output, they need BUILD_PASS0_CONSUMES, or
  305. # that all managed code needs BUILD_PASS0_CONSUMES or BUILD_CONSUMES. These are false.
  306. #
  307. !if defined(BUILD_PASS0_CONSUMES)
  308. # net\peernet\collabspaces\src\collabhookhost uses $(TARGET_DIRECTORY)_SOURCES
  309. # some directories do use capital .IDL
  310. # CONSIDER: move this into build.exe.
  311. !if !defined(NTTARGETFILE0) \
  312. && "$(SOURCES:.idl=)" == "$(SOURCES)" && "$(SOURCES:.odl=)" == "$(SOURCES)" \
  313. && "$(SOURCES:.IDL=)" == "$(SOURCES)" && "$(SOURCES:.ODL=)" == "$(SOURCES)" \
  314. && "$(I386_SOURCES:.idl=)" == "$(I386_SOURCES)" && "$(I386_SOURCES:.odl=)" == "$(I386_SOURCES)" \
  315. && "$(I386_SOURCES:.IDL=)" == "$(I386_SOURCES)" && "$(I386_SOURCES:.ODL=)" == "$(I386_SOURCES)" \
  316. && "$(AMD64_SOURCES:.IDL=)" == "$(AMD64_SOURCES)" && "$(AMD64_SOURCES:.ODL=)" == "$(AMD64_SOURCES)" \
  317. && "$(AMD64_SOURCES:.idl=)" == "$(AMD64_SOURCES)" && "$(AMD64_SOURCES:.odl=)" == "$(AMD64_SOURCES)" \
  318. && "$(IA64_SOURCES:.idl=)" == "$(IA64_SOURCES)" && "$(IA64_SOURCES:.odl=)" == "$(IA64_SOURCES)" \
  319. && "$(IA64_SOURCES:.IDL=)" == "$(IA64_SOURCES)" && "$(IA64_SOURCES:.ODL=)" == "$(IA64_SOURCES)"
  320. !message $(MAKEDIR) BUILD_PASS0_CONSUMES is not needed here and is counterproductive; remove it.
  321. !endif
  322. !endif
  323.  
  324. !if defined(BUILD_PASS0_PRODUCES)
  325. !if !defined(NTTARGETFILE0) && "$(SOURCES:.idl=)" == "$(SOURCES)" && "$(SOURCES:.mc=)" == "$(SOURCES)" && "$(SOURCES:.odl=)" == "$(SOURCES)" \
  326. && "$(SOURCES:.IDL=)" == "$(SOURCES)" && "$(SOURCES:.MC=)" == "$(SOURCES)" && "$(SOURCES:.ODL=)" == "$(SOURCES)" \
  327. && !defined(EVENTS_MANIFEST) && !defined(SLS_LICENSING_MANIFEST) && !defined(PASS0_PUBLISH)
  328. !message $(MAKEDIR) BUILD_PASS0_PRODUCES is not needed here and is counterproductive; remove it.
  329. !endif
  330. !endif
  331.  
  332. !if (defined(BUILD_CONSUMES) || defined(BUILD_PRODUCES)) && ("$(TARGETTYPE)" == "PROGRAM" || "$(TARGETTYPE)" == "DRIVER")
  333. !message BUILDMSG: $(MAKEDIR): BUILD_CONSUMES/PRODUCES is unnecessary, remove it.
  334. !endif
  335.  
  336. #
  337. # move into build.exe for perf and then write result into _objects.mac
  338. #
  339. !if !defined(USE_DLLDEF_OBJECTS) && defined(DLLDEF_OBJECTS)
  340. USE_DLLDEF_OBJECTS=1
  341. !elseif !defined(USE_DLLDEF_OBJECTS)
  342. USE_DLLDEF_OBJECTS=0
  343. !elseif "$(USE_DLLDEF_OBJECTS)" != "0" && "$(USE_DLLDEF_OBJECTS)" != "1"
  344. ! error USE_DLLDEF_OBJECTS may only be 0 or 1 or not defined.
  345. USE_DLLDEF_OBJECTS=0
  346. !endif
  347.  
  348. !if defined(MCPP_TYPE) && "$(MCPP_TYPE)" != "pure" && "$(MCPP_TYPE)" != "safe"
  349. !error $(MAKEDIR) MCPP_TYPE must be pure or safe or not defined, but it is $(MCPP_TYPE).
  350. !endif
  351.  
  352. !if defined(INLCUDES)
  353. !error $(MAKEDIR): INLCUDES does nothing. Remove it.
  354. !endif
  355.  
  356. !if defined(PRECOMPILED_CXX) && "$(PRECOMPILED_CXX)" != "" && "$(PRECOMPILED_CXX)" != "1"
  357. !error $(MAKEDIR): PRECOMPILED_CXX has an invalid value, change it to 1.
  358. !endif
  359.  
  360. !if defined(USE_NATIVE_EH) && "$(USE_NATIVE_EH)" != "1" && "$(USE_NATIVE_EH)" != "ASYNC" && "$(USE_NATIVE_EH)" != "CTHROW"
  361. !error $(MAKEDIR): USE_NATIVE_EH has an invalid value, change it to 1.
  362. !endif
  363.  
  364.  
  365. !if defined(NTTEST)
  366. !error $(MAKEDIR): NTTEST does nothing. Remove it.
  367. !endif
  368.  
  369. #
  370. # Link binaries instrumented with IceCAP to NTOSKRNl.EXE or NTDLL.DLL to
  371. # obtain __CAP imports. Do not set C_DEFINES for catalogs.
  372. #
  373. !if defined(USE_CAPK)
  374. ! if "$(TARGETTYPE)" != "CATALOG"
  375. C_DEFINES=$(C_DEFINES) /D_CAPKERN=1
  376. ASM_DEFINES=$(ASM_DEFINES) /D_CAPKERN=1
  377. ! endif
  378. ! if defined(MANAGED_CXX)
  379. PERFFLAGS=$(PERFFLAGS:/fastcap=)
  380. ! endif
  381. ! if defined(USE_ICECAP4)
  382. ! if "$(TARGETTYPE)" == "PROGRAM" || "$(TARGETTYPE)" == "DYNLINK"
  383. ! if "$(TARGETLIBS)" == "$(TARGETLIBS:ntdll.lib=)"
  384. TARGETLIBS=$(SDK_LIB_PATH)\ntdll.lib $(TARGETLIBS)
  385. ! endif
  386. ! endif
  387. ! if "$(TARGETTYPE)" == "DRIVER" || "$(TARGETTYPE)" == "GDI_DRIVER" || "$(TARGETTYPE)" == "MINIPORT"
  388. ! if "$(TARGETLIBS)" == "$(TARGETLIBS:ntoskrnl.lib=)"
  389. TARGETLIBS=$(DDK_LIB_PATH)\ntoskrnl.lib $(TARGETLIBS)
  390. ! endif
  391. ! endif
  392. ! endif
  393. !endif
  394.  
  395. !if "$(USE_RUNTIME_CHECKS)" == "1" && !defined(RESOURCE_ONLY_DLL)
  396. ! if !defined(MANAGED_CXX)
  397. USER_C_FLAGS=$(USER_C_FLAGS) /RTCcsu /wd4748 /DMSC_NOOPT
  398. MSC_OPTIMIZATION=/Oi
  399. DEFAULT_MSC_OPT=/Oi
  400. 386_OPTIMIZATION=/Oi
  401. ! endif
  402. ! if !defined(MCPP_TYPE) && "$(TARGETTYPE)" != "CATALOG"
  403. ! if defined(NTKERNEL)
  404. KERNEL_LIBS=$(KERNEL_LIBS) $(MINWIN_PRIV_SDK_LIB_PATH)\RuntimeChecks.lib
  405. ! elseif ("$(TARGETNAME)" == "ntdll" && "$(TARGETTYPE)" == "DYNLINK" && !defined(TEST_CODE))
  406. TARGETLIBS=$(TARGETLIBS) $(MINWIN_PRIV_SDK_LIB_PATH)\RuntimeChecks.lib
  407. ! elseif defined(BOOTAPPNAME)
  408. TARGETLIBS=$(TARGETLIBS) $(MINWIN_PRIV_SDK_LIB_PATH)\RuntimeChecks.lib
  409. ! elseif "$(TARGETTYPE)" == "DRIVER" \
  410. || "$(TARGETTYPE)" == "MINIPORT" \
  411. || "$(TARGETTYPE)" == "GDI_DRIVER" \
  412. || "$(TARGETTYPE)" == "EXPORT_DRIVER"
  413. TARGETLIBS=$(TARGETLIBS) $(MINWIN_PRIV_SDK_LIB_PATH)\RuntimeChecks.lib $(DDK_LIB_PATH)\ntoskrnl_dbgprintex.lib
  414. ! else
  415. TARGETLIBS=$(TARGETLIBS) $(MINWIN_PRIV_SDK_LIB_PATH)\RuntimeChecks.lib $(SDK_LIB_PATH)\ntdll.lib
  416. ! endif
  417. ! endif
  418. !endif
  419.  
  420. !if defined(PASS_INDEPENDENT_TARGETS)
  421. !undef SOURCES
  422. !undef LANGUAGE_NEUTRAL_MANAGED_RESOURCES
  423. !undef LANGUAGE_SPECIFIC_MANAGED_RESOURCES
  424. !endif
  425.  
  426. #
  427. # _EVENTS_MANIFEST is passed on the nmake command line by build.exe to indicate
  428. # if believes EVENTS_MANIFEST is defined, even if it was in !if $(386) or such.
  429. #
  430. !if ( defined(EVENTS_MANIFEST) \
  431. || defined(_EVENTS_MANIFEST) \
  432. || defined(SLS_LICENSING_MANIFEST) \
  433. || defined(_SLS_LICENSING_MANIFEST) \
  434. ) && !defined(MANIFESTONLY)
  435.  
  436. !undef BUILD_PASS_INDEPENDENT
  437.  
  438. !endif
  439.  
  440. #
  441. # move into build.exe for perf
  442. #
  443. !if defined(TARGET_DESTINATION)
  444. _TARGET_DESTINATION_WITHOUT_QUOTES=$(TARGET_DESTINATION:"=)
  445. !endif
  446.  
  447. !ifndef PASS_INDEPENDENT_TARGETS
  448. ! if !exist($(OBJ_PATH)\$O\_objects.mac)
  449. ! if [-build /O]
  450. ! endif
  451. ! endif
  452. ! include $(OBJ_PATH)\$O\_objects.mac
  453. !endif
  454.  
  455. # CONFIG_CONCURRENCY_MIDL is from the config file -- true or false
  456. # CONCURRENT_MIDL is an override in the source file -- 0 or 1
  457.  
  458. !if ("$(CONFIG_CONCURRENCY_MIDL)" == "true") \
  459. && ("$(CONCURRENT_MIDL)" != "0") \
  460. && !defined(SYNCHRONIZE_PASS0_BLOCK) \
  461. && defined(_CONCURRENT_MIDL_UUID) \
  462. && defined(_CONCURRENT_MIDL_LOCKDIR) \
  463.  
  464. ! if [mkdir $(_CONCURRENT_MIDL_LOCKDIR)]
  465. ! endif
  466.  
  467. _CONCURRENT_MIDL_RUN=run_concurrent $(_CONCURRENT_MIDL_LOCKDIR)
  468. _CONCURRENT_MIDL_JOIN=join_concurrent $(_CONCURRENT_MIDL_LOCKDIR)
  469.  
  470. !endif
  471.  
  472.  
  473. #
  474. # Translate old redundant public symbols to new internal somewhat redundant symbols.
  475. #
  476. !if defined(MANAGED_CODE)
  477. _C_SHARP=1
  478. !endif
  479. !if defined(MANAGED_VB)
  480. _VB=1
  481. !endif
  482.  
  483. !if "$(TARGETTYPE)" == "CATALOG" || \
  484. "$(TARGETTYPE)" == "MSI"
  485.  
  486. ! if defined(C_DEFINES)
  487. ! error C_DEFINES may not be defined with TARGETTYPE == $(TARGETTYPE).
  488. ! endif
  489. ! if defined(INCLUDES)
  490. ! error INCLUDES may not be defined with TARGETTYPE == $(TARGETTYPE).
  491. ! endif
  492. ! if defined(TARGETEXT)
  493. ! error TARGETEXT may not be defined with TARGETTYPE == $(TARGETTYPE).
  494. ! endif
  495. ! if defined(DLLDEF_OBJECTS)
  496. ! error DLLDEF_OBJECTS may not be defined with TARGETTYPE == $(TARGETTYPE).
  497. ! endif
  498. ! if defined(LINKLIBS)
  499. ! error LINKLIBS may not be defined with TARGETTYPE == $(TARGETTYPE).
  500. ! endif
  501. ! if defined(TARGETLIBS)
  502. ! error TARGETLIBS may not be defined with TARGETTYPE == $(TARGETTYPE).
  503. ! endif
  504. ! if defined(_C_SHARP)
  505. ! error TARGETTYPE == $(TARGETTYPE) may not include SOURCES=*.cs.
  506. ! endif
  507. ! if defined(MANAGED_CXX)
  508. ! error MANAGED_CXX may not be defined with TARGETTYPE == $(TARGETTYPE).
  509. ! endif
  510. ! if defined(_VB)
  511. ! error TARGETTYPE == $(TARGETTYPE) may not include SOURCES=*.vb.
  512. ! endif
  513. ! if defined(_TLBIMP)
  514. ! error SOURCES=*.tlb may not used with TARGETTYPE == $(TARGETTYPE).
  515. ! endif
  516. ! if defined(UMLIBS)
  517. ! error UMLIBS may not be defined with TARGETTYPE == $(TARGETTYPE).
  518. ! endif
  519. ! if defined(USE_MSVCRT)
  520. ! error USE_MSVCRT may not be defined with TARGETTYPE == $(TARGETTYPE).
  521. ! endif
  522. #...
  523. !else
  524.  
  525. !if defined(COMBOX_SANDBOX)
  526. C_DEFINES = $(C_DEFINES) /DCOMBOX_SANDBOX
  527. !endif
  528.  
  529.  
  530. !endif
  531.  
  532.  
  533. !ifndef PASS_INDEPENDENT_TARGETS
  534.  
  535. !if defined(TARGETPATH)
  536. ! message $(MAKEDIR): TARGETPATH is $(TARGETPATH)
  537. !endif
  538.  
  539. !if defined(TARGETPATHLIB)
  540. ! message $(MAKEDIR): TARGETPATHLIB is $(TARGETPATHLIB)
  541. !endif
  542.  
  543. !if defined(MANAGED_RESOURCES) && defined(LANGUAGE_SPECIFIC_MANAGED_RESOURCES)
  544. ! error $(MAKEDIR) MANAGED_RESOURCES and LANGUAGE_SPECIFIC_MANAGED_RESOURCES may not both be defined.
  545. !endif
  546.  
  547. !if defined(MANAGED_RESOURCES) && defined(LANGUAGE_NEUTRAL_MANAGED_RESOURCES)
  548. ! error $(MAKEDIR) MANAGED_RESOURCES and LANGUAGE_NEUTRAL_MANAGED_RESOURCES may not both be defined.
  549. !endif
  550.  
  551. !if defined(MANAGED_WIN32_RESOURCE_FILE)
  552. #! error $(MAKEDIR) MANAGED_WIN32_RESOURCE_FILE in use.
  553. ! message JKSEP2005MARK $(MAKEDIR) MANAGED_WIN32_RESOURCE_FILE in use.
  554. !endif
  555.  
  556.  
  557. !if defined(_C_SHARP) || defined(MANAGED_CXX) || defined(_VB) || defined(_TLBIMP)
  558. _PROJECT_BUILDS_MANAGED_CODE=1
  559. !else
  560.  
  561. # set USE_PHOENIX_GLOBAL=1 (env) to turn on phoenix for everything otherwise default to UTC
  562. !if "$(USE_PHOENIX_GLOBAL)" == "1" && "$(USE_PHOENIX)" == ""
  563. USE_PHOENIX=1
  564. !endif
  565.  
  566. ! if "$(USE_PHOENIX)" == "1"
  567. ! error $(MAKEDIR): Phoenix compiler is no longer supported. Please do not specify USE_PHOENIX.
  568. ! endif
  569.  
  570. !endif
  571.  
  572. !if defined(MSBUILD_XAMLFILES) || defined(MSBUILD_APPDEFFILE) || defined(MSBUILD_RESOURCE) || defined(MSBUILD_TARGETTYPE)
  573. XAML_COMPILATION=1
  574.  
  575. #
  576. # If there is no msbuild project available in current directory, it will compile xaml files to
  577. # the corresponding .g.cs (or .g.vb) and .baml files, all those baml files and the related
  578. # resource files will be embedded into a single targetname.g.resources file.
  579. #
  580. # This .g.resources could be language netrual or language specific, depends on user's setting.
  581. # by default, it is language specific.
  582.  
  583. ! if defined(MSBUILD_XAMLFILES) || defined(MSBUILD_RESOURCE)
  584.  
  585. ! if "$(GENERATE_TEMP_TARGET_FOR_LOCAL_TYPE_REF)" != "true"
  586. MSBUILD_GENERATED_RESOURCE_FILE=$(OBJ_PATH)\$(O)\$(TARGETNAME).g.resources
  587. ! if "$(MSBUILD_GENERATE_LANGUAGE_NEUTRAL_RESOURCE)" == "true"
  588. ! if "$(LANGUAGE_NEUTRAL_MANAGED_RESOURCES)" == ""
  589. LANGUAGE_NEUTRAL_MANAGED_RESOURCES=$(MSBUILD_GENERATED_RESOURCE_FILE)
  590. ! else
  591. LANGUAGE_NEUTRAL_MANAGED_RESOURCES=$(MSBUILD_GENERATED_RESOURCE_FILE);$(LANGUAGE_NEUTRAL_MANAGED_RESOURCES)
  592. ! endif
  593. ! else
  594.  
  595. ! if "$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES)" == ""
  596. LANGUAGE_SPECIFIC_MANAGED_RESOURCES=$(MSBUILD_GENERATED_RESOURCE_FILE)
  597. ! else
  598. LANGUAGE_SPECIFIC_MANAGED_RESOURCES=$(MSBUILD_GENERATED_RESOURCE_FILE);$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES)
  599. ! endif
  600. ! endif
  601. ! endif # Not for Local Reference
  602. MSBUILD_GENERATED_FILE_TARGET=$(MSBUILD_GENERATED_RESOURCE_FILE)
  603.  
  604. ! else if defined(MSBUILD_APPDEFFILE)
  605. MSBUILD_GENERATED_FILE_TARGET=$(MSBUILD_APPDEFFILE:.xaml=.g.cs)
  606. ! endif
  607. !endif
  608.  
  609.  
  610. #
  611. # LOCALIZE_NO_MUI is the preferred way to tell the build process that you do
  612. # not want to MUI split something, but that you do want to localize it. This should
  613. # only be used for projects targeting pre-Vista platforms - anything on Vista or
  614. # above should be MUI split and the resulting MUI file is what should be localized.
  615. #
  616. !if defined(LOCALIZE_NO_MUI)
  617. !message LCG: LOCALIZE_NO_MUI: $(LOCALIZE_NO_MUI)
  618. ! if "$(LOCALIZE_NO_MUI)" != "1" && "$(LOCALIZE_NO_MUI)" != "0"
  619. ! error LOCALIZE_NO_MUI must be empty, 1, or 0
  620. ! endif
  621. ! if "$(LOCALIZE_NO_MUI)" == "1"
  622. # NOTE: We can't do this because $(MUI) is set to 1 automatically before the sources file is included, and people test
  623. # for the value of $(MUI) in their sources files. If they set LOCALIZE_NO_MUI=1, we have to assume they wanted no MUI
  624. # and just turn it off - we have no way to distinguish between what was automatically set above vs. what people set
  625. # in their sources file.
  626. #! if "$(MUI)" == "1"
  627. #! error LOCALIZE_NO_MUI=1 and MUI=1 are mutally exclusive
  628. #! endif
  629. BUILD_LCG=1
  630. MUI=0
  631. ! if defined(MUI_COMMENT)
  632. MUI_COMMENT=MUI splitting turned off by LOCALIZE_NO_MUI : $(MUI_COMMENT)
  633. ! else
  634. MUI_COMMENT=MUI splitting turned off by LOCALIZE_NO_MUI
  635. ! endif
  636. ! endif
  637. # See above notes about $(MUI) and sources files
  638. #!else
  639. #! ifndef MUI
  640. #MUI=1
  641. #! endif
  642. !endif
  643.  
  644.  
  645.  
  646. #
  647. # LOCALIZE_NO_MUI_MULTI is the preferred way to tell the build process that you do
  648. # not want to MUI split something, but that you do want to localize it as multilingual.
  649. # This should only be used for projects targeting pre-Vista platforms - anything on Vista
  650. # or above should be MUI split and the resulting MUI file is what should be localized.
  651. #
  652. !if defined(LOCALIZE_NO_MUI_MULTI)
  653. !message LCG: LOCALIZE_NO_MUI_MULTI: $(LOCALIZE_NO_MUI_MULTI)
  654. ! if "$(LOCALIZE_NO_MUI_MULTI)" != "1" && "$(LOCALIZE_NO_MUI_MULTI)" != "0"
  655. ! error LOCALIZE_NO_MUI_MULTI must be empty, 1, or 0
  656. ! endif
  657. ! if "$(LOCALIZE_NO_MUI_MULTI)" == "1"
  658. ! if "$(LOCALIZE_NO_MUI)" == "1"
  659. ! error LOCALIZE_NO_MUI_MULTI=1 and LOCALIZE_NO_MUI=1 are mutally exclusive
  660. ! endif
  661. BUILD_LCG=1
  662. MUI=0
  663. ! if defined(MUI_COMMENT)
  664. MUI_COMMENT=MUI splitting turned off by LOCALIZE_NO_MUI_MULTI : $(MUI_COMMENT)
  665. ! else
  666. MUI_COMMENT=MUI splitting turned off by LOCALIZE_NO_MUI_MULTI
  667. ! endif
  668. ! endif
  669. !endif
  670.  
  671.  
  672. #
  673. # LOCALIZE_MUI_MULTI is the preferred way to tell the build process that you want
  674. # to localize your .mui files as multilingual.
  675. #
  676. !if defined(LOCALIZE_MUI_MULTI)
  677. !message LCG: LOCALIZE_MUI_MULTI: $(LOCALIZE_MUI_MULTI)
  678. ! if "$(LOCALIZE_MUI_MULTI)" != "1" && "$(LOCALIZE_MUI_MULTI)" != "0"
  679. ! error LOCALIZE_MUI_MULTI must be empty, 1, or 0
  680. ! endif
  681. ! if "$(LOCALIZE_MUI_MULTI)" == "1"
  682. ! if "$(LOCALIZE_NO_MUI)" == "1"
  683. ! error LOCALIZE_MUI_MULTI=1 and LOCALIZE_NO_MUI=1 are mutally exclusive
  684. ! endif
  685. ! if "$(LOCALIZE_NO_MUI_MULTI)" == "1"
  686. ! error LOCALIZE_MUI_MULTI=1 and LOCALIZE_NO_MUI_MULTI=1 are mutally exclusive
  687. ! endif
  688. BUILD_LCG=1
  689. MUI=1
  690. BINPLACE_FLAGS=$(BINPLACE_FLAGS) /G5 $(LOC_MULTI)
  691. ! endif
  692. !endif
  693.  
  694.  
  695.  
  696.  
  697. #
  698. # Ban LINKER_FLAGS containing managed resource stuff unless it is test code or language neutral.
  699. # Ban USER_CS_FLAGS <ditto>.
  700. #
  701. !if !defined(TEST_CODE) && "$(MUI)" != "0" && "$(LANGUAGE_NEUTRAL)" != "0" # { {
  702.  
  703. !if "$(LINKER_FLAGS)" != "" # { {
  704.  
  705. _LINKER_FLAGS_LOWERCASE=$(LINKER_FLAGS)
  706.  
  707. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:A=a)
  708. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:B=b)
  709. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:C=c)
  710. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:D=d)
  711. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:E=e)
  712. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:F=f)
  713. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:G=g)
  714. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:H=h)
  715. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:I=i)
  716. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:J=j)
  717. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:K=k)
  718. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:L=l)
  719. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:M=m)
  720. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:N=n)
  721. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:O=o)
  722. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:P=p)
  723. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:Q=q)
  724. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:R=r)
  725. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:S=s)
  726. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:T=t)
  727. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:U=u)
  728. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:V=v)
  729. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:W=w)
  730. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:X=x)
  731. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:Y=y)
  732. _LINKER_FLAGS_LOWERCASE=$(_LINKER_FLAGS_LOWERCASE:Z=z)
  733.  
  734. _LINKER_FLAGS_LOWERCASE_SLASH=$(_LINKER_FLAGS_LOWERCASE:-=/)
  735.  
  736. !if "$(_LINKER_FLAGS_LOWERCASE_SLASH:/assemblyresource=)" != "$(_LINKER_FLAGS_LOWERCASE_SLASH)"
  737. ! error $(MAKEDIR) LINKER_FLAGS may not contain /assemblyresource. Use LANGUAGE_NEUTRAL_MANAGED_RESOURCES instead.
  738. !endif
  739.  
  740. !if "$(_LINKER_FLAGS_LOWERCASE_SLASH:/assemblylinkresource=)" != "$(_LINKER_FLAGS_LOWERCASE_SLASH)"
  741. ! error $(MAKEDIR) LINKER_FLAGS may not contain /assemblylinkresource. Use embedded resources instead, via LANGUAGE_NEUTRAL_MANAGED_RESOURCES.
  742. !endif
  743.  
  744. !endif # } }
  745.  
  746. !if "$(USER_CS_FLAGS)" != "" # { {
  747.  
  748. _USER_CS_FLAGS_LOWERCASE=$(USER_CS_FLAGS)
  749. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:A=a)
  750. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:B=b)
  751. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:C=c)
  752. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:D=d)
  753. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:E=e)
  754. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:F=f)
  755. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:G=g)
  756. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:H=h)
  757. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:I=i)
  758. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:J=j)
  759. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:K=k)
  760. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:L=l)
  761. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:M=m)
  762. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:N=n)
  763. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:O=o)
  764. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:P=p)
  765. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:Q=q)
  766. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:R=r)
  767. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:S=s)
  768. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:T=t)
  769. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:U=u)
  770. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:V=v)
  771. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:W=w)
  772. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:X=x)
  773. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:Y=y)
  774. _USER_CS_FLAGS_LOWERCASE=$(_USER_CS_FLAGS_LOWERCASE:Z=z)
  775.  
  776. _USER_CS_FLAGS_LOWERCASE_SLASH=$(_USER_CS_FLAGS_LOWERCASE:-=/)
  777.  
  778. !if "$(_USER_CS_FLAGS_LOWERCASE_SLASH:/res=)" != "$(_USER_CS_FLAGS_LOWERCASE_SLASH)"
  779. ! message $(MAKEDIR) USER_CS_FLAGS may not contain /resources, use LANGUAGE_NEUTRAL_MANAGED_RESOURCES or LANGUAGE_SPECIFIC_MANAGED_RESOURCES instead.
  780. !endif
  781.  
  782. !if "$(_USER_CS_FLAGS_LOWERCASE_SLASH:/linkres=)" != "$(_USER_CS_FLAGS_LOWERCASE_SLASH)"
  783. ! message $(MAKEDIR) USER_CS_FLAGS may not contain /linkresource. Use embedded resources instead, via and LANGUAGE_NEUTRAL_MANAGED_RESOURCES, or embed resources into a satellite assembly using LANGUAGE_SPECIFIC_MANAGED_RESOURCES.
  784. !endif
  785.  
  786. !if "$(_USER_CS_FLAGS_LOWERCASE_SLASH:/win32res=)" != "$(_USER_CS_FLAGS_LOWERCASE_SLASH)"
  787. ! message $(MAKEDIR) USER_CS_FLAGS may not contain /win32res. Use LANGUAGE_SPECIFIC_MANAGED_WIN32_RESOURCE_FILE or LANGUAGE_NEUTRAL_MANAGED_WIN32_RESOURCE_FILE.
  788. !endif
  789.  
  790. !endif # } }
  791.  
  792. !endif # } }
  793.  
  794.  
  795. !if defined(LANGUAGE_NEUTRAL_MANAGED_RESOURCES)
  796.  
  797. ! if "$(LANGUAGE_NEUTRAL_MANAGED_RESOURCES)" == ""
  798. ! error LANGUAGE_NEUTRAL_MANAGED_RESOURCES may not be empty.
  799. ! endif
  800.  
  801. ! if !defined(_PROJECT_BUILDS_MANAGED_CODE)
  802. ! error LANGUAGE_NEUTRAL_MANAGED_RESOURCES may not be defined without MANAGED_CXX | SOURCES=*.cs | SOURCES=*.vb.
  803. ! endif
  804. ! if "$(LANGUAGE_NEUTRAL_MANAGED_RESOURCES: -=)" != "$(LANGUAGE_NEUTRAL_MANAGED_RESOURCES)" \
  805. || "$(LANGUAGE_NEUTRAL_MANAGED_RESOURCES:/=)" != "$(LANGUAGE_NEUTRAL_MANAGED_RESOURCES)"
  806. ! error LANGUAGE_NEUTRAL_MANAGED_RESOURCES may not contain switches (no dash or forward slash).
  807. ! endif
  808.  
  809. ! if defined(MANAGED_CXX)
  810. _LANGUAGE_NEUTRAL_MANAGED_RESOURCES_LINKER_FLAGS=$(LANGUAGE_NEUTRAL_MANAGED_RESOURCES: =)
  811. _LANGUAGE_NEUTRAL_MANAGED_RESOURCES_LINKER_FLAGS=/assemblyresource:$(_LANGUAGE_NEUTRAL_MANAGED_RESOURCES_LINKER_FLAGS:;= /assemblyresource:)
  812. LINKER_FLAGS=$(LINKER_FLAGS) $(_LANGUAGE_NEUTRAL_MANAGED_RESOURCES_LINKER_FLAGS) # TBD remove this line
  813. ! else
  814. _LANGUAGE_NEUTRAL_MANAGED_RESOURCES_CSC_OR_VBC_FLAGS=$(LANGUAGE_NEUTRAL_MANAGED_RESOURCES: =)
  815. _LANGUAGE_NEUTRAL_MANAGED_RESOURCES_CSC_OR_VBC_FLAGS=/resource:$(_LANGUAGE_NEUTRAL_MANAGED_RESOURCES_CSC_OR_VBC_FLAGS:;= /resource:)
  816. ! endif
  817.  
  818. !endif
  819.  
  820. !if defined(LANGUAGE_SPECIFIC_MANAGED_RESOURCES)
  821.  
  822. ! if "$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES)" == ""
  823. ! error LANGUAGE_SPECIFIC_MANAGED_RESOURCES may not be empty.
  824. ! endif
  825.  
  826. ! if !defined(_PROJECT_BUILDS_MANAGED_CODE)
  827. ! error LANGUAGE_SPECIFIC_MANAGED_RESOURCES may not be defined without MANAGED_CXX | SOURCES=*.cs | SOURCES=*.vb.
  828. ! endif
  829. ! if "$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES: -=)" != "$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES)" \
  830. || "$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES:/=)" != "$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES)"
  831. ! error LANGUAGE_SPECIFIC_MANAGED_RESOURCES may not contain switches (no dash or forward slash).
  832. ! endif
  833.  
  834. _LANGUAGE_SPECIFIC_MANAGED_RESOURCES_AL_FLAGS=$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES: =)
  835. _LANGUAGE_SPECIFIC_MANAGED_RESOURCES_AL_FLAGS=/embedresource:$(_LANGUAGE_SPECIFIC_MANAGED_RESOURCES_AL_FLAGS:;= /embedresource:)
  836.  
  837. ! if defined(MANAGED_CXX)
  838. _LANGUAGE_SPECIFIC_MANAGED_RESOURCES_LINKER_FLAGS=$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES: =)
  839. _LANGUAGE_SPECIFIC_MANAGED_RESOURCES_LINKER_FLAGS=/assemblyresource:$(_LANGUAGE_SPECIFIC_MANAGED_RESOURCES_LINKER_FLAGS:;= /assemblyresource:)
  840. LINKER_FLAGS=$(LINKER_FLAGS) $(_LANGUAGE_SPECIFIC_MANAGED_RESOURCES_LINKER_FLAGS) # TBD remove this line
  841. ! else
  842. _LANGUAGE_SPECIFIC_MANAGED_RESOURCES_CSC_OR_VBC_FLAGS=$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES: =)
  843. _LANGUAGE_SPECIFIC_MANAGED_RESOURCES_CSC_OR_VBC_FLAGS=/resource:$(_LANGUAGE_SPECIFIC_MANAGED_RESOURCES_CSC_OR_VBC_FLAGS:;= /resource:)
  844. ! endif
  845.  
  846. ! if "$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES:,=)" != "$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES)"
  847. ! message JKSEP2005MARK $(MAKEDIR) unable to state _MANAGED_RESOURCES_SATELLITE_ASSEMBLY_DEPENDENCIES.
  848. _MANAGED_RESOURCES_SATELLITE_ASSEMBLY_DEPENDENCIES=$(SOURCES_USED) $(SOURCES)
  849. ! else
  850. _MANAGED_RESOURCES_SATELLITE_ASSEMBLY_DEPENDENCIES=$(LANGUAGE_SPECIFIC_MANAGED_RESOURCES:;= )
  851. ! endif
  852.  
  853. !endif
  854.  
  855. !if defined(USE_STL) && !defined(STL_VER)
  856. STL_VER=70
  857. !endif
  858.  
  859. #
  860. # SUPPRESS_STL_WARNINGS should be cleaned out of the tree in
  861. # deference to specific uses of MSC_WARNING_LEVEL.
  862. #
  863. !if defined(SUPPRESS_STL_WARNINGS) && "$(SUPPRESS_STL_WARNINGS)" != "1"
  864. ! error $(MAKEDIR) SUPPRESS_STL_WARNINGS must be 1 or not defined.
  865. !endif
  866.  
  867. !if defined(SUPPRESS_STL_WARNINGS) && "$(STL_VER)" != "70"
  868. ! error $(MAKEDIR) SUPPRESS_STL_WARNINGS is only valid when STL_VER == 70.
  869. !endif
  870.  
  871. !if defined(SUPPRESS_STL_WARNINGS)
  872. #
  873. # 4018 signed/unsigned mismatch
  874. # 4114 same type qualifier used more than once
  875. # 4146 unary minus operator applied to unsigned type, result still unsigned
  876. # 4244 conversion, possible loss of data
  877. # 4245 combination of 4018 and 4244
  878. # 4290 C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
  879. #
  880. # /D_STL70_ at end seems wrong but there is some problem with precompiled headers otherwise.
  881. #
  882. _STL70_WARNINGS=/wd4018 /wd4144 /wd4146 /wd4244 /wd4245 /wd4290 /D_STL70_
  883. !endif
  884.  
  885. !if defined(OLD_AUTO_PTR) && defined(USE_STL) && "$(STL_VER)" == "70"
  886. _STL70_WARNINGS=$(_STL70_WARNINGS) /D_OLD_AUTO_PTR
  887. !endif
  888.  
  889. !if defined(_AUTO_PTR_HAZARD) && defined(USE_STL) && "$(STL_VER)" == "70"
  890. _STL70_WARNINGS=$(_STL70_WARNINGS) /D_AUTO_PTR_HAZARD
  891. !endif
  892.  
  893. !if defined(_STREAM_WCHAR_T_HAZARD) && defined(USE_STL)
  894. _STL70_WARNINGS=$(_STL70_WARNINGS) /D_STREAM_WCHAR_T_HAZARD
  895. !endif
  896.  
  897. !ifdef PASS1_LINK
  898. MAKEDLL=1
  899. !undef NOLINK
  900. !endif
  901. !if defined(_C_SHARP) || defined(_VB) || defined(_TLBIMP)
  902. MAKEDLL=1
  903. !undef NOLINK
  904. !undef PASS1_NOLIB
  905. !endif
  906.  
  907. !if defined(MCPP_TYPE) && !defined(MANAGED_CXX)
  908. ! error MCPP_TYPE cannot be defined without MANAGED_CXX.
  909. !endif
  910. !if defined(MCPP_TYPE) && "$(URT_VER)" < "2."
  911. ! error MCPP_TYPE cannot be defined for URT_VER < 2.
  912. !endif
  913. !if defined(MANAGED_CXX) && defined(USE_STL) && "$(STL_VER)" != "70"
  914. ! error If managed C++ uses STL, it must use the default STL -- remove STL_VER.
  915. !endif
  916.  
  917. !if defined(MANAGED_CXX) && "$(URT_VER)" >= "2.0"
  918. _USE_LIBCMMT=1
  919. !endif
  920.  
  921. !endif # PASS_INDEPENDENT_TARGETS
  922.  
  923. !if "$(URT_VER)" != "2.0"
  924. _URTRUN_20=$(_PERL) $(RAZZLETOOLPATH)\urtrun.pl 2.0
  925. !else
  926. _URTRUN_20=
  927. !endif
  928.  
  929. !if $(USE_OBJECT_ROOT) # { {
  930.  
  931. !if "$(DLLDEF)" == "$O\$(TARGETNAME).def"
  932. DLLDEF=$(OBJ_PATH)\$O\$(TARGETNAME).def
  933. !elseif "$(DLLDEF)" == "$O\$(TARGETNAME).DEF"
  934. DLLDEF=$(OBJ_PATH)\$O\$(TARGETNAME).DEF
  935. !endif
  936.  
  937. !if "$(TARGETPATH)" == "" || "$(TARGETPATH)" == "obj" || "$(TARGETPATH)" == "OBJ" || "$(TARGETPATH)" == "$(_OBJ_DIR)"
  938. TARGETPATH=$(OBJ_PATH)\$(_OBJ_DIR)
  939. !endif
  940.  
  941. !if "$(TARGETPATHLIB)" == "obj" || "$(TARGETPATHLIB)" == "OBJ" || "$(TARGETPATHLIB)" == "$(_OBJ_DIR)"
  942. TARGETPATHLIB=$(OBJ_PATH)\$(_OBJ_DIR)
  943. !endif
  944.  
  945. !if "$(TARGETPATH)" == "..\$(_OBJ_DIR)"
  946. TARGETPATH=$(OBJ_PATH)\..\$(_OBJ_DIR)
  947. !endif
  948.  
  949. !if "$(TARGETPATHLIB)" == "..\$(_OBJ_DIR)"
  950. TARGETPATHLIB=$(OBJ_PATH)\..\$(_OBJ_DIR)
  951. !endif
  952.  
  953. !if "$(MC_SOURCEDIR)" == "$O"
  954. MC_SOURCEDIR=$(OBJ_PATH)\$(O)
  955. !endif
  956.  
  957. !if "$(PASS0_HEADERDIR)" == "$O"
  958. PASS0_HEADERDIR=$(OBJ_PATH)\$(O)
  959. !endif
  960.  
  961. !if "$(PASS0_CLIENTDIR)" == "$O"
  962. PASS0_CLIENTDIR=$(OBJ_PATH)\$(O)
  963. !endif
  964.  
  965. !if "$(PASS0_SERVERDIR)" == "$O"
  966. PASS0_SERVERDIR=$(OBJ_PATH)\$(O)
  967. !endif
  968.  
  969. !if "$(PASS0_SOURCEDIR)" == "$O"
  970. PASS0_SOURCEDIR=$(OBJ_PATH)\$(O)
  971. !endif
  972.  
  973. !if "$(MIDL_TLBDIR)" == "$O"
  974. MIDL_TLBDIR=$(OBJ_PATH)\$O
  975. !endif
  976.  
  977. !if "$(MIDL_UUIDDIR)" == "$O"
  978. MIDL_UUIDDIR=$(OBJ_PATH)\$O
  979. !endif
  980.  
  981. !else # } {
  982.  
  983. OBJ_PATH=$(MAKEDIR)
  984.  
  985. !if "$(TARGETPATH)" == "" || "$(TARGETPATH)" == "obj" || "$(TARGETPATH)" == "OBJ"
  986. TARGETPATH=$(_OBJ_DIR)
  987. !endif
  988.  
  989. !if "$(TARGETPATHLIB)" == "obj" || "$(TARGETPATHLIB)" == "OBJ"
  990. TARGETPATHLIB=$(_OBJ_DIR)
  991. !endif
  992.  
  993. !endif # } }
  994.  
  995. !if defined(ALT_PROJECT_TARGET)
  996. ALT_PROJECT_TARGET_OBJ=$(OBJ_PATH)\$(ALT_PROJECT_TARGET)
  997. !endif
  998.  
  999. !if "$(TARGETPATH)" != ""
  1000. ! if !exist($(TARGETPATH)\$(TARGET_DIRECTORY))
  1001. ! if [mkdir $(TARGETPATH)\$(TARGET_DIRECTORY) 2>nul]
  1002. ! endif
  1003. ! endif
  1004. !endif
  1005.  
  1006. !if "$(TARGETPATHLIB)" != ""
  1007. ! if !exist($(TARGETPATHLIB)\$(TARGET_DIRECTORY))
  1008. ! if [mkdir $(TARGETPATHLIB)\$(TARGET_DIRECTORY) 2>nul]
  1009. ! endif
  1010. ! endif
  1011. !endif
  1012.  
  1013. !if !$(WIN64)
  1014. SUBSYSTEM_400 = 4.00
  1015. SUBSYSTEM_410 = 4.10
  1016. SUBSYSTEM_500 = 5.00
  1017. SUBSYSTEM_501 = 5.01
  1018. !else
  1019. SUBSYSTEM_400 = 5.02
  1020. SUBSYSTEM_410 = 5.02
  1021. SUBSYSTEM_500 = 5.02
  1022. SUBSYSTEM_501 = 5.02
  1023. !endif
  1024. SUBSYSTEM_502 = 5.02
  1025. SUBSYSTEM_600 = 6.00
  1026. SUBSYSTEM_601 = 6.01
  1027.  
  1028. LINKER_APP_VERSION =6.1
  1029. LINKER_OS_VERSION =6.1
  1030.  
  1031.  
  1032. !if defined(_NT_TARGET_VERSION)
  1033. _CHECK_NT_TARGET_VERSION=$(_NT_TARGET_VERSION)
  1034. _CHECK_NT_TARGET_VERSION=$(_CHECK_NT_TARGET_VERSION: =)
  1035. _CHECK_NT_TARGET_VERSION=$(_CHECK_NT_TARGET_VERSION:0x0=0x)
  1036. !if "$(_CHECK_NT_TARGET_VERSION)" != "$(_NT_TARGET_VERSION_WINXP)" \
  1037. && "$(_CHECK_NT_TARGET_VERSION)" != "$(_NT_TARGET_VERSION_WS03)" \
  1038. && "$(_CHECK_NT_TARGET_VERSION)" != "$(_NT_TARGET_VERSION_VISTA)" \
  1039. && "$(_CHECK_NT_TARGET_VERSION)" != "$(_NT_TARGET_VERSION_WIN7)" \
  1040. && "$(_CHECK_NT_TARGET_VERSION)" != "$(_NT_TARGET_VERSION_LATEST)"
  1041. # multi line errors require the older !message style
  1042. !message NMAKE : _NT_TARGET_VERSION value is unknown.
  1043. !message NMAKE : _NT_TARGET_VERSION is misspecified.
  1044. !message NMAKE : The valid values are:
  1045. !message NMAKE : $$(_NT_TARGET_VERSION_WINXP)
  1046. !message NMAKE : $$(_NT_TARGET_VERSION_WS03)
  1047. !message NMAKE : $$(_NT_TARGET_VERSION_VISTA)
  1048. !message NMAKE : $$(_NT_TARGET_VERSION_WIN7)
  1049. !message NMAKE : $$(_NT_TARGET_VERSION_LATEST)
  1050. # This is usually defaulted in makefile.plt and the default is not exposed.
  1051. # If we don't change the value here, we get a nonsensical error message.
  1052. _NT_TARGET_VERSION=$(__LATEST_NT_TARGET_VERSION)
  1053. !endif
  1054. !else
  1055. _NT_TARGET_VERSION=$(__LATEST_NT_TARGET_VERSION)
  1056. !endif
  1057.  
  1058.  
  1059. LIB_WLH=1
  1060.  
  1061. #
  1062. # Set versions correctly for NT4/2000/XP/Longhorn
  1063. #
  1064.  
  1065.  
  1066. !if $(WIN64) && \
  1067. (($(_NT_TARGET_VERSION) == $(_NT_TARGET_VERSION_WINXP)) || \
  1068. ($(_NT_TARGET_VERSION) == $(_NT_TARGET_VERSION_WIN2K)) || \
  1069. ($(_NT_TARGET_VERSION) == $(_NT_TARGET_VERSION_NT4)))
  1070. # Lowest NT_TARGET_VERSION for Win64 is WS03
  1071. _NT_TARGET_VERSION=$(_NT_TARGET_VERSION_WS03)
  1072. LIB_WLH=0
  1073. !endif
  1074.  
  1075.  
  1076. !if $(_NT_TARGET_VERSION) == $(_NT_TARGET_VERSION_WIN7) ## Windows "7" ##
  1077. CURRENT_NTDDI_VERSION =$(LATEST_NTDDI_VERSION)
  1078. CURRENT_WIN32_IE_VERSION =$(LATEST_WIN32_IE_VERSION)
  1079. CURRENT_WIN32_WINNT_VERSION =$(LATEST_WIN32_WINNT_VERSION)
  1080. SUBSYSTEM_VERSION_LATEST =6.01
  1081. SUBSYSTEM_VERSION_CURRENT =$(SUBSYSTEM_VERSION_LATEST)
  1082. CATALOG_OS_VERSION =2:6.1
  1083.  
  1084. !elseif $(_NT_TARGET_VERSION) == $(_NT_TARGET_VERSION_VISTA) ## Windows Vista ##
  1085. CURRENT_NTDDI_VERSION =0x06000100
  1086. CURRENT_WIN32_IE_VERSION =0x0700
  1087. CURRENT_WIN32_WINNT_VERSION =0x0600
  1088. SUBSYSTEM_VERSION_LATEST =6.00
  1089. CATALOG_OS_VERSION =2:6.0
  1090.  
  1091. !elseif $(_NT_TARGET_VERSION) == $(_NT_TARGET_VERSION_WS03) ## Windows Server 2003 ##
  1092. CURRENT_NTDDI_VERSION =0x05020100
  1093. # Server 2003 gold has _WIN32_IE=0x0602, and Server 2003 SP1 has _WIN32_IE=0x0603
  1094. CURRENT_WIN32_IE_VERSION =0x0603
  1095. CURRENT_WIN32_WINNT_VERSION =0x0502
  1096. SUBSYSTEM_VERSION_LATEST =5.02
  1097. CATALOG_OS_VERSION =2:5.2
  1098.  
  1099.  
  1100. !message BUILDMSG: _NT_TARGET_VERSION SET TO WS03
  1101. SDK_LIB_DEST=$(BASEDIR)\lib\wnet
  1102. DDK_LIB_DEST=$(SDK_LIB_DEST)
  1103. IFSKIT_LIB_DEST=$(SDK_LIB_DEST)
  1104. SDK_LIB_PATH=$(BASEDIR)\lib\wnet\*
  1105. DDK_LIB_PATH=$(SDK_LIB_PATH)
  1106. HALKIT_LIB_PATH=$(SDK_LIB_PATH)
  1107. IFSKIT_LIB_PATH=$(SDK_LIB_PATH)
  1108. LIB_WLH=0
  1109.  
  1110.  
  1111. !elseif $(_NT_TARGET_VERSION) == $(_NT_TARGET_VERSION_WINXP) ## Windows XP ##
  1112. # XP gold has _WIN32_IE=0x0600, XP SP1 has _WIN32_IE=0x0601, and XPSP2 _WIN32_IE=0x0603
  1113. CURRENT_NTDDI_VERSION =0x05010200
  1114. CURRENT_WIN32_IE_VERSION =0x0603
  1115. CURRENT_WIN32_WINNT_VERSION =0x0501
  1116. SUBSYSTEM_VERSION_LATEST =$(SUBSYSTEM_501)
  1117. CATALOG_OS_VERSION =2:5.1
  1118.  
  1119.  
  1120.  
  1121. !message BUILDMSG: _NT_TARGET_VERSION SET TO WINXP
  1122. SDK_LIB_DEST=$(BASEDIR)\lib\wxp
  1123. DDK_LIB_DEST=$(SDK_LIB_DEST)
  1124. IFSKIT_LIB_DEST=$(SDK_LIB_DEST)
  1125. SDK_LIB_PATH=$(BASEDIR)\lib\wxp\*
  1126. DDK_LIB_PATH=$(SDK_LIB_PATH)
  1127. HALKIT_LIB_PATH=$(SDK_LIB_PATH)
  1128. IFSKIT_LIB_PATH=$(SDK_LIB_PATH)
  1129. LIB_WLH=0
  1130.  
  1131.  
  1132. !elseif $(_NT_TARGET_VERSION) == $(_NT_TARGET_VERSION_WIN2K) ## Windows 2000 ##
  1133. CURRENT_NTDDI_VERSION =0x05000400
  1134. CURRENT_WIN32_IE_VERSION =0x0501
  1135. CURRENT_WIN32_WINNT_VERSION=0x0500
  1136. SUBSYSTEM_VERSION_LATEST =$(SUBSYSTEM_500)
  1137. CATALOG_OS_VERSION =2:5.0
  1138.  
  1139. !elseif $(_NT_TARGET_VERSION) == $(_NT_TARGET_VERSION_NT4) ## Windows NT 4 ##
  1140. CURRENT_NTDDI_VERSION =0x04000600
  1141. CURRENT_WIN32_IE_VERSION =0x0200
  1142. CURRENT_WIN32_WINNT_VERSION=0x0400
  1143. SUBSYSTEM_VERSION_LATEST =$(SUBSYSTEM_400)
  1144. !else
  1145. !message NMAKE : Uxxxx: _NT_TARGET_VERSION value is unknown. Update Makefile.def to understand the new version.
  1146. !endif # _NT_TARGET_VERSION
  1147.  
  1148.  
  1149. !if "$(POCKETPC)" != ""
  1150. ! if "$(POCKETPC_EMULATION)" != ""
  1151. WINCE_IMAGE = -WINDOWSCE:EMULATION
  1152. ! else
  1153. WINCE_IMAGE = -WINDOWSCE
  1154. ! endif
  1155. CVTRES_PLATFORM_FLAGS = $(WINCE_IMAGE)
  1156. !endif
  1157.  
  1158. !if defined(TEST_CODE)
  1159. C_DEFINES=$(C_DEFINES) /DTEST_CODE
  1160. !else if $(WIN64) && !defined(NTTESTENV)
  1161. LINK_TIME_CODE_GENERATION=1
  1162. !endif
  1163.  
  1164. #
  1165. # move into build.exe for perf
  1166. #
  1167. !if defined(TEST_CODE) && "$(MAKEDIR_LOWERCASE:\testsrc\=)" == "$(MAKEDIR_LOWERCASE)"
  1168. ! message $(MAKEDIR) building test code in dev tree
  1169. !endif
  1170.  
  1171. BINPLACE_FLAGS=$(BINPLACE_FLAGS) /:CVTCIL
  1172.  
  1173. !if (defined(LINK_TIME_CODE_GENERATION) && !defined(FORCENATIVEOBJECT)) && \
  1174. (defined(LTCG_NTNOPCH) || \
  1175. (defined(PASS1_PUBLISH) && \
  1176. "$(BUILD_PASS)" != "PASS0" && \
  1177. "$(BUILD_PASS)" != "PASS2" && \
  1178. !defined(NOLIB) && \
  1179. "$(TARGETTYPE)" != "DYNLINK" && \
  1180. "$(TARGETTYPE)" != "PROGLIB" && \
  1181. "$(TARGETTYPE)" != "EXPORT_DRIVER"))
  1182. # LTCG with PCH encodes a hardcoded path to the PCH file - disable pch if publishing.
  1183. NTNOPCH=1
  1184. !endif
  1185.  
  1186. !if "$(_TARGET_DESTINATION_WITHOUT_QUOTES)" != ""
  1187. BINPLACE_TARGET_FLAGS= /:DEST $(TARGET_DESTINATION)
  1188. !endif
  1189.  
  1190. # Support to compile licensing manifest
  1191. !if defined(SLS_LICENSING_MANIFEST)
  1192. ! include $(RAZZLETOOLPATH)\licensing.inc
  1193. !endif
  1194.  
  1195. #
  1196. # LocStudio-related settings that have to be set very early
  1197. #
  1198.  
  1199.  
  1200. # The parser LSBuild uses can be specified on a per-project
  1201. # basis by defining LSBUILD_PARSER_ID in the sources file.
  1202. !if defined(LSBUILD_PARSER_ID)
  1203. LSBUILD_PARSER_ID_OPTION=/p:$(LSBUILD_PARSER_ID)
  1204. !else
  1205. LSBUILD_PARSER_ID_OPTION=
  1206. !endif
  1207.  
  1208. # We need to use a specific parser for files we know are managed code.
  1209. !if defined(LSBUILD_PARSER_ID_MANAGED)
  1210. LSBUILD_PARSER_ID_OPTION_MANAGED=/p:$(LSBUILD_PARSER_ID_MANAGED)
  1211. !else
  1212. LSBUILD_PARSER_ID_OPTION_MANAGED=/p:211
  1213. !endif
  1214.  
  1215. # The alternate LCI directory can be specified on a per-project
  1216. # basis by defining ALT_LCI_DIR in the sources file.
  1217. !if defined(ALT_LCI_DIR)
  1218. ALT_LCI_DIR_OPTION=/d:$(ALT_LCI_DIR)
  1219. !else
  1220. ALT_LCI_DIR_OPTION=
  1221. !endif
  1222.  
  1223. # LSBUILD generated LCG files binplace to $(_NTTREE)\$(LCG_BINPLACE_ROOT)
  1224. !if "$(LCG_BINPLACE_ROOT: =)" == ""
  1225. LCG_BINPLACE_ROOT=$(LOC_LCG)
  1226. LCG_BINPLACE_ROOT_MANAGED=$(LCG_BINPLACE_ROOT)\managed
  1227. !endif
  1228.  
  1229. # Adjust the LCG binplace root as needed...
  1230. !if "$(ALT_PROJECT_TARGET)" == ""
  1231. LCG_BINPLACE_TARGET=$(LCG_BINPLACE_ROOT)
  1232. LCG_BINPLACE_TARGET_MANAGED=$(LCG_BINPLACE_ROOT_MANAGED)
  1233. !else
  1234. LCG_BINPLACE_TARGET=$(LCG_BINPLACE_ROOT)\$(ALT_PROJECT_TARGET)
  1235. LCG_BINPLACE_TARGET_MANAGED=$(LCG_BINPLACE_ROOT_MANAGED)\$(ALT_PROJECT_TARGET)
  1236. !endif
  1237.  
  1238. # Define the right binplace locations for the localizable and neutral perf counters
  1239. PERF_INI_DIR_LS=perfINI_LS
  1240. PERF_INI_DIR_LN=perfINI_LN
  1241. LOC_PERF_COUNTERS_TARGET_DESTINATION=$(LOC_BIN)\$(PERF_INI_DIR_LS)
  1242. PERF_COUNTERS_TARGET_DESTINATION=$(PERF_INI_DIR_LN)
  1243. ! if "$(_TARGET_DESTINATION_WITHOUT_QUOTES)" != "" && "$(_TARGET_DESTINATION_WITHOUT_QUOTES)" != "retail"
  1244. LOC_PERF_COUNTERS_TARGET_DESTINATION=$(LOC_PERF_COUNTERS_TARGET_DESTINATION)\$(TARGET_DESTINATION)
  1245. PERF_COUNTERS_TARGET_DESTINATION=$(PERF_COUNTERS_TARGET_DESTINATION)\$(TARGET_DESTINATION)
  1246. ! endif
  1247.  
  1248. # Define the right binplace locations for the localizable and neutral msc files
  1249. MSC_FILES_DIR_LS=MSCFiles_LS
  1250. MSC_FILES_DIR_LN=MSCFiles_LN
  1251. LOC_MSC_FILES_TARGET_DESTINATION=$(LOC_BIN)\$(MSC_FILES_DIR_LS)
  1252. MSC_FILES_TARGET_DESTINATION=$(MSC_FILES_DIR_LN)
  1253. ! if "$(_TARGET_DESTINATION_WITHOUT_QUOTES)" != "" && "$(_TARGET_DESTINATION_WITHOUT_QUOTES)" != "retail"
  1254. LOC_MSC_FILES_TARGET_DESTINATION=$(LOC_MSC_FILES_TARGET_DESTINATION)\$(TARGET_DESTINATION)
  1255. MSC_FILES_TARGET_DESTINATION=$(MSC_FILES_TARGET_DESTINATION)\$(TARGET_DESTINATION)
  1256. ! endif
  1257.  
  1258. #
  1259. # Decide if we should build LCG files for CMI_MANIFESTS.
  1260. # This is similar to setting BUILD_LCG.
  1261. #
  1262. # We will create LCG files if:
  1263. #
  1264. # - one of the following is true:
  1265. # - The developer specifies BUILD_CMI_LCG=1 in their sources file
  1266. # - We are NOT building test code
  1267. #
  1268. !if "$(BUILD_CMI_LCG)" != ""
  1269. !message LCG: BUILD_CMI_LCG: $(BUILD_CMI_LCG)
  1270. ! if "$(BUILD_CMI_LCG)" != "1" && "$(BUILD_CMI_LCG)" != "0"
  1271. ! error BUILD_CMI_LCG must be empty, 1, or 0
  1272. ! endif
  1273.  
  1274. !elseif defined(TEST_CODE)
  1275. BUILD_CMI_LCG=0
  1276.  
  1277. !else
  1278. BUILD_CMI_LCG=1
  1279. !endif
  1280.  
  1281. #
  1282. # LOCALIZE_BASE_FILE is for forcing the base file (after MUI splitting)
  1283. # to get localized as a multilingual file. It is expected to be used with
  1284. # "driver" or "kernel" style MUI splitting where a copy of the resources
  1285. # is left in the "base" DLL/EXE/etc. as well as a copy being placed into
  1286. # the .MUI file. This is needed for printer drivers that need to be
  1287. # localized because in that case we need to localize both the base DLL
  1288. # _and_ the MUI file. Setting this will cause an LCG file to get created
  1289. # for the base file and cause the base file to be binplaced to such that
  1290. # it passes through the multi-lingual localization process. The binplacing
  1291. # of the .mui file and it's associated LCG is not affected.
  1292. #
  1293. !if defined(LOCALIZE_BASE_FILE)
  1294. !message LCG: LOCALIZE_BASE_FILE: $(LOCALIZE_BASE_FILE)
  1295. ! if "$(LOCALIZE_BASE_FILE)" != "1" && "$(LOCALIZE_BASE_FILE)" != "0"
  1296. ! error LOCALIZE_BASE_FILE must be empty, 1, or 0
  1297. ! endif
  1298. ! if "$(LOCALIZE_NO_MUI)" == "1"
  1299. ! error LOCALIZE_BASE_FILE cannot be used if LOCALIZE_NO_MUI is turned on (LOCALIZE_NO_MUI=1)
  1300. ! endif
  1301. ! if "$(MUI)" != "1"
  1302. ! error LOCALIZE_BASE_FILE cannot be used if MUI splitting is turned off (MUI=0)
  1303. ! endif
  1304. !endif
  1305.  
  1306. # Make sure we don't use LOCALIZE_BASE_FILE when it should not be used
  1307. !if "$(LOCALIZE_BASE_FILE)" == "1"
  1308. ! if ("$(TARGET_DESTINATION::=)" != "$(TARGET_DESTINATION)")
  1309. ! error LOCALIZE_BASE_FILE can not be used with multiple target destinations
  1310. ! endif
  1311. !endif
  1312.  
  1313. # Make sure no older/unsupported macros get used
  1314. !if defined(LANG_MISCFILES)
  1315. ! error LANG_MISCFILES has been deprecated. Use the proper PASSx_LANG_MISCFILES version instead.
  1316. !endif
  1317.  
  1318. !if defined(LOC_MISCFILES) || defined(I386_LOC_MISCFILES) || defined(IA64_LOC_MISCFILES) || defined(AMD64_LOC_MISCFILES)
  1319. ! error LOC_MISCFILES has been deprecated. Use the proper PASSx_LOC_MISCFILES version instead.
  1320. !endif
  1321.  
  1322. !if defined(MULTI_MISCFILES)
  1323. ! error MULTI_MISCFILES has been deprecated. Use the proper PASSx_MULTI_MISCFILES version instead.
  1324. !endif
  1325.  
  1326. #
  1327. # These are very special macros that are created based on the pass currently running
  1328. # based on the content of the PASS# variants of each macro. The code block we run
  1329. # in each pass is identical and they never run at the same time, so this enables us
  1330. # to re-use and not duplicate as much of the infrastructure as possible. It reduces
  1331. # the per-pass differences to these specific if blocks that _are_ pass specific.
  1332. #
  1333. !if "$(BUILD_PASS)" == "PASS0"
  1334. ! if defined(PASS0_LANG_MISCFILES)
  1335. LANG_MISCFILES=$(PASS0_LANG_MISCFILES)
  1336. LANG_MISCFILES_LOG=$(OBJ_PATH)\$O\pass0_lang_miscfiles.log
  1337. ! endif
  1338. ! if defined(PASS0_LOC_MISCFILES)
  1339. LOC_MISCFILES=$(PASS0_LOC_MISCFILES)
  1340. LOC_MISCFILES_LOG=$(OBJ_PATH)\$O\pass0_loc_miscfiles.log
  1341. LOC_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass0_loc_miscfiles.lcg.binplace.txt
  1342. ! endif
  1343. ! if defined(PASS0_LOC_MUI_MISCFILES)
  1344. LOC_MUI_MISCFILES=$(PASS0_LOC_MUI_MISCFILES)
  1345. LOC_MUI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass0_loc_mui_miscfiles.log
  1346. LOC_MUI_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass0_loc_mui_miscfiles_neutral.lst
  1347. LOC_MUI_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass0_loc_mui_miscfiles_resource.lst
  1348. LOC_MUI_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass0_loc_mui_miscfiles.lcg.binplace.txt
  1349. ! endif
  1350. ! if defined(PASS0_PRELOC_MISCFILES)
  1351. PRELOC_MISCFILES=$(PASS0_PRELOC_MISCFILES)
  1352. PRELOC_MISCFILES_LOG=$(OBJ_PATH)\$O\pass0_preloc_miscfiles.log
  1353. ! endif
  1354. ! if defined(PASS0_PRELOC_MUI_MISCFILES)
  1355. PRELOC_MUI_MISCFILES=$(PASS0_PRELOC_MUI_MISCFILES)
  1356. PRELOC_MUI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass0_preloc_mui_miscfiles.log
  1357. PRELOC_MUI_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass0_preloc_mui_miscfiles_neutral.lst
  1358. PRELOC_MUI_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass0_preloc_mui_miscfiles_resource.lst
  1359. ! endif
  1360. ! if defined(PASS0_PRELOC_MUI_ONLY_MISCFILES)
  1361. PRELOC_MUI_ONLY_MISCFILES=$(PASS0_PRELOC_MUI_ONLY_MISCFILES)
  1362. PRELOC_MUI_ONLY_MISCFILES_LOG=$(OBJ_PATH)\$O\pass0_preloc_mui_only_miscfiles.log
  1363. PRELOC_MUI_ONLY_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass0_loc_mui_only_miscfiles_neutral.lst
  1364. PRELOC_MUI_ONLY_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass0_loc_mui_only_miscfiles_resource.lst
  1365. ! endif
  1366. ! if defined(PASS0_MULTI_MISCFILES)
  1367. MULTI_MISCFILES=$(PASS0_MULTI_MISCFILES)
  1368. MULTI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass0_multi_miscfiles.log
  1369. MULTI_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass0_multi_miscfiles.lcg.binplace.txt
  1370. ! endif
  1371. ! if defined(PASS0_MULTI_MUI_MISCFILES)
  1372. MULTI_MUI_MISCFILES=$(PASS0_MULTI_MUI_MISCFILES)
  1373. MULTI_MUI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass0_multi_mui_miscfiles.log
  1374. MULTI_MUI_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass0_multi_mui_miscfiles_neutral.lst
  1375. MULTI_MUI_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass0_multi_mui_miscfiles_resource.lst
  1376. MULTI_MUI_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass0_multi_mui_miscfiles.lcg.binplace.txt
  1377. ! endif
  1378. !endif
  1379.  
  1380.  
  1381. !if "$(BUILD_PASS)" == "PASS1"
  1382. ! if defined(PASS1_LANG_MISCFILES)
  1383. LANG_MISCFILES=$(PASS1_LANG_MISCFILES)
  1384. LANG_MISCFILES_LOG=$(OBJ_PATH)\$O\pass1_lang_miscfiles.log
  1385. ! endif
  1386. ! if defined(PASS1_LOC_MISCFILES)
  1387. LOC_MISCFILES=$(PASS1_LOC_MISCFILES)
  1388. LOC_MISCFILES_LOG=$(OBJ_PATH)\$O\pass1_loc_miscfiles.log
  1389. LOC_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass1_loc_miscfiles.lcg.binplace.txt
  1390. ! endif
  1391. ! if defined(PASS1_LOC_MUI_MISCFILES)
  1392. LOC_MUI_MISCFILES=$(PASS1_LOC_MUI_MISCFILES)
  1393. LOC_MUI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass1_loc_mui_miscfiles.log
  1394. LOC_MUI_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass1_loc_mui_miscfiles_neutral.lst
  1395. LOC_MUI_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass1_loc_mui_miscfiles_resource.lst
  1396. LOC_MUI_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass1_loc_mui_miscfiles.lcg.binplace.txt
  1397. ! endif
  1398. ! if defined(PASS1_PRELOC_MISCFILES)
  1399. PRELOC_MISCFILES=$(PASS1_PRELOC_MISCFILES)
  1400. PRELOC_MISCFILES_LOG=$(OBJ_PATH)\$O\pass1_preloc_miscfiles.log
  1401. ! endif
  1402. ! if defined(PASS1_PRELOC_MUI_MISCFILES)
  1403. PRELOC_MUI_MISCFILES=$(PASS1_PRELOC_MUI_MISCFILES)
  1404. PRELOC_MUI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass1_preloc_mui_miscfiles.log
  1405. PRELOC_MUI_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass1_preloc_mui_miscfiles_neutral.lst
  1406. PRELOC_MUI_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass1_preloc_mui_miscfiles_resource.lst
  1407. ! endif
  1408. ! if defined(PASS1_PRELOC_MUI_ONLY_MISCFILES)
  1409. PRELOC_MUI_ONLY_MISCFILES=$(PASS1_PRELOC_MUI_ONLY_MISCFILES)
  1410. PRELOC_MUI_ONLY_MISCFILES_LOG=$(OBJ_PATH)\$O\pass1_preloc_mui_only_miscfiles.log
  1411. PRELOC_MUI_ONLY_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass1_loc_mui_only_miscfiles_neutral.lst
  1412. PRELOC_MUI_ONLY_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass1_loc_mui_only_miscfiles_resource.lst
  1413. ! endif
  1414. ! if defined(PASS1_MULTI_MISCFILES)
  1415. MULTI_MISCFILES=$(PASS1_MULTI_MISCFILES)
  1416. MULTI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass1_multi_miscfiles.log
  1417. MULTI_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass1_multi_miscfiles.lcg.binplace.txt
  1418. ! endif
  1419. ! if defined(PASS1_MULTI_MUI_MISCFILES)
  1420. MULTI_MUI_MISCFILES=$(PASS1_MULTI_MUI_MISCFILES)
  1421. MULTI_MUI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass1_multi_mui_miscfiles.log
  1422. MULTI_MUI_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass1_multi_mui_miscfiles_neutral.lst
  1423. MULTI_MUI_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass1_multi_mui_miscfiles_resource.lst
  1424. MULTI_MUI_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass1_multi_mui_miscfiles.lcg.binplace.txt
  1425. ! endif
  1426. !endif
  1427.  
  1428. !if "$(BUILD_PASS)" == "PASS2"
  1429. ! if defined(PASS2_LANG_MISCFILES)
  1430. LANG_MISCFILES=$(PASS2_LANG_MISCFILES)
  1431. LANG_MISCFILES_LOG=$(OBJ_PATH)\$O\pass2_lang_miscfiles.log
  1432. ! endif
  1433. ! if defined(PASS2_LOC_MISCFILES)
  1434. LOC_MISCFILES=$(PASS2_LOC_MISCFILES)
  1435. LOC_MISCFILES_LOG=$(OBJ_PATH)\$O\pass2_loc_miscfiles.log
  1436. LOC_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass2_loc_miscfiles.lcg.binplace.txt
  1437. ! endif
  1438. ! if defined(PASS2_LOC_MUI_MISCFILES)
  1439. LOC_MUI_MISCFILES=$(PASS2_LOC_MUI_MISCFILES)
  1440. LOC_MUI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass2_loc_mui_miscfiles.log
  1441. LOC_MUI_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass2_loc_mui_miscfiles_neutral.lst
  1442. LOC_MUI_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass2_loc_mui_miscfiles_resource.lst
  1443. LOC_MUI_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass2_loc_mui_miscfiles.lcg.binplace.txt
  1444. ! endif
  1445. ! if defined(PASS2_PRELOC_MISCFILES)
  1446. PRELOC_MISCFILES=$(PASS2_PRELOC_MISCFILES)
  1447. PRELOC_MISCFILES_LOG=$(OBJ_PATH)\$O\pass2_preloc_miscfiles.log
  1448. ! endif
  1449. ! if defined(PASS2_PRELOC_MUI_MISCFILES)
  1450. PRELOC_MUI_MISCFILES=$(PASS2_PRELOC_MUI_MISCFILES)
  1451. PRELOC_MUI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass2_preloc_mui_miscfiles.log
  1452. PRELOC_MUI_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass2_preloc_mui_miscfiles_neutral.lst
  1453. PRELOC_MUI_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass2_preloc_mui_miscfiles_resource.lst
  1454. ! endif
  1455. ! if defined(PASS2_PRELOC_MUI_ONLY_MISCFILES)
  1456. PRELOC_MUI_ONLY_MISCFILES=$(PASS2_PRELOC_MUI_ONLY_MISCFILES)
  1457. PRELOC_MUI_ONLY_MISCFILES_LOG=$(OBJ_PATH)\$O\pass2_preloc_mui_only_miscfiles.log
  1458. PRELOC_MUI_ONLY_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass2_loc_mui_only_miscfiles_neutral.lst
  1459. PRELOC_MUI_ONLY_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass2_loc_mui_only_miscfiles_resource.lst
  1460. ! endif
  1461. ! if defined(PASS2_MULTI_MISCFILES)
  1462. MULTI_MISCFILES=$(PASS2_MULTI_MISCFILES)
  1463. MULTI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass2_multi_miscfiles.log
  1464. MULTI_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass2_multi_miscfiles.lcg.binplace.txt
  1465. ! endif
  1466. ! if defined(PASS2_MULTI_MUI_MISCFILES)
  1467. MULTI_MUI_MISCFILES=$(PASS2_MULTI_MUI_MISCFILES)
  1468. MULTI_MUI_MISCFILES_LOG=$(OBJ_PATH)\$O\pass2_multi_mui_miscfiles.log
  1469. MULTI_MUI_MISCFILES_NEUTRAL_LIST=$(OBJ_PATH)\$O\pass2_multi_mui_miscfiles_neutral.lst
  1470. MULTI_MUI_MISCFILES_RESOURCE_LIST=$(OBJ_PATH)\$O\pass2_multi_mui_miscfiles_resource.lst
  1471. MULTI_MUI_MISCFILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\pass2_multi_mui_miscfiles.lcg.binplace.txt
  1472. ! endif
  1473. !endif
  1474.  
  1475. # For prelocalized files, we need to know what language they are. Note that this is
  1476. # intentionally different from the somewhat ambigiously used $(LANG) variable...
  1477. !if defined(PRELOC_MISCFILES) || \
  1478. defined(PRELOC_MUI_MISCFILES) || \
  1479. defined(PRELOC_MUI_ONLY_MISCFILES) || \
  1480. defined(PRELOC_PRINTER_INFS) || \
  1481. "$(TARGETTYPE)" == "USER_ASSISTANCE"
  1482.  
  1483. # Validate PRELOC_BASE_LANG if it's set
  1484. !if defined (PRELOC_BASE_LANG)
  1485. ! if "$(PRELOC_BASE_LANG)" != "1" && "$(PRELOC_BASE_LANG)" != "0"
  1486. ! error PRELOC_BASE_LANG can only be set to 1 or 0
  1487. ! endif
  1488. !endif
  1489.  
  1490. # Validate we have something for the language for prelocalized files
  1491. ! if "$(PRELOC_LANG: =)" == "" && "$(PRELOC_BASE_LANG)" != "1"
  1492. # multi line errors require the older !message style
  1493. ! message error : If using any of the PASSx_PRELOC_MISCFILES, PASSx_PRELOC_MUI_MISCFILES,
  1494. ! message error : PASSx_PRELOC_MUI_ONLY_MISCFILES, or PRELOC_PRINTER_INFS macros, or
  1495. ! message error : TARGETTYPE=USER_ASSISTANCE, you must do one of the following in your
  1496. ! message error : sources file:
  1497. ! message error : - Set PRELOC_LANG to a valid language
  1498. ! error : - Set PRELOC_BASE_LANG=1
  1499. ! endif
  1500.  
  1501. # Validate things are not in conflict
  1502. ! if defined(PRELOC_LANG) && "$(PRELOC_BASE_LANG)" == "1"
  1503. ! error You cannot set PRELOC_BASE_LANG=1 and set PRELOC_LANG.
  1504. ! endif
  1505.  
  1506. # Make sure we set the right binplace directory for prelocalized files
  1507. # NOTE: Rebuild these values from scratch and do not re-use $(LOC_UA)
  1508. !if defined(PRELOC_LANG)
  1509. PRELOC_BINPLACE_DIR=$(LOC_PRELOC)\$(PRELOC_LANG)
  1510. UA_BINPLACE_DIR=$(LOC_PRELOC)\$(PRELOC_LANG)\UA
  1511. !else
  1512. PRELOC_BINPLACE_DIR=$(LOC_BIN)
  1513. UA_BINPLACE_DIR=$(LOC_BIN)\UA
  1514. !endif
  1515.  
  1516. # For UA files, check for obvious errors and get them binplacing correctly
  1517. !if "$(TARGETTYPE)" == "USER_ASSISTANCE"
  1518. ! if "$(ALT_PROJECT_TARGET)" != "" && "$(ALT_PROJECT_TARGET)" != "."
  1519. ! error Must not define ALT_PROJECT_TARGET with TARGETYPE=USER_ASSISTANCE.
  1520. ! else
  1521. ALT_PROJECT_TARGET=$(UA_BINPLACE_DIR)
  1522. ! endif
  1523. !endif
  1524.  
  1525. !endif # PRELOC_*
  1526.  
  1527. !if defined(LOC_PLA_XML_FILES)
  1528. LOC_PLA_XML_FILES_LOG=$(OBJ_PATH)\$O\loc_pla_xml_files.log
  1529. LOC_PLA_XML_FILES_RESOURCE_LIST=$(OBJ_PATH)\$O\loc_pla_xml_files_resource.lst
  1530. LOC_PLA_XML_FILES_LCG_BINPLACE_TXT=$(OBJ_PATH)\$(O)\loc_pla_xml_files.lcg.binplace.txt
  1531. !endif
  1532.  
  1533. # Validate that there is no conflict between the *_MUI_MISCFILES macros and the MUI macro.
  1534. !if defined(LOC_MUI_MISCFILES) || \
  1535. defined(MULTI_MUI_MISCFILES) || \
  1536. defined(PRELOC_MUI_MISCFILES) || \
  1537. defined(PRELOC_MUI_ONLY_MISCFILES)
  1538. ! if "$(MUI)" == "0"
  1539. ! error You cannot set MUI=0 if you are using any of the *_MUI_MISCFILE macros.
  1540. ! endif # MUI==0
  1541. !endif # defined(*_MUI_MISCFILES)
  1542.  
  1543.  
  1544. # Support to compile CMI manifests
  1545. !if ( defined(CMI_MANIFESTS) \
  1546. || defined(CMI_WOW64_MANIFESTS) \
  1547. || defined(CMI_MULTI_MANIFESTS) \
  1548. || defined(CMI_MULTI_WOW64_MANIFESTS) \
  1549. || defined(EVENTS_MANIFEST) \
  1550. || defined(CMI_PROD_MANIFESTS) \
  1551. || defined(CMI_WOW64_PROD_MANIFESTS) \
  1552. || defined(CMI_EDITION_MANIFESTS) \
  1553. ) && !defined(MANIFEST_COMPILER_CMD)
  1554. MANIFEST_COMPILER_CMD=cscript //nologo $(RAZZLETOOLPATH)\ManifestCompiler.vbs $(RAZZLETOOLPATH)\ManifestCompiler.xsl
  1555. !endif
  1556.  
  1557.  
  1558. # Support for components that use manifest-generated events or direct calls
  1559. # to ETW APIs that aren't defined in ntetw.h, but want to use the Etw*
  1560. # routines in ntdll.dll rather than the Win32 forwarders in advapi32.dll.
  1561.  
  1562. !IF "$(MANPP_USE_NTDLL_EVENT_FUNCTIONS)" == "1"
  1563. C_DEFINES=$(C_DEFINES) \
  1564. -DEventActivityIdControl=EtwEventActivityIdControl \
  1565. -DEventEnabled=EtwEventEnabled \
  1566. -DEventProviderEnabled=EtwEventProviderEnabled \
  1567. -DEventRegister=EtwEventRegister \
  1568. -DEventUnregister=EtwEventUnregister \
  1569. -DEventWrite=EtwEventWrite \
  1570. -DEventWriteEx=EtwEventWriteEx \
  1571. -DEventWriteEndScenario=EtwEventWriteEndScenario \
  1572. -DEventWriteStartScenario=EtwEventWriteStartScenario \
  1573. -DEventWriteString=EtwEventWriteString \
  1574. -DEventWriteTransfer=EtwEventWriteTransfer \
  1575. -DGetTraceLoggerHandle=EtwGetTraceLoggerHandle \
  1576. -DGetTraceEnableLevel=EtwGetTraceEnableLevel \
  1577. -DGetTraceEnableFlags=EtwGetTraceEnableFlags \
  1578. -DRegisterTraceGuidsA=EtwRegisterTraceGuidsA \
  1579. -DRegisterTraceGuidsW=EtwRegisterTraceGuidsW \
  1580. -DTraceEvent=EtwLogTraceEvent \
  1581. -DTraceMessage=EtwTraceMessage \
  1582. -DUnregisterTraceGuids=EtwUnregisterTraceGuids
  1583. !ENDIF
  1584.  
  1585. !IF defined(CMI_MANIFESTS)
  1586. SOURCE_MANIFEST = $(OBJ_PATH)\$O\source_manifest.log
  1587. !ENDIF
  1588.  
  1589. !IF $(386) && defined(CMI_WOW64_MANIFESTS)
  1590. WOW64_SOURCE_MANIFEST = $(OBJ_PATH)\$O\wow64_source_manifest.log
  1591. !ENDIF
  1592.  
  1593. !IF defined(CMI_MULTI_MANIFESTS)
  1594. MULTI_SOURCE_MANIFEST = $(OBJ_PATH)\$O\multi_source_manifest.log
  1595. !ENDIF
  1596.  
  1597. !IF $(386) && defined(CMI_MULTI_WOW64_MANIFESTS)
  1598. MULTI_WOW64_SOURCE_MANIFEST = $(OBJ_PATH)\$O\multi_wow64_source_manifest.log
  1599. !ENDIF
  1600.  
  1601. !IF defined(CMI_PROD_MANIFESTS)
  1602. PROD_SOURCE_MANIFEST = $(OBJ_PATH)\$O\prod_source_manifest.log
  1603. INTERNAL_SOURCE_MANIFEST = $(OBJ_PATH)\$O\internal_source_manifest.log
  1604. !ENDIF
  1605.  
  1606. !IF $(386) && defined(CMI_WOW64_PROD_MANIFESTS)
  1607. PROD_WOW64_SOURCE_MANIFEST = $(OBJ_PATH)\$O\prod_wow64_source_manifest.log
  1608. INTERNAL_WOW64_SOURCE_MANIFEST = $(OBJ_PATH)\$O\internal_wow64_source_manifest.log
  1609. !ENDIF
  1610.  
  1611. !IF defined(CMI_EDITION_MANIFESTS)
  1612. EDITION_SOURCE_MANIFEST = $(OBJ_PATH)\$O\edition_source_manifest.log
  1613. !ENDIF
  1614.  
  1615. !IF defined(CMI_WINPE_MANIFESTS)
  1616. WINPE_SOURCE_MANIFEST = $(OBJ_PATH)\$O\winpe_source_manifest.log
  1617. !ENDIF
  1618.  
  1619. !ifndef MANIFEST_COMPILER_CMD
  1620. MANIFEST_COMPILER_CMD=cscript //nologo $(RAZZLETOOLPATH)\ManifestCompiler.vbs $(RAZZLETOOLPATH)\ManifestCompiler.xsl
  1621. !endif
  1622.  
  1623. !ifndef MANIFEST_RCPARSER_CMD
  1624. MANIFEST_RCPARSER_CMD=rcmanparse
  1625. !endif
  1626.  
  1627. !if defined(MT_SKIP_MANIFEST_VALIDATION)
  1628. !else
  1629. MT_OPTIONS=$(MT_OPTIONS) -validate_manifest
  1630. !endif
  1631.  
  1632. MT_FIXUP_LIST=FixDefWildcardAttributes,FixSystem32Path,FixBuildAssemblyPath,CorralRegistryData,FixResourceStrings,ConvertNegativeRegDwordValues,MapDirIdToDirectoryName,CanonicalizeRegistryKeyNames,AddMissingManifestVersionAttribute,AddMissingPublicKeyTokenToDefId,ExpandShortRootKeyNames,MergeDuplicateRegistryKeys,RemoveDuplicateComClasses,RemoveDuplicateProgIds,RemoveDuplicateDependencies,RemoveDuplicateRegistryValues,FixResourceStrings,IgnoreDrivers,AddMissingSecurityDescriptors,RemoveFileDependencies,RemovePrerequisiteDependencies,RemoveRedirectInfo
  1633.  
  1634. !ifndef MT_NO_COPYRIGHT_FIXUP
  1635. MT_FIXUP_LIST=$(MT_FIXUP_LIST),ForceMicrosoftCopyright
  1636. !endif
  1637.  
  1638. !if defined(MT_SKIP_MANIFEST_FIXUPS)
  1639. !else
  1640. MT_OPTIONS=$(MT_OPTIONS) -fix_bogus_manifests:$(MT_FIXUP_LIST)
  1641. !endif
  1642.  
  1643. !ifndef PASS_INDEPENDENT_TARGETS
  1644. ! ifdef _PROJECT_BUILDS_MANAGED_CODE
  1645. ! ifdef MANAGED_CXX
  1646. ! if "$(TARGETTYPE)" == "LIBRARY" || "$(TARGETTYPE)" == "NOTARGET"
  1647. _MANAGED_CXX_LIBRARY=1
  1648. ! endif
  1649. ! if "$(MANAGED_TARGET_TYPE)" == "module"
  1650. ! if "$(URT_VER)" >= "2.0"
  1651. USER_C_FLAGS=$(USER_C_FLAGS) /LN
  1652. ! endif # } }
  1653. LINKER_FLAGS=$(LINKER_FLAGS) /NoAssembly
  1654. ! endif
  1655. ! endif
  1656.  
  1657.  
  1658. ! endif
  1659. !endif # PASS_INDEPENDENT_TARGETS
  1660.  
  1661.  
  1662. #
  1663. # set up NO_BINPLACE early so everyone that wants to check this can check it
  1664. # Two reasons not to binplace:
  1665. # 1) since we're generating binary drops of this source there's no need to
  1666. # binplace the files. The files should be binplaced from the binary_release
  1667. # directory.
  1668. # 2) there's nowhere to move the files to
  1669. #
  1670. !if defined(BINARY_PUBLISH) || \
  1671. defined(BINARY_PUBLISH_DIR) || \
  1672. !defined(_NTTREE) || \
  1673. (defined(TEST_CODE) && defined(NO_TEST_BINPLACE))
  1674. NO_BINPLACE=1
  1675. !endif
  1676.  
  1677. !ifndef PASS_INDEPENDENT_TARGETS
  1678.  
  1679. !if defined(MANIFESTS) && "$(MANIFESTS: =)" == ""
  1680. ! error error If MANIFESTS is defined, it must not be empty.
  1681. # And just containing spaces is the same as empty.
  1682. !endif
  1683.  
  1684. !if ((defined(_PROJECT_BUILDS_MANAGED_CODE) && ("$(BUILD_PRODUCT)" == "NT")) \
  1685. || defined(MANIFESTS) \
  1686. || defined(ASSEMBLY_IDENTITY_NAME)) \
  1687. && !defined(_MAKING_ASMID_INC) \
  1688. && !defined(_MANAGED_CXX_LIBRARY) \
  1689. && "$(MANAGED_TARGET_TYPE)" != "module"
  1690.  
  1691. !if defined(MANAGED_PLATFORM_SPECIFIC) && "$(MANAGED_PLATFORM_SPECIFIC)" != "1"
  1692. !error MANAGED_PLATFORM_SPECIFIC must be set to 1 or not defined
  1693. !endif
  1694.  
  1695. WINDOWS_ASSEMBLY_VERSION=$(WINDOWS_VERSION)
  1696. ! include $(OBJECT_ROOT)\$O\translate_asmid.inc
  1697.  
  1698. #
  1699. # Run idtool.
  1700. #
  1701. ! if [nmake.exe /nologo /f $(NTMAKEENV)\makefile.def _ASSEMBLY_IDENTITY=$(_ASSEMBLY_IDENTITY) _MAKING_ASMID_INC=1 $(OBJ_PATH)\$O\_asmid.inc]
  1702. ! endif
  1703. ! include $(OBJ_PATH)\$O\_asmid.inc
  1704. !endif
  1705.  
  1706. !if defined(COM_VISIBLE) && "$(COM_VISIBLE)" != "0" && "$(COM_VISIBLE)" != "1"
  1707. ! error COM_VISIBLE must be 0 or 1 or not defined.
  1708. !endif
  1709.  
  1710. !if defined(COM_VISIBLE) && !defined(_PROJECT_BUILDS_MANAGED_CODE)
  1711. ! error COM_VISIBLE can only be defined for managed code.
  1712. # Review -- just ignore it?
  1713. !endif
  1714.  
  1715. # SXS_NO_BINPLACE will be deprecated.
  1716. # It will be replaced by reversing the default and introducing a new macro for the other case:
  1717. # ASSEMBLY_IS_SXS=1
  1718. # which defaults to 1 for managed code and it set explicitly for comctl32.dll, etc.
  1719. !if defined(SXS_NO_BINPLACE) && "$(SXS_NO_BINPLACE)" != "1"
  1720. ! error SXS_NO_BINPLACE must be 1 or not defined.
  1721. !endif
  1722.  
  1723. #
  1724. # TARGEXT is .lib in pass1 building PROGLIB, DYNLINK
  1725. # but LINK_TARGETEXT is not.
  1726. #
  1727. # TBD: The logic for TARGETEXT should move up to here and provide this.
  1728. # This is just a small subset.
  1729. #
  1730. # EXPORT_DRIVER DRIVER MINIPORT DYNLINK LIBRARY DRIVER_LIBRARY..
  1731. #
  1732. !if "$(TARGETTYPE)" == "PROGRAM" || "$(TARGETTYPE)" == "PROGLIB"
  1733. LINK_TARGETEXT=exe
  1734. !else
  1735. LINK_TARGETEXT=dll
  1736. !endif
  1737.  
  1738. !if defined(NTKERNEL)
  1739. __TARGETNAME=$(NTKERNEL)
  1740. __TARGETEXT=exe
  1741. !else
  1742. __TARGETNAME=$(TARGETNAME)
  1743. __TARGETEXT=$(TARGETEXT)
  1744. !endif
  1745.  
  1746. #
  1747. # Deal with referencing public keys from the global build initialization data
  1748. # generated from the rather misnamed "versions.xml" into various includable forms
  1749. !if "$(BUILD_PRODUCT)" == "NT"
  1750. ! ifdef USE_PUBLIC_KEY_REFERENCES
  1751. ! ifdef _PROJECT_BUILDS_MANAGED_CODE
  1752. REFERENCES=$(REFERENCES);$(SDK_REF_PATH)\Microsoft.Windows.Identity.dll
  1753. ! else
  1754. ! error USE_PUBLIC_KEY_REFERENCES only supports managed code
  1755. ! endif
  1756. ! endif
  1757. !endif
  1758.  
  1759.  
  1760. #
  1761. # Where did the name ".asmmeta" come from?
  1762. # ".asm" == "assembly source code", not just x86, ia64, amd64, etc., but also il.
  1763. # ".meta" == "metadata only .dll"
  1764. # => ".asmmeta" == "assembly source code to metadata only .dll"
  1765. #
  1766. # ".meta" is also sometimes known as "dehydrated .dll" or "dehydrated assembly".
  1767. # (assembly has another meaning -- "unit of deployment", ".dll", "self described .dll", ".dll + .xml manifest")
  1768. #
  1769. # For our purposes, we drop the term ".meta" and instead refer to "metadata only .dlls" (or .exes).
  1770. #
  1771. # Asmmeta.exe is basically a stripped down ildasm.
  1772. # It removes all code (leaving "ret" instructions) but leaves in all the declarations, all the metadata.
  1773. #
  1774. # Asmmeta.exe's output includes version numbers.
  1775. #
  1776. # Version numbers must be changable fairly rapidly, must be changed rapidly, else the ability
  1777. # to change them will greatly decrease.
  1778. #
  1779. # So version numbers must be removed from asmmeta.exe's output, and put back in right before running ilasm.
  1780. #
  1781. # o\foo.asmmeta_ver_pass0 has versions; it is input to ilasm in pass0.
  1782. # o\foo.asmmeta_ver_pass2 has versions; it is the output of asmmeta.exe in pass2.
  1783. # Given a steady state of no code changes, the above two files are identical.
  1784. # .\foo.asmmeta lacks versions; it is the checked in textual "source" file (though not hand written and not very readable).
  1785. #
  1786. # foo.cs => o\foo.dll => o\asmmeta_ver_pass2 => comparison/copy => .\asmmeta => o\asmmeta_ver_pass0 => o\foo.metadata_dll
  1787. #
  1788. # as long as foo.cs is unchanged:
  1789. # pass0: .\asmmeta => o\asmmeta_ver_pass0 => o\foo.metadata_dll
  1790. # pass2: foo.cs => o\foo.dll => o\asmmeta_ver_pass2 => comparison/(no)copy => stop
  1791. #
  1792. # if foo.cs is changed, then:
  1793. # pass0: .\asmmeta => o\asmmeta_ver_pass0 => o\foo.metadata_dll
  1794. # pass2: foo.cs => o\foo.dll => o\asmmeta_ver_pass2 => comparison/copy => developer must build again
  1795. # next pass0 => .\asmmeta => o\asmmeta_ver_pass0 => o\foo.metadata_dll
  1796. #
  1797.  
  1798. # detect .asmmetas that are no longer needed
  1799. !if defined(_PROJECT_BUILDS_MANAGED_CODE) \
  1800. && "$(TARGETTYPE)" == "PROGRAM" \
  1801. && !defined(USE_ASMMETA) \
  1802. && !defined(ASMMETA_INPUT) \
  1803. && exist($(TARGETNAME).asmmeta)
  1804. ! error delete $(MAKEDIR)\$(TARGETNAME).asmmeta
  1805. !endif
  1806.  
  1807. !if defined(_PROJECT_BUILDS_MANAGED_CODE)
  1808. ! if defined(USE_ASMMETA)
  1809. ! if "$(TARGETTYPE)" == "DYNLINK"
  1810. ! message $(MAKEDIR) USE_ASMMETA=1 does nothing when TARGETTYPE == DYNLINK, remove it.
  1811. ! else
  1812. ! if "$(USE_ASMMETA)" != "1"
  1813. ! error $(MAKEDIR) USE_ASMMETA must be 1 or not defined, change it to 1.
  1814. ! endif
  1815. ! endif
  1816. ! endif
  1817. !else
  1818.  
  1819. #
  1820. # This if needs some work, it lets too much through.
  1821. #
  1822. ! if defined(USE_ASMMETA) \
  1823. && !(defined(ASSEMBLY_IDENTITY_VERSION_NAME) || defined(URT_VER))
  1824. ! error $(MAKEDIR) USE_ASMMETA does nothing for native code; remove it.
  1825. ! endif
  1826.  
  1827. !endif
  1828.  
  1829. !if \
  1830. ( \
  1831. (defined(_PROJECT_BUILDS_MANAGED_CODE) && ("$(BUILD_PRODUCT)" == "NT") && ("$(TARGETTYPE)" != "PROGRAM")) \
  1832. || defined(USE_ASMMETA) \
  1833. || defined(ASMMETA_INPUT) \
  1834. ) \
  1835. && !defined(_MANAGED_CXX_LIBRARY) \
  1836. && ("$(MANAGED_TARGET_TYPE)" != "module" || defined(ASMMETA_INPUT)) \
  1837. && "$(TARGETEXT)" != "lib"
  1838.  
  1839. ! if exist($(TARGETNAME).asmmeta) && exist($(TARGET_DIRECTORY)\$(TARGETNAME).asmmeta)
  1840. ! message warning : delete $(MAKEDIR)\$(TARGETNAME).asmmeta or $(MAKEDIR)\$(TARGET_DIRECTORY)\$(TARGETNAME).asmmeta
  1841. ! endif
  1842.  
  1843. ! ifndef SOURCE_ASMMETA
  1844. ! if exist($(TARGET_DIRECTORY)\$(TARGETNAME).asmmeta)
  1845. SOURCE_ASMMETA=$(TARGET_DIRECTORY)\$(TARGETNAME).asmmeta
  1846. ! else
  1847. SOURCE_ASMMETA=$(TARGETNAME).asmmeta
  1848. ! endif
  1849. ! endif
  1850.  
  1851. ! if exist($(SOURCE_ASMMETA))
  1852. _O_BINARY_METADATA=$(OBJ_PATH)\$O\$(TARGETNAME).metadata_$(LINK_TARGETEXT)
  1853. ! endif
  1854. _O_ASMMETA_OUTPUT=$(OBJ_PATH)\$O\$(TARGETNAME).asmmeta_ver_pass2
  1855. _O_ASMMETA=$(OBJ_PATH)\$O\$(TARGETNAME).asmmeta
  1856.  
  1857. ! ifndef ASMMETA_INPUT
  1858. # TBD -- why isn't it always defined?
  1859. ! ifdef TARGET
  1860. ASMMETA_INPUT=$(TARGET)
  1861. ! else
  1862. ASMMETA_INPUT=$(TARGETPATH)\$(TARGET_DIRECTORY)\$(TARGETNAME).$(TARGETEXT:.=)
  1863. ! endif
  1864. ! endif
  1865.  
  1866. !endif
  1867.  
  1868. #
  1869. # SXS_LOCALIZE is going away.
  1870. #
  1871. #
  1872. # This would be the default but so far everyone is an exception.
  1873. # Comctl32.dll has multiple languages in the code .dll.
  1874. # Gdiplus.dll has no resources.
  1875. # Rtc is using system32 fallback + explicit satellite dependency.
  1876. #
  1877. # Besides that, nobody yet needs this.
  1878. #
  1879.  
  1880. !if defined(SXS_LOCALIZE_ASSEMBLY_MUI) && "$(SXS_LOCALIZE_ASSEMBLY_MUI)" != "1"
  1881. ! error SXS_LOCALIZE_ASSEMBLY_MUI can only be set to 1.
  1882. !endif
  1883.  
  1884. !if defined(SXS_LOCALIZE_ASSEMBLY_SATELLITE_WITH_EXPLICIT_DEPENDENCY) && "$(SXS_LOCALIZE_ASSEMBLY_SATELLITE_WITH_EXPLICIT_DEPENDENCY)" != "1"
  1885. ! error SXS_LOCALIZE_ASSEMBLY_SATELLITE_WITH_EXPLICIT_DEPENDENCY can only be set to 1.
  1886. !endif
  1887.  
  1888. !if defined(SXS_LOCALIZE_ASSEMBLY_SATELLITE_WITH_EXPLICIT_DEPENDENCY) && !defined(SXS_LANGUAGE)
  1889. ! error If you set SXS_LOCALIZE_ASSEMBLY_SATELLITE_WITH_EXPLICIT_DEPENDENCY, you must also set SXS_LANGUAGE, and use SXS_LANGUAGE in your assembly identity.
  1890. !endif
  1891.  
  1892.  
  1893. #
  1894. # SideBySide (SXS) Build
  1895. #
  1896. # Step by Step instructions
  1897. #
  1898. # For building a monolithic application, foo.ext (where .ext is usually .exe but for example .scr).
  1899. # For building an application that hosts arbitrary (3rd party) code.
  1900. # For building a single file component like comctl32.dll.
  1901. # For building a multiple file component.
  1902. #
  1903. # Reference
  1904. #
  1905. # An assembly contains a manifest and one or more files, usually .dlls.
  1906. # The manifest can be in a resource in one of the files, or it can be in a seperate
  1907. # .manifest file. For purposes of fitting on an 8.3 CD, .man is allowed.
  1908. # Build.exe is generally limited to building one .dll per directory, so
  1909. # you can be building files for an assembly without building a manifest.
  1910. #
  1911. # To build/binplace a manifest:
  1912. #
  1913. # SXS_MANIFEST required
  1914. # This is the source file that contains your manifest.
  1915. # It must end in .manifest.
  1916. # It is always preprocessed. Available macros include:
  1917. # SXS_ASSEMBLY_NAME
  1918. # SXS_ASSEMBLY_VERSION
  1919. # SXS_ASSEMBLY_LANGUAGE
  1920. # SXS_PROCESSOR_ARCHITECTURE
  1921. #
  1922. # SXS_MANIFEST_IN_RESOURCES optional
  1923. # This is defined or not, so you just say
  1924. # SXS_MANIFEST_IN_RESOURCES=
  1925. # or don't say anything.
  1926. #
  1927. # SXS_ASSEMBLY_NAME and/or SXS_SHORT_ASSEMBLY_NAME required
  1928. # One can be generated from the other.
  1929. # SXS_SHORT_ASSEMBLY_NAME is used where 8.3 limits apply, like on the product CD.
  1930. # Both of these macros can be hierarchical, using dot, dash, or underscore to seperate
  1931. # elements. SXS_SHORT_ASSEMBLY_NAME should actually only contain 8 character elements.
  1932. #
  1933. # SXS_ASSEMBLY_VERSION optional, defaults to 5.1.
  1934. #
  1935. # SXS_ASSEMBLY_LANGUAGE or SXS_ASSEMBLY_LANGUAGE_INDEPENDENT required
  1936. # SXS_ASSEMBLY_LANGUAGE_INDEPENDENT is defined or not.
  1937. # SXS_ASSEMBLY_LANGUAGE is four digits like
  1938. # 0409 for English US
  1939. # 0009 for English
  1940. # 0000 for language independent
  1941. # We should make this easier as is done for resources (LANGUAGE => RCCODEPAGE), but for now we don't.
  1942. #
  1943. # To build/binplace a file into an assembly, a subset of the information
  1944. # needed for manifests is needed:
  1945. #
  1946. # SXS_ASSEMBLY_NAME and/or SXS_SHORT_ASSEMBLY_NAME
  1947. # SXS_ASSEMBLY_VERSION
  1948. # SXS_ASSEMBLY_LANGUAGE or SXS_ASSEMBLY_LANGUAGE_INDEPENDENT
  1949. #
  1950. # There are restrictions on the values of these macros and not all restrictions
  1951. # are currently enforced by the build. Enforcement is in verify.src.
  1952. #
  1953.  
  1954. !if "$(ALT_PROJECT)" == "WOW6432" || "$(ALT_PROJECT_TARGET)" == "WOW6432"
  1955. SXS_PDB_WOW6432_W_PREFIX=w
  1956. SXS_LOG_WOWBINS_W_ASMS_PREFIX=w
  1957. SXS_LOG_BINPLACE_WOW6432_PREFIX=wow6432^\
  1958. SXS_WOW6432=1
  1959. !endif
  1960.  
  1961. #
  1962. # There's two meta-modes of operation in SXS - Application manifest mode and component manifest mode.
  1963. # Depending on what you have defined in your sources file, you can simplify all of the build process
  1964. # down to a very minimal set of commands in your sources files and still get Fusionization goodness.
  1965. #
  1966. # Example:
  1967. #
  1968. # SXS_APPLICATION_MANIFEST=MyAppManifest.manifest
  1969. #
  1970. # (or)
  1971. #
  1972. # SXS_COMPONENT_MANIFEST=MyComponentManifest.manifest
  1973. #
  1974. # See the code below for what gets defined based on each - it's more or less the defaults, but
  1975. # explicitly spelled out.
  1976. #
  1977.  
  1978. # No fair using either app and component manifest, and specifying sxs_manifest, or using both by accident
  1979. !if defined(SXS_APPLICATION_MANIFEST) && defined(SXS_COMPONENT_MANIFEST)
  1980. ! error You can have only one of SXS_APPLICATION_MANIFEST or SXS_COMPONENT_MANIFEST, not both
  1981. !elseif defined(SXS_MANIFEST) && ( defined(SXS_APPLICATION_MANIFEST) || defined(SXS_COMPONENT_MANIFEST) )
  1982. ! error When using SXS_APPLICATION_MANIFEST or SXS_COMPONENT_MANIFEST, do not specify SXS_MANIFEST
  1983. !endif
  1984.  
  1985. # Applications get the following defaults that are not defaulted later:
  1986. # - SXS_ASSEMBLY_LANGUAGE=SXS_ASSEMBLY_LANGUAGE_INDEPENDENT
  1987. # - SXS_ASSEMBLY_NAME=Microsoft.Windows.$(PROJECT).$(TARGETNAME)
  1988. # - Manifest in resources
  1989. !ifdef SXS_APPLICATION_MANIFEST
  1990. SXS_MANIFEST=$(SXS_APPLICATION_MANIFEST)
  1991. SXS_MANIFEST_IN_RESOURCES=1
  1992. SXS_NO_BINPLACE=1
  1993. !ifndef SXS_ASSEMBLY_NAME
  1994. SXS_ASSEMBLY_NAME=Microsoft.Windows.$(_PROJECT_:\=.).$(TARGETNAME:_=-)
  1995. !endif
  1996. !ifndef SXS_ASSEMBLY_LANGUAGE
  1997. SXS_ASSEMBLY_LANGUAGE_INDEPENDENT=1
  1998. !endif
  1999.  
  2000. # Components get the following defaulted:
  2001. # - SXS_ASSEMBLY_NAME=Microsoft.Windows.$(PROJECT).$(TARGETNAME)
  2002. # - Language independent
  2003. !elseif defined(SXS_COMPONENT_MANIFEST)
  2004. SXS_MANIFEST=$(SXS_COMPONENT_MANIFEST)
  2005. !ifndef SXS_ASSEMBLY_NAME
  2006. SXS_ASSEMBLY_NAME=Microsoft.Windows.$(_PROJECT_\=.).$(TARGETNAME)
  2007. !endif
  2008. !ifndef SXS_ASSEMBLY_LANGUAGE
  2009. SXS_ASSEMBLY_LANGUAGE_INDEPENDENT=1
  2010. !endif
  2011.  
  2012. !endif
  2013.  
  2014. !include $(NTMAKEENV)\verify.src
  2015.  
  2016. !ifdef ISOLATION_AWARE_ENABLED
  2017. C_DEFINES=$(C_DEFINES) /DISOLATION_AWARE_ENABLED=1
  2018. !endif
  2019.  
  2020. #
  2021. # NO_BINPLACE implies SXS_NO_BINPLACE
  2022. #
  2023. !ifdef NO_BINPLACE
  2024. SXS_NO_BINPLACE=1
  2025. !endif
  2026.  
  2027. #
  2028. # Building an .exe implies SXS_NO_BINPLACE, no publishing
  2029. #
  2030. !if "$(TARGETTYPE)" == "PROGRAM"
  2031. SXS_NO_BINPLACE=1
  2032. ! if ((defined(PASS0_PUBLISH)) || (defined(PASS1_PUBLISH))) && !defined(PUBLISH_EXE_ALLOWED)
  2033. ! error $(MAKEDIR) directories where TARGETTYPE is set to "PROGRAM" may not publish files
  2034. ! endif
  2035. !endif
  2036.  
  2037.  
  2038. #
  2039. # We can build SXS_ASSEMBLY_NAME out of SXS_SHORT_ASSEMBLY_NAME
  2040. # and vice versa.
  2041. #
  2042.  
  2043. !if !defined(SXS_ASSEMBLY_NAME) && defined(SXS_SHORT_ASSEMBLY_NAME)
  2044. SXS_ASSEMBLY_NAME=$(SXS_SHORT_ASSEMBLY_NAME)
  2045. !endif
  2046.  
  2047. !if !defined(SXS_SHORT_ASSEMBLY_NAME) && defined(SXS_ASSEMBLY_NAME)
  2048. SXS_SHORT_ASSEMBLY_NAME=$(SXS_ASSEMBLY_NAME)
  2049. !endif
  2050.  
  2051. #
  2052. # Support the idea of a hierarchical 8.3 name, besides that this
  2053. # transform might be applied after the preceding assignment.
  2054. #
  2055. # eg: msft-vcrtl => msft\vcrtl
  2056. #
  2057.  
  2058. # Turn hierarchical names using [-._ ] as the element divider
  2059. # into hierarchical file system names. (Note that _ and . are not
  2060. # currently allowed in assembly names.)
  2061. SXS_SHORT_ASSEMBLY_NAME=$(SXS_SHORT_ASSEMBLY_NAME:-=\)
  2062. SXS_SHORT_ASSEMBLY_NAME=$(SXS_SHORT_ASSEMBLY_NAME:_=\)
  2063. SXS_SHORT_ASSEMBLY_NAME=$(SXS_SHORT_ASSEMBLY_NAME:.=\)
  2064. SXS_SHORT_ASSEMBLY_NAME=$(SXS_SHORT_ASSEMBLY_NAME: =\)
  2065.  
  2066. # Shorten one special name that is likely to appear in long assembly names.
  2067. SXS_SHORT_ASSEMBLY_NAME=$(SXS_SHORT_ASSEMBLY_NAME:Microsoft=Msft)
  2068. SXS_SHORT_ASSEMBLY_NAME=$(SXS_SHORT_ASSEMBLY_NAME:microsoft=msft)
  2069.  
  2070. !if defined(SXS_MANIFEST_IN_RESOURCES) && !defined(SXS_MANIFEST)
  2071. ! error You must specify SXS_MANIFEST if you specify SXS_MANIFEST_IN_RESOURCES.
  2072. !endif
  2073.  
  2074. !if defined(SXS_ASSEMBLY_VERSION) && !defined(SXS_ASSEMBLY_NAME)
  2075. ! error You may not specify SXS_ASSEMBLY_VERSION without SXS_ASSEMBLY_NAME or SXS_SHORT_ASSEMBLY_NAME.
  2076. !endif
  2077.  
  2078. !if (defined(SXS_ASSEMBLY_LANGUAGE) || defined(SXS_ASSEMBLY_LANGUAGE_INDEPENDENT)) && !defined(SXS_ASSEMBLY_NAME)
  2079. ! error You may not specify SXS_ASSEMBLY_LANGUAGE or SXS_ASSEMBLY_LANGUAGE_INDEPENDENT without SXS_ASSEMBLY_NAME or SXS_SHORT_ASSEMBLY_NAME.
  2080. !endif
  2081.  
  2082. !if defined(SXS_BINPLACE_ALSO_ROOT) && !defined(SXS_ASSEMBLY_NAME)
  2083. ! error You may not specify SXS_BINPLACE_ALSO_ROOT without SXS_ASSEMBLY_NAME or SXS_SHORT_ASSEMBLY_NAME.
  2084. !endif
  2085.  
  2086. !if defined(_ASSEMBLY_IDENTITY) && !defined(SXS_NO_BINPLACE) # {
  2087. # nothing
  2088. !elseif defined(SXS_ASSEMBLY_NAME) # } {
  2089. #
  2090. # SXS_ASSEMBLY_VERSION may only contain dots and digits.
  2091. # Removing them should leave nothing.
  2092. #
  2093. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_ASSEMBLY_VERSION)
  2094. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS:.=)
  2095. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS:0=)
  2096. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS:1=)
  2097. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS:2=)
  2098. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS:3=)
  2099. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS:4=)
  2100. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS:5=)
  2101. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS:6=)
  2102. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS:7=)
  2103. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS:8=)
  2104. SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS=$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS:9=)
  2105. !if "$(SXS_CHECK_ASSEMBLY_VERSION_CHARACTERS)" != ""
  2106. ! error SXS_ASSEMBLY_VERSION ($(SXS_ASSEMBLY_VERSION)) may only contain dots and digits.
  2107. !endif
  2108.  
  2109. #
  2110. # ASSERT(SXS_ASSEMBLY_LANGUAGE xor SXS_ASSEMBLY_LANGUAGE_INDEPENDENT)
  2111. #
  2112. !if (!defined(SXS_ASSEMBLY_LANGUAGE) && !defined(SXS_ASSEMBLY_LANGUAGE_INDEPENDENT))
  2113. ! error Must specify SXS_ASSEMBLY_LANGUAGE or SXS_ASSEMBLY_LANGUAGE_INDEPENDENT.
  2114. !endif
  2115.  
  2116. !if ( defined(SXS_ASSEMBLY_LANGUAGE) && defined(SXS_ASSEMBLY_LANGUAGE_INDEPENDENT))
  2117. ! error Must not specify both SXS_ASSEMBLY_LANGUAGE and SXS_ASSEMBLY_LANGUAGE_INDEPENDENT.
  2118. ! error ( SXS_ASSEMBLY_LANGUAGE=$(SXS_ASSEMBLY_LANGUAGE), SXS_ASSEMBLY_LANGUAGE_INDEPENDENT=$(SXS_ASSEMBLY_LANGUAGE_INDEPENDENT) )
  2119. !endif
  2120.  
  2121. #
  2122. # Derive from SXS_ASSEMBLY_LANGUAGE from SXS_ASSEMBLY_LANGUAGE_INDEPENDENT.
  2123. #
  2124. !if defined(SXS_ASSEMBLY_LANGUAGE_INDEPENDENT) && !defined(SXS_ASSEMBLY_LANGUAGE)
  2125. SXS_ASSEMBLY_LANGUAGE=x-ww
  2126. !endif
  2127.  
  2128. #
  2129. # This is for Fusion stuff only. It does not need to match the nt subsystem version.
  2130. #
  2131. !ifndef SXS_ASSEMBLY_VERSION
  2132. SXS_ASSEMBLY_VERSION=5.1
  2133. !endif
  2134.  
  2135. #
  2136. # SxS Versions are Major.Minor.Release.Revision
  2137. #
  2138. !ifdef SXS_ASSEMBLY_VERSION # {
  2139.  
  2140. !ifndef SXS_ASSEMBLY_VERSION_PART_3
  2141. SXS_ASSEMBLY_VERSION_PART_3=0
  2142. !endif
  2143.  
  2144. !ifndef SXS_ASSEMBLY_VERSION_PART_4
  2145. SXS_ASSEMBLY_VERSION_PART_4=0
  2146. !endif
  2147.  
  2148. #
  2149. # If this is more than eight characters or not adequately unique, the user must specify it in their sources file.
  2150. #
  2151. !if "$(SXS_EIGHT_CHARACTER_VERSION_DIRECTORY_NAME_UNIQUIFIER)" == ""
  2152. !ifndef SXS_AUTO_VERSION
  2153. !if "$(SXS_ASSEMBLY_VERSION_PART_4)" != "0"
  2154. SXS_EIGHT_CHARACTER_VERSION_DIRECTORY_NAME_UNIQUIFIER=$(SXS_ASSEMBLY_VERSION:.=)$(SXS_ASSEMBLY_VERSION_PART_3)
  2155. !else
  2156. SXS_EIGHT_CHARACTER_VERSION_DIRECTORY_NAME_UNIQUIFIER=$(SXS_ASSEMBLY_VERSION:.=)$(SXS_ASSEMBLY_VERSION_PART_3)$(SXS_ASSEMBLY_VERSION_PART_4)
  2157. !endif
  2158. !else
  2159. SXS_EIGHT_CHARACTER_VERSION_DIRECTORY_NAME_UNIQUIFIER=$(SXS_ASSEMBLY_VERSION:.=)
  2160. !endif
  2161. !endif
  2162.  
  2163. SXS_ASSEMBLY_FULL_VERSION=$(SXS_ASSEMBLY_VERSION).$(SXS_ASSEMBLY_VERSION_PART_3).$(SXS_ASSEMBLY_VERSION_PART_4)
  2164.  
  2165. !endif # }
  2166.  
  2167. !ifndef SXS_NO_BINPLACE # {
  2168. #
  2169. # We might need SXS_ASSEMBLY_LANGUAGE and even SXS_ASSEMBLY_PROCESSOR_ARCHITECTURE
  2170. # in SXS_BINPLACE_DIR, esp. for example if we have any data only assemblies with
  2171. # the same name/version as code containing assemblies.
  2172. #
  2173. # Eventually the mapping from assembly metadata to run-time paths and
  2174. # build-time paths will be exposed by sxs.dll/sxs.lib consumed
  2175. # by build tools written in C/C++ (possibly just binplace).
  2176. # Build/Make are too constraining for our needs.
  2177. # For now we get by.
  2178. #
  2179. # "asms" is very special, it is the root of where assemblies are binplaced
  2180. # and it is the root of where they appear on the XP CD, in XP service packs,
  2181. # and QFEs. "asms" was replaced by asms01.cab in Server 2003.
  2182. # This string appears in a number of places:
  2183. # \nt\tools\PostBuildScripts
  2184. # \nt\admin\ntsetup\inf\win4\inf\dosnet.inx
  2185. # \nt\admin\ntsetup\inf\win4\inf\syssetup.inx
  2186. #
  2187. # We place version in front of name due to restrictions on how the manifest
  2188. # file name related to the name of leaf directory it is in.
  2189. SXS_BINPLACE_DIR2=$(SXS_EIGHT_CHARACTER_VERSION_DIRECTORY_NAME_UNIQUIFIER)\$(SXS_SHORT_ASSEMBLY_NAME)
  2190. SXS_BINPLACE_DIR3=asms\$(SXS_BINPLACE_DIR2)
  2191. SXS_BINPLACE_RESOURCES_DIR=$(SXS_BINPLACE_DIR3).Resources
  2192.  
  2193. #
  2194. # create msms destination directory
  2195. #
  2196. !ifdef SXS_GENERATE_MERGE_MODULE # {
  2197.  
  2198. #
  2199. # if the generate mode is not defined, set it default : 0
  2200. #
  2201. !ifndef SXS_MERGE_MODULE_FOR_ASSEMBLY_GROUP
  2202. SXS_MERGE_MODULE_FOR_ASSEMBLY_GROUP=0
  2203. !else
  2204. SXS_MERGE_MODULE_FOR_ASSEMBLY_GROUP=1
  2205. !endif
  2206.  
  2207. !if "$(SXS_MERGE_MODULE_GUID)" == "" || "$(SXS_MERGE_MODULE_COMPONENT_GUID)" == "" # {
  2208. !error MergeModule GUID and MergeModule Component must be specified
  2209. !endif # }
  2210.  
  2211. !ifndef SXS_MERGE_MODULE # { use the manifest basename as the msm basename
  2212. SXS_MERGE_MODULE=$(SXS_MANIFEST_BASENAME).msm
  2213. !endif #}
  2214.  
  2215. !ifndef SXS_MERGE_MODULE_LOCATION
  2216. SXS_MERGE_MODULE_DESTINATION=asm_msm\$(SXS_BINPLACE_DIR2)
  2217. !else
  2218. #
  2219. #parse this string to generate the real path
  2220. #
  2221. SXS_MERGE_MODULE_LOCATION=$(SXS_ASSEMBLY_FULL_VERSION:.=)\$(SXS_MERGE_MODULE_LOCATION)
  2222. SXS_MERGE_MODULE_LOCATION=$(SXS_MERGE_MODULE_LOCATION:-=\)
  2223. SXS_MERGE_MODULE_LOCATION=$(SXS_MERGE_MODULE_LOCATION:_=\)
  2224. SXS_MERGE_MODULE_LOCATION=$(SXS_MERGE_MODULE_LOCATION:.=\)
  2225. SXS_MERGE_MODULE_LOCATION=$(SXS_MERGE_MODULE_LOCATION: =\)
  2226. SXS_MERGE_MODULE_LOCATION=asm_msm\$(SXS_MERGE_MODULE_LOCATION)
  2227. !endif
  2228. !endif # }
  2229.  
  2230. BINPLACE_GENERATE_PLACEFILE=1
  2231. !if "$(BINPLACE_DESTINATIONS)" == ""
  2232. BINPLACE_DESTINATIONS=$(SXS_BINPLACE_DIR3)
  2233. !else
  2234. BINPLACE_DESTINATIONS=$(BINPLACE_DESTINATIONS):$(SXS_BINPLACE_DIR3)
  2235. !endif
  2236. BINPLACE_DESTINATIONS_NORETAIL=$(BINPLACE_DESTINATIONS)
  2237. !ifdef SXS_BINPLACE_ALSO_ROOT
  2238. BINPLACE_DESTINATIONS=$(BINPLACE_DESTINATIONS):retail
  2239. !endif
  2240.  
  2241. !endif # !SXS_NO_BINPLACE }
  2242.  
  2243. #
  2244. # Optionally uniquize the .pdb names, so they can go in a flat directory (%_nttree%\symbols.pri\retail\dll)
  2245. #
  2246. !ifndef SXS_LONG_PDB_NAME
  2247. SXS_LONG_PDB_NAME=$(SXS_PDB_WOW6432_W_PREFIX)$(SXS_ASSEMBLY_NAME:.=)-$(SXS_ASSEMBLY_FULL_VERSION:.=)-$(TARGETNAME:.=)
  2248. !endif
  2249. !ifndef SXS_NO_BINPLACE #{
  2250. !if !defined(TARGETPDB) && "$(SXS_USE_LONG_PDB_NAME)" == "1" && !defined(SXS_AUTO_VERSION)
  2251. LINKER_FLAGS=$(LINKER_FLAGS) /pdb:$(TARGETPATH)\$(TARGET_DIRECTORY)\$(SXS_LONG_PDB_NAME).pdb
  2252. !endif
  2253. SXS_BINPLACE_FLAGS=/ChangeAsmsToRetailForSymbols
  2254. !endif #}
  2255.  
  2256. !endif # !SXS_ASSEMBLY_NAME }
  2257.  
  2258. !if defined(BINPLACE_LOG) && !defined(NO_SXS_LOG)
  2259. !if !defined(NO_BINPLACE) && ("$(TARGETTYPE)" == "NOTARGET" || "$(MAKEDLL)" != "" || "$(BUILD_PASS)" == "PASS2")
  2260. SXS_LOG_PASS=1
  2261. SXS_LOG_CMD= ( echo. )
  2262. !endif
  2263. !endif
  2264.  
  2265. !if defined(SXS_LOG_PASS) && !defined(APPEND_TOOL)
  2266. APPEND_TOOL=appendtool
  2267. !endif
  2268.  
  2269. !ifdef SXS_MANIFEST # {
  2270.  
  2271. #
  2272. # If removing .manifest or .Manifest from SXS_MANIFEST leaves it unchanged,
  2273. # it doesn't contain either one and is invalid.
  2274. #
  2275. !if "$(SXS_MANIFEST:.Manifest=)" == "$(SXS_MANIFEST)" \
  2276. && "$(SXS_MANIFEST:.manifest=)" == "$(SXS_MANIFEST)"
  2277. ! error SXS_MANIFEST ($(SXS_MANIFEST)) must contain ".Manifest", it must end in ".Manifest"
  2278. !endif
  2279.  
  2280. SXS_MANIFEST_SOURCE_FILENAME=$(SXS_MANIFEST:..\=)
  2281.  
  2282. SXS_MANIFEST_BASENAME=$(SXS_MANIFEST_SOURCE_FILENAME)
  2283. SXS_MANIFEST_BASENAME=$(SXS_MANIFEST_BASENAME:.manifest=)
  2284. SXS_MANIFEST_BASENAME=$(SXS_MANIFEST_BASENAME:.Manifest=)
  2285. SXS_MANIFEST_BASENAME=$(SXS_MANIFEST_BASENAME:.man=)
  2286. SXS_MANIFEST_BASENAME=$(SXS_MANIFEST_BASENAME:.Man=)
  2287.  
  2288. #
  2289. # Always make .man file in the obj directory.
  2290. #
  2291. SXS_MANIFEST_OBJ1=$(OBJ_PATH)\$O\$(SXS_MANIFEST_BASENAME).o_manifest
  2292.  
  2293. #
  2294. # If TARGETPDB is defined, we'll use the linker's default PDB name.
  2295. # if SXS_AUTO_VERSION is on, derive the PDB name from ntverp.h & sxsmanifest.h
  2296. # by preprocessing a .lnk file to provide the right /pdb flag to LINKER
  2297. #
  2298. !if defined(SXS_AUTO_VERSION) && !defined(TARGETPDB) && "$(SXS_USE_LONG_PDB_NAME)" == "1" && !defined(RESOURCE_ONLY_DLL)
  2299. SXS_PDB_NAMER=$(OBJ_PATH)\$O\$(SXS_MANIFEST_BASENAME)_pdb.lnk
  2300. !endif
  2301.  
  2302. !ifndef SXS_MANIFEST_IN_RESOURCES # {
  2303.  
  2304. #
  2305. # OBJ is files in obj\i386.
  2306. # BIN is binplaced files, possibly also in obj\i386.
  2307. #
  2308. # The binplaced file must be 8.3 in XP.
  2309. # The obj\i386 file
  2310. # - should allow .exes to be run from obj\i386 that don't have manifest-in-resources
  2311. # - not override manifest-in-resources
  2312. #
  2313. SXS_MANIFEST_BIN_FILENAME=$(SXS_MANIFEST_BASENAME).man
  2314.  
  2315. !if !defined(NO_BINPLACE) && !defined(SXS_NO_BINPLACE) && ("$(BUILD_PASS)" == "PASS1" || "$(BUILD_PASS)" == "PASSALL")
  2316. SXS_MISCFILES=$(SXS_MISCFILES) $(OBJ_PATH)\$O\$(SXS_MANIFEST_BASENAME).man
  2317. !endif
  2318.  
  2319. # Make a .manifest file identical to the .man file (we just copy it).
  2320. !if "$(TARGETTYPE)" != "NOTARGET" && ("$(MAKEDLL)" != "" || "$(BUILD_PASS)" == "PASS2")
  2321.  
  2322. SXS_MANIFEST_OBJ2=$(OBJ_PATH)\$O\$(TARGETNAME).$(TARGETEXT).manifest
  2323.  
  2324. !endif
  2325.  
  2326. !else # } SXS_MANIFEST_IN_RESOURCES { #
  2327.  
  2328. SXS_MANIFEST_BIN_FILENAME=$(TARGETNAME).$(TARGETEXT)
  2329.  
  2330. !ifndef SXS_MANIFEST_RESOURCE_ID # {
  2331. !if defined(ISOLATION_AWARE_ENABLED) || "$(TARGETTYPE)" == "DYNLINK"
  2332. SXS_MANIFEST_RESOURCE_ID=ISOLATIONAWARE_MANIFEST_RESOURCE_ID
  2333. !elseif "$(TARGETTYPE)" == "PROGRAM" || "$(TARGETTYPE)" == "PROGLIB" || "$(TARGETTYPE)" == "UMAPPL_NOLIB"
  2334. SXS_MANIFEST_RESOURCE_ID=CREATEPROCESS_MANIFEST_RESOURCE_ID
  2335. !endif
  2336. !endif # }
  2337.  
  2338. # Enforce icon sizes and bit depths by turning on "audit" mode
  2339. # Only x86 for now because icocomp, which fixes audit violations, is only checked in for x86
  2340. !ifndef NO_RC_AUDIT
  2341. !if $(386)
  2342. RCOPTIONS=/a $(RCOPTIONS)
  2343. !endif
  2344. !endif
  2345.  
  2346. #
  2347. # Putting manifests in resources requires no editing of the .rc file.
  2348. # We can do this via forceinclude-file or forceinclude-string.
  2349. # I thought rc.exe had a forceinclude-file feature like the C++ compiler.
  2350. # By the time I realized that it doesn't, it seemed better to press ahead
  2351. # with simulating it than not depend on it. There is unlikely any other way
  2352. # to support SXS_MANIFEST_IN_RESOURCES without requiring "nonlocal" .rc file
  2353. # edits (ie: without further fanning out how many files need to touched in how
  2354. # many places by clients who want to build sxs assemblies).
  2355. #
  2356. RCOPTIONS=-DSXS_MANIFEST_OBJ1="\"$(SXS_MANIFEST_OBJ1:\=/)\"" $(RCOPTIONS)
  2357. INCPATHRC=$(INCPATHRC)
  2358. RC_FORCE_INCLUDE_STRING=$(RC_FORCE_INCLUDE_STRING)^
  2359. ^#include "windows.h"^
  2360. ^/* RT_MANIFEST is in winuser.h and winuser.rh */^
  2361. $(SXS_MANIFEST_RESOURCE_ID) RT_MANIFEST SXS_MANIFEST_OBJ1
  2362. #RC_FORCE_INCLUDE_FILES=$(RC_FORCE_INCLUDE_FILES);$(BASE_INC_PATH)\SxsManifestInResource.rc2
  2363. #RC_FORCE_INCLUDE_STRING=
  2364.  
  2365. !endif # } SXS_MANIFEST_IN_RESOURCES
  2366.  
  2367. !ifdef SXS_LOG_PASS # {
  2368. #
  2369. # data for PostBuild/ManifestMangler
  2370. #
  2371.  
  2372. SXS_BINPLACE_LOG=$(BINPLACE_LOG)-sxs
  2373.  
  2374. !ifndef APPEND_CMD
  2375. APPEND_CMD=$(APPEND_TOOL) -file $(SXS_BINPLACE_LOG) -
  2376. !endif
  2377. _RUN_SXS_LOG_CMD=1
  2378. SXS_LOG_CMD= ( $(SXS_LOG_CMD) ) & \
  2379. ( echo \
  2380. SXS_ASSEMBLY_NAME="$(SXS_ASSEMBLY_NAME)" \
  2381. SXS_ASSEMBLY_VERSION="$(SXS_ASSEMBLY_FULL_VERSION)" \
  2382. SXS_ASSEMBLY_LANGUAGE="$(SXS_ASSEMBLY_LANGUAGE)" \
  2383. SXS_MANIFEST="$(SXS_LOG_BINPLACE_WOW6432_PREFIX)$(SXS_BINPLACE_DIR3)\$(SXS_MANIFEST_BIN_FILENAME)" \
  2384. !ifdef SXS_LOCALIZE_ASSEMBLY_MUI
  2385. SXS_LOCALIZE_ASSEMBLY_MUI=$(SXS_LOCALIZE_ASSEMBLY_MUI) \
  2386. !endif
  2387. !ifdef SXS_LOCALIZE_ASSEMBLY_SATELLITE_WITH_EXPLICIT_DEPENDENCY
  2388. SXS_LOCALIZE_ASSEMBLY_SATELLITE_WITH_EXPLICIT_DEPENDENCY=$(SXS_LOCALIZE_ASSEMBLY_SATELLITE_WITH_EXPLICIT_DEPENDENCY) \
  2389. !endif
  2390. | $(APPEND_TOOL) -file $(BUILD_LOGS)\sidebyside\binplace_$(COMPUTERNAME).log-sxs - )
  2391.  
  2392.  
  2393. #
  2394. # Produce manifest-related, including
  2395. # Required: catalog,
  2396. # Optional: merge module
  2397. #
  2398. !ifndef SXS_NO_BINPLACE # {
  2399.  
  2400. !ifdef SXS_GENERATE_MERGE_MODULE # { begin create log-file-entry for Assembly MergeModule
  2401.  
  2402. #
  2403. # the msm-log lsitfile is in the format of
  2404. # SourceFileDirectory | Destination-MSM-Filename | MergeModuleID | MergeModuleComponent ID
  2405. #
  2406. !ifndef SXS_MERGE_MODULE_TXT_DATA #{
  2407. SXS_MERGE_MODULE_TXT_DATA=\
  2408. $(SXS_MERGE_MODULE_FOR_ASSEMBLY_GROUP),\
  2409. $(SXS_MERGE_MODULE_GUID),\
  2410. ..\$(SXS_MERGE_MODULE_LOCATION)\$(SXS_MERGE_MODULE),\
  2411. ..\$(SXS_BINPLACE_DIR3)\$(SXS_MANIFEST_BASENAME).man,\
  2412. $(SXS_MERGE_MODULE_COMPONENT_GUID)
  2413.  
  2414. !endif # }
  2415.  
  2416. !endif # } end create log-file-entry for Assembly MergeModule
  2417.  
  2418. !endif # SXS_NO_BINPLACE }
  2419.  
  2420. !endif # SXS_LOG_PASS }
  2421.  
  2422. !endif # SXS_MANIFEST }
  2423.  
  2424. !if defined(SXS_LOG_PASS) && defined(SXS_MERGE_MODULE_TXT_DATA) # {
  2425. SXS_MERGEMODULE_LIST_TXT=$(BUILD_LOGS)\sxsMsmList_$(COMPUTERNAME).txt
  2426. !if defined(SXS_MERGE_MODULE_TXT_DATA)
  2427. _RUN_SXS_LOG_CMD=1
  2428. SXS_LOG_CMD=( $(SXS_LOG_CMD) ) & ( echo $(SXS_MERGE_MODULE_TXT_DATA) | $(APPEND_TOOL) -file $(SXS_MERGEMODULE_LIST_TXT) - )
  2429. !endif
  2430.  
  2431. !endif # }
  2432.  
  2433. !endif # PASS_INDEPENDENT_TARGETS
  2434.  
  2435. #
  2436. # Do this independently of the presence of any other SXS options
  2437. # to aid .manifest preprocessing in the absense of any other sxs build support,
  2438. # like for users of CreateActCtx. The MultiRes test case uses this.
  2439. #
  2440. !ifndef SXS_PROCESSOR_ARCHITECTURE
  2441. !ifdef SXS_WOW6432
  2442. SXS_PROCESSOR_ARCHITECTURE=wow64
  2443. !elseif defined(_BUILDARCH)
  2444. SXS_PROCESSOR_ARCHITECTURE=$(_BUILDARCH)
  2445. !elseif $(386)
  2446. SXS_PROCESSOR_ARCHITECTURE=x86
  2447. !elseif $(IA64)
  2448. SXS_PROCESSOR_ARCHITECTURE=ia64
  2449. !else
  2450. ! error Cannot determine processorArchitecture.
  2451. !endif
  2452. !endif
  2453.  
  2454. !ifndef PASS_INDEPENDENT_TARGETS
  2455.  
  2456. !if defined(LOCALIZED_RESOURCES) && !defined(RCCODEPAGE)
  2457. ! if "$(LANGUAGE)" == "JPN" || "$(LANGUAGE)" == "jpn"
  2458. RCCODEPAGE=932
  2459. ! elseif "$(LANGUAGE)" == "KOR" || "$(LANGUAGE)" == "kor"
  2460. RCCODEPAGE=949
  2461. ! elseif "$(LANGUAGE)" == "CHS" || "$(LANGUAGE)" == "chs"
  2462. RCCODEPAGE=936
  2463. ! elseif "$(LANGUAGE)" == "CHP" || "$(LANGUAGE)" == "chp"
  2464. RCCODEPAGE=936
  2465. ! elseif "$(LANGUAGE)" == "CHT" || "$(LANGUAGE)" == "cht"
  2466. RCCODEPAGE=950
  2467. ! endif
  2468. !endif
  2469.  
  2470. #
  2471. # Set far east specific defines based on the project
  2472. #
  2473. DO_FE_SB=0
  2474.  
  2475. !endif # PASS_INDEPENDENT_TARGETS
  2476.  
  2477. !if "$(ALT_PROJECT_TARGET)" == ""
  2478. ALT_PROJECT_TARGET=.
  2479. !endif
  2480.  
  2481. !if 1 # PASS_INDEPENDENT_TARGETS
  2482.  
  2483. !if "$(ALT_PROJECT)" == "FE" || \
  2484. "$(ALT_PROJECT)" == "CHT" || \
  2485. "$(ALT_PROJECT)" == "CHS" || \
  2486. "$(ALT_PROJECT)" == "CHP" || \
  2487. "$(ALT_PROJECT)" == "JPN" || \
  2488. "$(ALT_PROJECT)" == "KOR" || \
  2489. "$(ALT_PROJECT)" == "NEC_98"
  2490. C_DEFINES=$(C_DEFINES) /DDBCS /DKKBUGFIX
  2491. ASM_DEFINES=$(ASM_DEFINES) /DDBCS /DKKBUGFIX
  2492. DO_FE_SB=1
  2493. !endif
  2494.  
  2495. !if "$(ALT_PROJECT)" == "CHT"
  2496. C_DEFINES=$(C_DEFINES) /DTAIWAN
  2497. ASM_DEFINES=$(ASM_DEFINES) /DTAIWAN
  2498. !elseif "$(ALT_PROJECT)" == "CHS" || "$(ALT_PROJECT)" == "CHP"
  2499. C_DEFINES=$(C_DEFINES) /DPRC
  2500. ASM_DEFINES=$(ASM_DEFINES) /DPRC
  2501. !elseif "$(ALT_PROJECT)" == "JPN"
  2502. C_DEFINES=$(C_DEFINES) /DJAPAN
  2503. ASM_DEFINES=$(ASM_DEFINES) /DJAPAN
  2504. !elseif "$(ALT_PROJECT)" == "KOR"
  2505. C_DEFINES=$(C_DEFINES) /DKOREA
  2506. ASM_DEFINES=$(ASM_DEFINES) /DKOREA
  2507. !elseif "$(ALT_PROJECT)" == "NEC_98"
  2508. C_DEFINES=$(C_DEFINES) /DJAPAN /DNEC_98
  2509. ASM_DEFINES=$(ASM_DEFINES) /DJAPAN /DNEC_98
  2510. !elseif "$(ALT_PROJECT)" != ""
  2511. C_DEFINES=$(C_DEFINES) /D_$(ALT_PROJECT)_
  2512. !endif
  2513.  
  2514. !IF "$(ALT_PROJECT)" == "HYDRA"
  2515. ASM_DEFINES=$(ASM_DEFINES) /D_HYDRA_
  2516. HYDRA=1
  2517. !ENDIF
  2518.  
  2519. !IF "$(ALT_PROJECT)" == "JANUS"
  2520. ASM_DEFINES=$(ASM_DEFINES) /D_JANUS_
  2521. C_DEFINES=$(C_DEFINES) /D_JANUS_
  2522. JANUS=1
  2523. !ENDIF
  2524.  
  2525. !IF ("$(NO_W32_SB)" == "" && "$(W32_SB)" == "1")
  2526. DO_FE_SB=1
  2527. ! ENDIF
  2528.  
  2529. !IF "$(DO_FE_SB)" == "1"
  2530. C_DEFINES=$(C_DEFINES) /DFE_SB /DFE_IME
  2531. ASM_DEFINES=$(ASM_DEFINES) /DFE_SB
  2532. !ENDIF
  2533.  
  2534. !IF "$(ALT_PROJECT)" == "DS"
  2535. # Nothing, just /D_DS_ from above
  2536. !ENDIF
  2537.  
  2538. !ifdef RESOURCE_ONLY_DLL
  2539. # Resource only DLL's have no exports, no entrypoint, no code, no data, no debug symbolic.
  2540. LINKER_FORCE_NO_DBG_SECTION=1
  2541. NO_DLL_EXPORTS=1
  2542. !undef DLLENTRY
  2543. !undef NOLINK
  2544. !undef USE_MSVCRT
  2545. !undef USE_LIBCMT
  2546. !undef USE_LIBCNTPR
  2547. NO_BROWSER_FILE=1
  2548. LINK_NO_RELEASE=1
  2549. MAKEDLL=1
  2550. TARGETLIBS=
  2551. LINKLIBS=
  2552. DLLDEF_OBJECTS=
  2553. USE_NOLIBS=1
  2554. NO_NTDLL=1
  2555. AFX_FORCE_STDAFX=
  2556. AFX_FORCE_USRDLL=
  2557. MFC_LIBS=
  2558. ! ifndef SUBSYSTEM_VERSION
  2559. SUBSYSTEM_VERSION=$(SUBSYSTEM_VERSION_LATEST)
  2560. ! endif
  2561. !else
  2562. ! ifdef USE_INCREMENTAL_LINKING
  2563. LINKER_DBG_SECTION=/debug /debugtype:cv,pdata
  2564. ! else
  2565. LINKER_DBG_SECTION=/debug /debugtype:cv,fixup,pdata
  2566. ! endif
  2567. AFX_FORCE_STDAFX=/include:__afxForceSTDAFX
  2568. AFX_FORCE_USRDLL=/include:__afxForceUSRDLL
  2569. !endif
  2570.  
  2571. !ifdef LINKER_FORCE_NO_DBG_SECTION
  2572. LINKER_DBG_SECTION=/debug:NONE
  2573. !endif
  2574.  
  2575. !ifdef PURE_FORWARDER_DLL
  2576. BUFFER_OVERFLOW_CHECKS=0
  2577. USE_NOLIBS=1
  2578. NO_NTDLL=1
  2579. TARGETLIBS=
  2580. ! ifndef SUBSYSTEM_VERSION
  2581. SUBSYSTEM_VERSION=$(SUBSYSTEM_VERSION_LATEST)
  2582. ! endif
  2583. !endif
  2584.  
  2585. # File System drivers have different deprecation rules from regular drivers
  2586. !if defined(DEPRECATE_DDK_FUNCTIONS) && ("$(DRIVERTYPE)" != "FS") && ("$(DRIVERTYPE)" != "fs")
  2587. C_DEFINES=$(C_DEFINES) /DDEPRECATE_DDK_FUNCTIONS=1
  2588. !endif
  2589.  
  2590. !if defined(TARGETPATHLIB)
  2591. ! if ("$(TARGETTYPE)" == "DYNLINK") || ("$(TARGETTYPE)" == "EXPORT_DRIVER")
  2592. ! if "$(MAKEDLL)" == ""
  2593. # Pass 1 of a two pass build. Make sure TargetPath is the same as targetpathlib.
  2594. NO_BROWSER_FILE=1
  2595. TARGETPATH=$(TARGETPATHLIB)
  2596. ! endif
  2597. ! endif
  2598. !else
  2599. TARGETPATHLIB=$(TARGETPATH)
  2600. !endif
  2601.  
  2602. !if ("$(TARGETPATH)" == "$(BASEDIR)\lib") || ("$(TARGETPATH)" == "$(BASEDIR)\LIB")
  2603. ! error Setting TARGETPATH=$(BASEDIR)\lib in sources is not valid -- please remove TARGETPATH.
  2604. !endif
  2605.  
  2606. !if !defined(TARGETTYPE)
  2607. ! error Your .\sources file must define the TARGETTYPE macro.
  2608. !endif
  2609.  
  2610. !if "$(TARGETTYPE)" != "NOTARGET" # { {
  2611.  
  2612. ! if !defined(TARGETNAME) # { {
  2613. ! error Your sources. file must define the TARGETNAME macro.
  2614. ! endif # } }
  2615.  
  2616. ! if !defined(SOURCES) && !defined(PASS_INDEPENDENT_TARGETS) # { {
  2617. ! error Your sources. file must define the SOURCES macro.
  2618. ! endif # } }
  2619.  
  2620. !else # } { TARGETTYPE == NOTARGET
  2621.  
  2622. ! if defined(SOURCES) && "$(SOURCES: =)" == "" # { {
  2623. #! error $(MAKEDIR) Remove empty SOURCES macro.
  2624. ! endif # } }
  2625.  
  2626. ! if defined(TARGETNAME) && "$(TARGETNAME: =)" == "" # { {
  2627. #! error $(MAKEDIR) Remove empty TARGETNAME macro.
  2628. ! endif # } }
  2629.  
  2630. ! if !defined(TARGETNAME) # { {
  2631. TARGETNAME=
  2632. ! endif # } }
  2633.  
  2634. !endif # } } TARGETTYPE == NOTARGET
  2635.  
  2636. #!if defined(SOURCES) && "$(SOURCES: =)" == "" && "$(TARGETTYPE)" == "NOTARGET"
  2637. #! error $(MAKEDIR) Remove empty SOURCES macro.
  2638. #!endif
  2639.  
  2640. !if defined(MC_FLAGS)
  2641. ! if "$(MC_FLAGS:-z=)" != "$(MC_FLAGS)" \
  2642. || "$(MC_FLAGS:/z=)" != "$(MC_FLAGS)" \
  2643. || "$(MC_FLAGS:/Z=)" != "$(MC_FLAGS)" \
  2644. || "$(MC_FLAGS:-Z=)" != "$(MC_FLAGS)"
  2645. ! error MC_FLAGS must not contain /z.
  2646. ! endif
  2647. !endif
  2648.  
  2649. !if defined(FORCENATIVEOBJECT)
  2650. ! if "$(FORCENATIVEOBJECT)" != "1"
  2651. ! error FORCENATIVEOBJECT must be 1 or not defined.
  2652. ! endif
  2653. !endif
  2654.  
  2655. !if defined(TEST_CODE)
  2656. ! if "$(TEST_CODE)" != "1"
  2657. ! error TEST_CODE must be 1 or not defined.
  2658. ! endif
  2659. !endif
  2660.  
  2661. !if "$(MSC_OPTIMIZATION)" != "$(MSC_OPTIMIZATION:Od=)"
  2662. # FORCENATIVEOBJECT=1
  2663. # Define MSC_NOOPT if optimizations are disabled.
  2664. C_DEFINES=$(C_DEFINES) /DMSC_NOOPT
  2665. !endif
  2666.  
  2667. !ifndef COFFBASE_TXT_FILE
  2668. COFFBASE_TXT_FILE = $(NTMAKEENV)\coffbase.txt
  2669. !endif
  2670.  
  2671. !IFNDEF UMBASE
  2672. ! IFDEF COFFBASE
  2673. UMBASE=@$(COFFBASE_TXT_FILE),$(COFFBASE)
  2674. ! ELSE
  2675. ! if $(WIN64)
  2676. ! if $(AMD64)
  2677. UMBASE=@$(COFFBASE_TXT_FILE),usermode64
  2678. ! else
  2679. # Enable this for IA64 too
  2680. UMBASE=@$(COFFBASE_TXT_FILE),usermode
  2681. ! endif
  2682. ! else
  2683. UMBASE=@$(COFFBASE_TXT_FILE),usermode
  2684. ! endif
  2685. ! ENDIF
  2686. !ENDIF
  2687.  
  2688. LINKLIBS=$(LINKLIBS) $(PERFLIBS)
  2689.  
  2690. !if !defined(ATL_VER)
  2691. ATL_VER=71
  2692. !endif
  2693.  
  2694. !if ("$(ATL_VER)" == "70" || "$(ATL_VER)" == "71" || "$(ATL_VER)" == "80") && \
  2695. (defined(USE_ATL) || defined(USE_STATIC_ATL))
  2696.  
  2697. ATL_INCLUDES=$(ATL_INC_ROOT)\atl71
  2698.  
  2699. ATL_DEFINES=/D_ATL_STATIC_REGISTRY
  2700. ! ifdef DEBUG_CRTS
  2701. ATL_STATIC_LIBS=$(ATL_LIB_PATH)\atlsd.lib
  2702. ATL_LIBS=
  2703. ! else
  2704. ATL_STATIC_LIBS=$(ATL_LIB_PATH)\atls.lib
  2705. ATL_LIBS=
  2706. ! endif
  2707. ATL_LIBS=$(ATL_LIBS) $(ADDITIONAL_ATL_LIBS)
  2708. ! if !defined(BUFFER_OVERFLOW_CHECKS)
  2709. BUFFER_OVERFLOW_CHECKS=1
  2710. ! endif
  2711. !else
  2712. ! ifdef USE_ATL
  2713. ATL_INCLUDES=$(ATL_INC_ROOT)\atl$(ATL_VER)
  2714. ATL_DEFINES=/D_ATL_DLL
  2715. ATL_LIBS=$(ATL_LIB_PATH)\atl.lib $(ADDITIONAL_ATL_LIBS)
  2716. ! elseif defined(USE_STATIC_ATL)
  2717. ATL_INCLUDES=$(ATL_INC_ROOT)\atl$(ATL_VER)
  2718. ATL_LIBS=$(ADDITIONAL_ATL_LIBS)
  2719. ATL_DEFINES=/D_ATL_STATIC_REGISTRY
  2720. ! endif
  2721. !endif
  2722.  
  2723. !ifdef USE_WTL
  2724. !ifdef WTL_INC_PATH
  2725. WTL_INCLUDES=$(WTL_INC_PATH)\wtl
  2726. !else
  2727. WTL_INCLUDES=$(SDK_INC_PATH)\wtl
  2728. !endif
  2729. !endif
  2730.  
  2731. !ifdef USE_TEST_LOGGING
  2732. INCLUDES=$(INCLUDES);$(SDKTOOLS_INC_PATH)
  2733. TARGETLIBS=$(SDKTOOLS_LIB_PATH)\wttlog.lib $(TARGETLIBS)
  2734. !endif
  2735.  
  2736. !if defined(USE_MSVCRT20)
  2737. ! error $(MAKEDIR): USE_MSVCRT20 does nothing. Remove it or change to USE_MSVCRT=1
  2738. !endif
  2739.  
  2740. !if defined(USE_MSVCRT40)
  2741. ! error $(MAKEDIR): USE_MSVCRT40 does nothing. Remove it or change to USE_MSVCRT=1
  2742. !endif
  2743.  
  2744. !if defined(USE_CRTDLL)
  2745. ! error $(MAKEDIR): USE_CRTDLL does nothing. Remove it or change to USE_MSVCRT=1
  2746. !endif
  2747.  
  2748. !if defined(CRTDLL)
  2749. ! error $(MAKEDIR): CRTDLL does nothing. Remove it or change to USE_MSVCRT=1
  2750. !endif
  2751.  
  2752. !if defined(USE_IERT)
  2753. ! error USE_IERT is not supported.
  2754. !endif
  2755.  
  2756. !IF DEFINED(USE_MFC) || DEFINED(USE_MFCUNICODE)
  2757.  
  2758. !if "$(PLATFORM_MFC_VER)" != "0x0600"
  2759. # MFC versions before 6.0 need NT4/Win95 values. Override at your own risk.
  2760. !ifndef WIN32_WINNT_VERSION
  2761. WIN32_WINNT_VERSION=0x0400
  2762. !endif
  2763. !ifndef WIN32_IE_VERSION
  2764. WIN32_IE_VERSION=0x0300
  2765. !endif
  2766. !else # MFC post 6x defaults to the current version of IE/Win2k.
  2767. !ifndef WIN32_WINNT_VERSION
  2768. WIN32_WINNT_VERSION=$(CURRENT_WIN32_WINNT_VERSION)
  2769. !endif
  2770. !ifndef WIN32_IE_VERSION
  2771. WIN32_IE_VERSION=$(CURRENT_WIN32_IE_VERSION)
  2772. !endif
  2773. !endif
  2774.  
  2775. !ifndef WIN32_WIN95_VERSION
  2776. WIN32_WIN95_VERSION=$(LATEST_WIN32_WIN95_VERSION)
  2777. !endif
  2778.  
  2779. !ifndef WIN32_WCE_VERSION
  2780. WIN32_WCE_VERSION=$(LATEST_WIN32_WCE_VERSION)
  2781. !endif
  2782.  
  2783. #---------------------------------------------------------#
  2784. # this set of defines establishes the "correct" build #
  2785. # environment for an app that needs to use MFC. the #
  2786. # app's sources file only needs to specify USE_MFC=1 #
  2787. # and this makefile will set the enviroment up correctly. #
  2788. #---------------------------------------------------------#
  2789.  
  2790. ! ifndef UMENTRY
  2791. ! ifdef USE_MFCUNICODE
  2792. UMENTRY=wwinmain
  2793. ! else
  2794. UMENTRY=winmain
  2795. ! endif
  2796. ! endif
  2797.  
  2798. ! if "$(TARGETTYPE)" == "DYNLINK" && !defined(RESOURCE_ONLY_DLL)
  2799. ! ifndef DLLENTRY
  2800. DLLENTRY=_DllMainCRTStartup
  2801. ! endif
  2802. ! endif
  2803.  
  2804. ! ifndef UMTYPE
  2805. UMTYPE=windows
  2806. ! endif
  2807.  
  2808. UMENTRYABS=
  2809.  
  2810. # Allow other MFC's.
  2811. # To do so, you need to:
  2812. # 1. Define MFC_INCLUDES to point to your MFC headers.
  2813. # 2. Define MFC_LIBS to point to your MFC libraries (specifically, the dll
  2814. # library)
  2815. # 3. Define USE_MSVCRT=1 if you don't want to link with the NT CRT DLL.
  2816. #
  2817. # Note:
  2818. # There is only one type of build (_AFXDLL or MFC in a DLL linking to the
  2819. # CRT in a dll).
  2820. # You should disable the alternate MFC's if compiling for RISC platforms.
  2821. # You need to handle specifying the correct libs for Check/Free and
  2822. # Ansi/Unicode.
  2823.  
  2824. ! if !defined(USE_MSVCRT) && !defined(USE_NOLIBS)
  2825. ! ifdef USE_STATIC_MFC
  2826. USE_LIBCMT=1
  2827. ! else
  2828. USE_MSVCRT=1
  2829. ! endif
  2830. ! endif
  2831.  
  2832. # Add MFC_FLAGS in just in case there's old sources files that use it.
  2833.  
  2834. MFC_DEFINES=$(MFC_DEFINES) $(MFC_FLAGS) /D_AFX_NOFORCE_LIBS /D_MFC_VER=$(PLATFORM_MFC_VER)
  2835.  
  2836. ! ifdef DEBUG_CRTS
  2837. MFC_DEFINES=$(MFC_DEFINES) /D_AFX_ENABLE_INLINES
  2838. ! endif
  2839.  
  2840. ! IFDEF USE_MFCUNICODE
  2841. MFC_DEFINES=$(MFC_DEFINES) /DUNICODE /D_UNICODE
  2842. ! ENDIF
  2843.  
  2844. # Assume Latest MFC (4.0 for now)
  2845.  
  2846. ! ifndef USE_STATIC_MFC
  2847. MFC_DEFINES=$(MFC_DEFINES) /D_AFXDLL
  2848. LINKER_FLAGS = $(LINKER_FLAGS) $(AFX_FORCE_STDAFX)
  2849. ! endif
  2850. ! ifdef MFC_USRDLL
  2851. MFC_DEFINES=$(MFC_DEFINES) /D_USRDLL
  2852. LINKER_FLAGS = $(LINKER_FLAGS) $(AFX_FORCE_USRDLL)
  2853. ! endif
  2854.  
  2855. # MFC 4 uses Native EH only
  2856.  
  2857. !ifndef USE_NATIVE_EH
  2858. USE_NATIVE_EH=1
  2859. !endif
  2860. USE_RTTI=1
  2861.  
  2862. # UNICODE must use the UNICODE entrypoint
  2863.  
  2864. ! ifdef USE_MFCUNICODE
  2865. ! if "$(UMENTRY)" == "winmain"
  2866. UMENTRY = wwinmain
  2867. ! else if "$(UMENTRY)" == "main"
  2868. UMENTRY = wmain
  2869. ! endif
  2870. ! endif
  2871.  
  2872. ! ifndef MFC_VER
  2873. MFC_VER=42
  2874. ! else if "$(MFC_VER)" == "40" && !defined(USE_STATIC_MFC)
  2875. !error $(MAKEDIR) MFC_VER=40 is not supported.
  2876. ! endif
  2877.  
  2878. !ifndef MFC_INC_PATH
  2879. MFC_INC_PATH=$(MFC_INC_ROOT)\mfc$(MFC_VER)
  2880. !endif
  2881.  
  2882. ! ifndef MFC_DAO_INC
  2883. MFC_DAO_INC=$(MFC_INC_ROOT)\dao350
  2884. ! endif
  2885.  
  2886. ! ifndef MFC_INCLUDES
  2887. MFC_INCLUDES=$(MFC_INC_PATH);$(MFC_DAO_INC)
  2888. ! ifdef MFC_LANGUAGE
  2889. MFC_INCLUDES=$(MFC_INC_PATH)\l.$(MFC_LANGUAGE);$(MFC_INCLUDES)
  2890. ! endif
  2891. ! endif
  2892.  
  2893. ! ifndef MFC_LIBS
  2894. ! ifdef USE_STATIC_MFC
  2895.  
  2896. ! ifdef DEBUG_CRTS
  2897. ! ifdef USE_MFCUNICODE
  2898. MFC_STATIC_LIB =
  2899. MFC_LIBS=$(MFC_LIB_PATH)\uafxcwd.lib
  2900. ! else
  2901. MFC_STATIC_LIB =
  2902. MFC_LIBS=$(MFC_LIB_PATH)\nafxcwd.lib
  2903. ! endif
  2904. ! else
  2905. ! ifdef USE_MFCUNICODE
  2906. MFC_STATIC_LIB =
  2907. MFC_LIBS=$(MFC_LIB_PATH)\uafxcw.lib
  2908. ! else
  2909. MFC_STATIC_LIB =
  2910. MFC_LIBS=$(MFC_LIB_PATH)\nafxcw.lib
  2911. ! endif
  2912. ! endif
  2913.  
  2914. ! else # USE_STATIC_MFC
  2915.  
  2916. ! ifdef DEBUG_CRTS
  2917. ! ifdef USE_MFCUNICODE
  2918. MFC_STATIC_LIB = $(MFC_LIB_PATH)\mfcs$(MFC_VER)ud.lib
  2919. MFC_LIBS=$(MFC_LIB_PATH)\mfc$(MFC_VER)ud.lib \
  2920. $(MFC_LIB_PATH)\mfcd$(MFC_VER)ud.lib \
  2921. $(MFC_LIB_PATH)\mfcn$(MFC_VER)ud.lib \
  2922. $(MFC_LIB_PATH)\mfco$(MFC_VER)ud.lib
  2923. ! else
  2924. MFC_STATIC_LIB = $(MFC_LIB_PATH)\mfcs$(MFC_VER)d.lib
  2925. MFC_LIBS=$(MFC_LIB_PATH)\mfc$(MFC_VER)d.lib \
  2926. $(MFC_LIB_PATH)\mfcd$(MFC_VER)d.lib \
  2927. $(MFC_LIB_PATH)\mfcn$(MFC_VER)d.lib \
  2928. $(MFC_LIB_PATH)\mfco$(MFC_VER)d.lib
  2929. ! endif
  2930. ! else
  2931. ! ifdef USE_MFCUNICODE
  2932. MFC_STATIC_LIB = $(MFC_LIB_PATH)\mfcs$(MFC_VER)u.lib
  2933. MFC_LIBS=$(MFC_LIB_PATH)\mfc$(MFC_VER)u.lib
  2934. ! else
  2935. MFC_STATIC_LIB = $(MFC_LIB_PATH)\mfcs$(MFC_VER).lib
  2936. MFC_LIBS=$(MFC_LIB_PATH)\mfc$(MFC_VER).lib
  2937. ! endif
  2938. ! endif
  2939. MFC_LIBS=$(MFC_STATIC_LIB) $(MFC_LIBS)
  2940. # SUBSYSTEM_VERSIONX isn't available yet.
  2941. # Communicate to when it is available that MFC_LIBS comes
  2942. # from makefile.def and is not user-specified.
  2943. _PROVIDE_MFC_LIBS=1
  2944. ! endif # USE_STATIC_MFC
  2945. ! endif # MFC_LIBS
  2946. !endif # USE_MFC
  2947.  
  2948. !IFNDEF UMTYPE
  2949. !if "$(TARGETTYPE)" == "DYNLINK" || \
  2950. "$(TARGETTYPE)" == "LIBRARY" || \
  2951. "$(TARGETTYPE)" == "USER_ASSISTANCE" || \
  2952. "$(TARGETTYPE)" == "NOTARGET"
  2953. UMTYPE=console
  2954. !elseif (defined(_C_SHARP) || defined(_VB) || defined(_TLBIMP)) && "$(TARGETTYPE)" == "PROGRAM"
  2955. UMTYPE=windows
  2956. !else
  2957. UMTYPE=nt
  2958. !endif
  2959. !ENDIF
  2960.  
  2961. !ifdef USE_MFC30
  2962. ! error USE_MFC30 is not supported.
  2963. !else
  2964. ! ifdef DEBUG_CRTS
  2965. DCRT=d
  2966. LIBC_DEFINES = /D_DEBUG /D_SYSCRT_DEBUG
  2967. ! else
  2968. ! if $(FREEBUILD)
  2969. DCRT=
  2970. LIBC_DEFINES = /DNDEBUG
  2971. ! else
  2972. DCRT=
  2973. LIBC_DEFINES =
  2974. ! endif
  2975. ! endif
  2976. !endif
  2977.  
  2978. !if defined(_USE_LIBCMMT)
  2979. C_DEFINES=$(C_DEFINES) /D_STATIC_MGDLIB
  2980. !endif
  2981.  
  2982. !if defined(USE_NTDLL)
  2983. ! if defined(USE_LIBCMT)
  2984. !error USE_NTDLL defined with USE_LIBCMT
  2985. ! elseif defined(USE_MSVCRT)
  2986. !error USE_NTDLL defined with USE_MSVCRT
  2987. ! elseif defined(USE_LIBCNTPR)
  2988. !error USE_NTDLL defined with USE_LIBCNTPR
  2989. ! endif
  2990. !endif
  2991.  
  2992. !if defined(USE_MSVCRT)
  2993. ! if "$(UMTYPE)" == "nt" || "$(UMTYPE)" == "ntss"
  2994. ! error USE_MSVCRT not compatible with UMTYPE=nt or ntss
  2995. ! endif
  2996.  
  2997. ! ifdef MANAGED_CXX
  2998. ! if "$(MCPP_TYPE)" == "safe"
  2999. ! elseif "$(MCPP_TYPE)" == "pure"
  3000. ! ifdef USE_PTRUST
  3001. LIBC_LIB=$(CRT_LIB_PATH)\ptrustu.lib
  3002. ! endif
  3003. FORCENATIVEOBJECT=1
  3004. NO_NTDLL=1
  3005. ! else
  3006. ! if "$(URT_VER)" >= "2.0"
  3007. LIBC_LIB=$(CRT_LIB_PATH)\msvcrt$(DCRT).lib
  3008. ! if !defined(USE_NOUUIDLIB)
  3009. LIBC_LIB=$(LIBC_LIB) $(SDK_LIB_PATH)\uuid.lib
  3010. ! endif
  3011. ! else
  3012. LIBC_LIB=$(CRT_LIB_PATH)\msvcrt$(DCRT).lib
  3013. ! endif
  3014. ! endif
  3015. ! if !defined(DLLENTRY) && "$(URT_VER)" >= "2.0" && "$(TARGETTYPE)" == "DYNLINK"
  3016. DLLENTRY=_DllMainCRTStartup
  3017. ! endif
  3018.  
  3019. LIBC_LIB=\
  3020. $(LIBC_LIB) \
  3021. $(SDK_LIB_PATH)\mscoree.lib \
  3022. $(SDK_LIB_PATH)\ole32.lib
  3023.  
  3024. ! else
  3025. ! if !defined(USE_NOCRTLIBS)
  3026. LIBC_LIB=$(CRT_LIB_PATH)\msvcrt$(DCRT).lib
  3027. ! endif
  3028. ! endif
  3029.  
  3030. ! ifdef USE_IOSTREAM
  3031. LIBC_LIB=$(LIBC_LIB) $(CRT_LIB_PATH)\msvcirt$(DCRT).lib
  3032. ! endif
  3033. ! ifdef USE_STL
  3034. ! if "$(STL_VER)" == "70"
  3035. ! if (!defined(_USE_LIBCMMT) && !defined(MCPP_TYPE)) || "$(URT_VER)" == "1.1"
  3036. LIBC_LIB=$(SDK_LIB_PATH)\ntstc_msvcrt.lib $(LIBC_LIB)
  3037. ! endif
  3038. LIBC_DEFINES=$(LIBC_DEFINES) /D_STATIC_CPPLIB /D_STL70_
  3039. ! else
  3040. ! if !defined(MCPP_TYPE)
  3041. LIBC_LIB=$(CRT_LIB_PATH)\msvcprt$(DCRT).lib $(LIBC_LIB)
  3042. ! endif
  3043. ! endif
  3044. ! endif
  3045. LIBC_DEFINES=$(LIBC_DEFINES) /D_DLL=1 /D_MT=1
  3046.  
  3047. !elseif defined(USE_LIBCMT)
  3048.  
  3049. LIBC_LIB=$(CRT_LIB_PATH)\libcmt$(DCRT).lib
  3050. ! ifdef MANAGED_CXX
  3051. LIBC_LIB=$(LIBC_LIB) $(SDK_LIB_PATH)\mscoree.lib
  3052. ! endif
  3053. ! ifdef USE_IOSTREAM
  3054. LIBC_LIB=$(CRT_LIB_PATH)\libcimt$(DCRT).lib $(LIBC_LIB)
  3055. ! endif
  3056. ! ifdef USE_STL
  3057. ! if "$(STL_VER)" == "70"
  3058. ! if !defined(_USE_LIBCMMT) || "$(URT_VER)" == "1.1"
  3059. LIBC_LIB=$(SDK_LIB_PATH)\ntstc_libcmt.lib $(LIBC_LIB)
  3060. ! endif
  3061. LIBC_DEFINES=$(LIBC_DEFINES) /D_STATIC_CPPLIB /D_STL70_
  3062. ! else
  3063. ! if !defined(_USE_LIBCMMT)
  3064. LIBC_LIB=$(CRT_LIB_PATH)\libcpmt$(DCRT).lib $(LIBC_LIB)
  3065. ! endif
  3066. ! endif
  3067. ! endif
  3068. LIBC_DEFINES=$(LIBC_DEFINES) /D_MT=1
  3069.  
  3070. !elseif defined(USE_LIBCNTPR)
  3071.  
  3072. LIBC_LIB=$(SDK_LIB_PATH)\libcntpr.lib
  3073. LIBC_LIB=$(CRT_LIB_PATH)\safecrtnt.lib $(LIBC_LIB)
  3074. CRT_BUILD_FLAGS=/MT /U_MT
  3075.  
  3076. !elseif (defined(USE_NTDLL) || \
  3077. "$(TARGETTYPE)" == "DRIVER" || \
  3078. "$(TARGETTYPE)" == "EXPORT_DRIVER")
  3079.  
  3080. LIBC_DEFINES=$(LIBC_DEFINES) /D_DLL=1 /DNDEBUG
  3081. LIBC_LIB=
  3082.  
  3083. !elseif defined(USE_NOLIBS) || \
  3084. "$(TARGETTYPE)" == "HAL" || \
  3085. "$(TARGETTYPE)" == "GDI_DRIVER"
  3086.  
  3087. LIBC_DEFINES=$(LIBC_DEFINES) /DNDEBUG
  3088. NO_NTDLL=1
  3089.  
  3090. !else
  3091. LIBC_LIB=
  3092. CRT_BUILD_FLAGS=/MT /U_MT
  3093. ! ifdef USE_STL
  3094. ! error "single thread CRT with STL not supported - add USE_LIBCMT=1 or USE_MSVCRT=1"
  3095. ! endif
  3096. ! ifdef USE_IOSTREAM
  3097. ! error "single thread CRT with IOSTREAM not supported - add USE_LIBCMT=1 or USE_MSVCRT=1"
  3098. ! endif
  3099.  
  3100. !endif
  3101.  
  3102. !ifdef USE_SAFECRTNT
  3103. LIBC_LIB = $(CRT_LIB_PATH)\safecrtnt.lib $(LIBC_LIB)
  3104. !endif
  3105.  
  3106. !ifdef USE_VCCOM
  3107. LIBC_LIB = $(SDK_LIB_PATH)\vccomsup.lib $(LIBC_LIB)
  3108. !endif
  3109.  
  3110. !ifdef _USE_LIBCMMT
  3111. ! if "$(MCPP_TYPE)" == "pure"
  3112. LIBC_LIB=$(CRT_LIB_PATH)\libcummt$(DCRT).lib $(LIBC_LIB)
  3113. ! elseif !defined(MCPP_TYPE)
  3114. ! if "$(URT_VER)" != "1.1"
  3115. LIBC_LIB=$(CRT_LIB_PATH)\libcmmt$(DCRT).lib $(LIBC_LIB)
  3116. ! endif
  3117. ! endif
  3118. !endif
  3119.  
  3120. !if defined(USE_MSVCRT) \
  3121. && !defined(USE_LIBCMT) \
  3122. && defined(MANAGED_CXX) \
  3123. && "$(URT_VER)" == "1.1"
  3124. LIBC_LIB=$(CRT_LIB_PATH)\libcmmt11.lib $(LIBC_LIB)
  3125. !endif
  3126.  
  3127. !IFNDEF GPSIZE
  3128. GPSIZE= 0
  3129. !ENDIF
  3130.  
  3131. LIBRARY_PATH=$(SDK_LIB_PATH)
  3132.  
  3133. !if defined(USE_MFC) || defined(USE_MFCUNICODE)
  3134. LIBC_LIB = $(MFC_LIBS) $(LIBC_LIB)
  3135. !endif
  3136.  
  3137. !if defined(USE_ATL) || defined(USE_STATIC_ATL)
  3138. LIBC_LIB = $(ATL_STATIC_LIBS) $(LIBC_LIB) $(ATL_LIBS)
  3139. # Piggy back on MFC_DEFINES for now.
  3140. MFC_DEFINES = $(MFC_DEFINES) $(ATL_DEFINES)
  3141. !endif
  3142.  
  3143. !if $(386) && defined(USE_MSLU)
  3144. # MSLU goes after MFC/ATL/CRT but before everything else
  3145. LIBC_LIB = $(LIBC_LIB) $(SDK_LIB_PATH)\unicows.lib
  3146. !endif
  3147.  
  3148. !if $(LIB_WLH)
  3149. ! if $(_NT_TARGET_VERSION) >= $(_NT_TARGET_VERSION_WIN7)
  3150. NTDLL_CRT=$(SDK_LIB_PATH)\ntdllp.lib
  3151. ! else
  3152. NTDLL_CRT=$(CRT_LIB_PATH)\safecrtnt.lib $(SDK_LIB_PATH)\ntdllp.lib
  3153. ! endif
  3154. !else
  3155. NTDLL_CRT=$(CRT_LIB_PATH)\safecrtnt.lib $(SDK_LIB_PATH)\ntdll.lib
  3156. !endif
  3157.  
  3158. NT_LIBS=$(NTDLL_CRT) $(MINWIN_SDK_LIB_PATH)\nt.lib
  3159.  
  3160. !IF "$(BUILD_MINWIN)" == "1"
  3161. GUI32_LIBS=
  3162. !ELSE
  3163. GUI32_LIBS=$(SDK_LIB_PATH)\gdi32.lib \
  3164. $(SDK_LIB_PATH)\user32.lib
  3165.  
  3166. WIN32_LIBS=$(SDK_LIB_PATH)\advapi32.lib \
  3167. $(SDK_LIB_PATH)\kernel32.lib
  3168. !ENDIF
  3169.  
  3170. !IF "$(USE_DEFAULT_WIN32_LIBS)" == "1" || "$(USE_DEFAULT_WIN32_LIBS)" == ""
  3171. # Allow the default setting determined above to be used
  3172. !ELSEIF "$(USE_DEFAULT_WIN32_LIBS)" == "0"
  3173. WIN32_LIBS=
  3174. !ELSE
  3175. !ERROR USE_DEFAULT_WIN32_LIBS must be either 1 or 0
  3176. !ENDIF
  3177.  
  3178. !IF "$(USE_DEFAULT_GUI32_LIBS)" == "1" || "$(USE_DEFAULT_GUI32_LIBS)" == ""
  3179. # Allow the default setting determined above to be used
  3180. !ELSEIF "$(USE_DEFAULT_GUI32_LIBS)" == "0"
  3181. GUI32_LIBS=
  3182. !ELSE
  3183. !ERROR USE_DEFAULT_GUI32_LIBS must be either 1 or 0
  3184. !ENDIF
  3185.  
  3186. NTSS_LIBS=$(NT_LIBS) $(BASE_LIB_PATH)\smdll.lib
  3187.  
  3188. !if "$(DRIVERTYPE)" == "wdm" || "$(DRIVERTYPE)" == "WDM"
  3189. # Building a WDM driver. Default the subsystem version to the DDK version # (currently 1.0)
  3190. ! ifndef SUBSYSTEM_VERSION
  3191. SUBSYSTEM_VERSION=1.10
  3192. ! endif
  3193. !endif
  3194.  
  3195. !ifndef SUBSYSTEM_VERSION
  3196. SUBSYSTEM_WINVER =$(SUBSYSTEM_VERSION_LATEST)
  3197. SUBSYSTEM_CONVER =$(SUBSYSTEM_VERSION_LATEST)
  3198. SUBSYSTEM_NATVER =$(SUBSYSTEM_VERSION_LATEST)
  3199. !else
  3200. SUBSYSTEM_WINVER =$(SUBSYSTEM_VERSION)
  3201. SUBSYSTEM_CONVER =$(SUBSYSTEM_VERSION)
  3202. SUBSYSTEM_NATVER =$(SUBSYSTEM_VERSION)
  3203. !endif
  3204.  
  3205. #
  3206. # Set NTDDI_VERSION
  3207. #
  3208.  
  3209. !if "$(NTDDI_VERSION)" == ""
  3210.  
  3211. # Default
  3212. C_DEFINES=$(C_DEFINES) /DNTDDI_VERSION=$(CURRENT_NTDDI_VERSION)
  3213. !else
  3214.  
  3215. # User specified
  3216. C_DEFINES=$(C_DEFINES) /DNTDDI_VERSION=$(NTDDI_VERSION)
  3217. !endif
  3218.  
  3219. !if "$(TARGETTYPE)" == "DYNLINK" || \
  3220. "$(TARGETTYPE)" == "LIBRARY" || \
  3221. "$(TARGETTYPE)" == "PROGRAM" || \
  3222. "$(TARGETTYPE)" == "PROGLIB"
  3223. ! if "$(_NT_TARGET_VERSION)" < "$(_NT_TARGET_VERSION_WIN7)" || \
  3224. ("$(SUBSYSTEM_VERSION)" != "" && \
  3225. "$(SUBSYSTEM_VERSION)" < "$(SUBSYSTEM_601)")
  3226. ! ifndef PRECOMPILED_INCLUDE
  3227. # downlevel psapi uses version 1 of the psapi header
  3228. C_DEFINES=$(C_DEFINES) /DPSAPI_VERSION=1
  3229. ! endif
  3230. ! endif
  3231. !endif
  3232.  
  3233. CRT_INCLUDES=$(CRT_INC_PATH)
  3234. !ifdef USE_IOSTREAM
  3235. CRT_INCLUDES=$(CRT_INCLUDES);$(IOSTREAMS_INC_PATH)
  3236. !endif
  3237. !ifdef USE_STL
  3238. ! if "$(STL_VER)" == "70"
  3239. CRT_INCLUDES=$(CRT_INCLUDES);$(STL7_INC_PATH)
  3240. ! else
  3241. CRT_INCLUDES=$(CRT_INCLUDES);$(STL6_INC_PATH)
  3242. ! endif
  3243. !endif
  3244.  
  3245. !IF "$(UMTYPE)" == "nt"
  3246.  
  3247. SUBSYSTEM_VERSIONX=$(SUBSYSTEM_NATVER)
  3248. SUBSYSTEM=native,$(SUBSYSTEM_NATVER)
  3249. UMINCL=$(CRT_INCLUDES)
  3250.  
  3251. #
  3252. # Setup the program entry and libs if its native
  3253. #
  3254.  
  3255. !if !defined(NO_NATIVE_LIBS)
  3256.  
  3257. STD_CALL_ENTRY=1
  3258.  
  3259. ! IF "$(UMENTRY)" == "wmain"
  3260. UMENTRY=/entry:NtProcessStartupW
  3261. ! ELSE
  3262. UMENTRY=/entry:NtProcessStartup
  3263. ! ENDIF
  3264.  
  3265. UMLIBS=$(UMLIBS) $(NT_LIBS)
  3266. !endif
  3267.  
  3268. NOT_TERMINAL_SERVER_AWARE=1
  3269.  
  3270. !ELSEIF "$(UMTYPE)" == "windows"
  3271.  
  3272. SUBSYSTEM_VERSIONX=$(SUBSYSTEM_WINVER)
  3273. SUBSYSTEM=windows,$(SUBSYSTEM_WINVER)
  3274. UMINCL=$(CRT_INCLUDES)
  3275.  
  3276. ! IF "$(UMENTRY)" == "winmain"
  3277. ! if "$(MCPP_TYPE)" == "pure" && "$(TARGETTYPE)" == "PROGRAM"
  3278. ! error managed code should use unicode, specify UMENTRY=wwinmain
  3279. ! else
  3280. UMENTRY=/entry:WinMainCRTStartup
  3281. ! endif
  3282. ! ELSEIF "$(UMENTRY)" == "wwinmain"
  3283. ! if "$(MCPP_TYPE)" == "pure" && "$(TARGETTYPE)" == "PROGRAM"
  3284. UMENTRY=/entry:?wWinMainCRTStartup@@$$$$FYMHXZ
  3285. ! else
  3286. UMENTRY=/entry:wWinMainCRTStartup
  3287. ! endif
  3288. ! ELSEIF "$(UMENTRY)" == "wmain"
  3289. ! if "$(MCPP_TYPE)" == "pure" && "$(TARGETTYPE)" == "PROGRAM"
  3290. UMENTRY=/entry:?wmainCRTStartup@@$$$$FYMHXZ
  3291. ! else
  3292. UMENTRY=/entry:wmainCRTStartup
  3293. ! endif
  3294. ! ELSEIF "$(UMENTRYABS)" == ""
  3295. ! if "$(MCPP_TYPE)" == "pure" && "$(TARGETTYPE)" == "PROGRAM"
  3296. ! error managed code should use unicode, specify UMENTRY=wmain
  3297. ! else
  3298. UMENTRY=/entry:mainCRTStartup
  3299. ! endif
  3300. ! ELSE
  3301. UMENTRY=/entry:$(UMENTRYABS)
  3302. ! ENDIF
  3303.  
  3304. UMLIBS=$(UMLIBS) $(WIN32_LIBS) $(GUI32_LIBS)
  3305.  
  3306. !ELSEIF "$(UMTYPE)" == "console"
  3307.  
  3308. SUBSYSTEM_VERSIONX=$(SUBSYSTEM_CONVER)
  3309. SUBSYSTEM=console,$(SUBSYSTEM_CONVER)
  3310. UMINCL=$(CRT_INCLUDES)
  3311.  
  3312. ! IF "$(UMENTRY)" == "winmain"
  3313. ! if "$(MCPP_TYPE)" == "pure" && "$(TARGETTYPE)" == "PROGRAM"
  3314. ! error managed code should use unicode, specify UMENTRY=wwinmain
  3315. ! else
  3316. UMENTRY=/entry:WinMainCRTStartup
  3317. ! endif
  3318. ! ELSEIF "$(UMENTRY)" == "wwinmain"
  3319. ! if "$(MCPP_TYPE)" == "pure" && "$(TARGETTYPE)" == "PROGRAM"
  3320. UMENTRY=/entry:?wWinMainCRTStartup@@$$$$FYMHXZ
  3321. ! else
  3322. UMENTRY=/entry:wWinMainCRTStartup
  3323. ! endif
  3324. ! ELSEIF "$(UMENTRY)" == "wmain"
  3325. ! if "$(MCPP_TYPE)" == "pure" && "$(TARGETTYPE)" == "PROGRAM"
  3326. UMENTRY=/entry:?wmainCRTStartup@@$$$$FYMHXZ
  3327. ! else
  3328. UMENTRY=/entry:wmainCRTStartup
  3329. ! endif
  3330. ! ELSEIF "$(UMENTRYABS)" == ""
  3331. ! if "$(MCPP_TYPE)" == "pure" && "$(TARGETTYPE)" == "PROGRAM"
  3332. ! error managed code should use unicode, specify UMENTRY=wmain
  3333. ! else
  3334. UMENTRY=/entry:mainCRTStartup
  3335. ! endif
  3336. ! ELSE
  3337. UMENTRY=/entry:$(UMENTRYABS)
  3338. ! ENDIF
  3339.  
  3340. UMLIBS=$(UMLIBS) $(WIN32_LIBS)
  3341.  
  3342. !ELSEIF "$(UMTYPE)" == "ntss"
  3343.  
  3344. SUBSYSTEM_VERSIONX=$(SUBSYSTEM_NATVER)
  3345. SUBSYSTEM=native,$(SUBSYSTEM_NATVER)
  3346. UMINCL=$(CRT_INCLUDES)
  3347.  
  3348. STD_CALL_ENTRY=1
  3349.  
  3350. ! IF "$(UMENTRY)" == "wmain"
  3351. UMENTRY=/entry:NtProcessStartupW
  3352. ! ELSE
  3353. UMENTRY=/entry:NtProcessStartup
  3354. ! ENDIF
  3355.  
  3356. NOT_TERMINAL_SERVER_AWARE=1
  3357.  
  3358. UMLIBS=$(UMLIBS) $(NTSS_LIBS)
  3359.  
  3360. !ELSEIF "$(UMTYPE)" == "posix"
  3361.  
  3362. #
  3363. # This is only for base\sfu.
  3364. #
  3365. ! if "$(MAKEDIR_RELATIVE_TO_BASEDIR:base\sfu\=)" == "$(MAKEDIR_RELATIVE_TO_BASEDIR)"
  3366. ! error $(MAKEDIR) UMTYPE == posix is only supported in $(BASEDIR)\base\sfu.
  3367. ! endif
  3368.  
  3369. SUBSYSTEM=posix$(SUBSYSTEM_POSIXVER)
  3370. UMINCL=$(SDK_INC_PATH)\posix;$(CRT_INC_PATH)
  3371.  
  3372. UMENTRY=-entry:__PosixProcessStartup
  3373.  
  3374. UMLIBS=$(UMLIBS) $(POSIX_LIBS)
  3375.  
  3376. !ELSE
  3377. ! ERROR Invalid UMTYPE value - $(UMTYPE)
  3378. !ENDIF # UMTYPE tests
  3379.  
  3380.  
  3381. NTINCLUDES=$(OAK_INC_PATH);$(SDK_INC_PATH);$(MINWIN_SDK_INC_PATH)
  3382.  
  3383. #
  3384. # Let drivers include files such as ntddk.h.
  3385. # WDM drivers\libs can only include wdm.h type of files though ...
  3386. # DDK_INC_PATH must be first for precedence.
  3387. #
  3388. !IF "$(DRIVERTYPE)" == "wdm" || "$(DRIVERTYPE)" == "WDM"
  3389. NTINCLUDES=$(NTINCLUDES);$(WDM_INC_PATH)
  3390. !ELSEIF "$(DRIVERTYPE)" == "fs" || "$(DRIVERTYPE)" == "FS"
  3391. NTINCLUDES=$(NTINCLUDES);$(DDK_INC_PATH);$(IFSKIT_INC_PATH)
  3392. !ELSEIF "$(TARGETTYPE)" == "DRIVER" || \
  3393. "$(TARGETTYPE)" == "EXPORT_DRIVER" || \
  3394. "$(TARGETTYPE)" == "MINIPORT" || \
  3395. "$(TARGETTYPE)" == "DRIVER_LIBRARY"
  3396. NTINCLUDES=$(NTINCLUDES);$(DDK_INC_PATH);$(WDM_INC_PATH)
  3397. !ENDIF
  3398.  
  3399. !IF "$(BUILD_MINWIN)" == "1" && "$(MINWIN_INC_PATH)" != ""
  3400. NTINCLUDES=$(NTINCLUDES);$(MINWIN_INC_PATH);$(MINWIN_PRIV_SDK_INC_PATH)
  3401. C_DEFINES=$(C_DEFINES) -DBUILD_MINWIN
  3402. !ENDIF
  3403.  
  3404. #
  3405. # User mode scheduling (UMS) build options.
  3406. #
  3407.  
  3408. !if "$(ENABLE_UMS)" == "1"
  3409. ! if $(386)
  3410. BUILD_UMS_ENABLED=0
  3411. ! elseif $(AMD64)
  3412. BUILD_UMS_ENABLED=1
  3413. ! elseif $(IA64)
  3414. BUILD_UMS_ENABLED=1
  3415. ! elseif $(ARM)
  3416. BUILD_UMS_ENABLED=0
  3417. ! else
  3418. !error Unsupported architecture.
  3419. !endif
  3420. C_DEFINES=$(C_DEFINES) /DBUILD_UMS_ENABLED=$(BUILD_UMS_ENABLED)
  3421. !endif
  3422.  
  3423.  
  3424. #
  3425. # Temporarily enable the deprecated macros KMDF_VERSION and UMDF_VERSION for the WDK
  3426. #
  3427.  
  3428. ! if DEFINED(KMDF_VERSION)
  3429. ! message warning : The directive KMDF_VERSION has been replaced by KMDF_VERSION_MAJOR and will be removed in the next version of the WDK. Please update your scripts accordingly.
  3430. KMDF_VERSION_MAJOR = $(KMDF_VERSION)
  3431. ! endif
  3432.  
  3433. ! if DEFINED(UMDF_VERSION)
  3434. ! message warning : The directive UMDF_VERSION has been replaced by UMDF_VERSION_MAJOR and will be removed in the next version of the WDK. Please update your scripts accordingly.
  3435. UMDF_VERSION_MAJOR = $(UMDF_VERSION)
  3436. ! endif
  3437.  
  3438.  
  3439. !IF DEFINED(KMDF_VERSION_MAJOR)
  3440. ! if ("$(KMDF_VERSION_MAJOR)" == "1" || "$(KMDF_VERSION_MAJOR)" == "01")
  3441. KMDF_VERSION_MAJOR = 1
  3442. ! IF !DEFINED(KMDF_VERSION_MINOR)
  3443. KMDF_VERSION_MINOR = $(KMDF_VERSION_MINOR_LATEST)
  3444. ! ENDIF
  3445. KMDF_VER_PATH = $(KMDF_VERSION_MAJOR).$(KMDF_VERSION_MINOR)
  3446. ! else
  3447. ! error using incorrect KMDF major version number $(KMDF_VERSION_MAJOR).
  3448. ! endif
  3449. NTINCLUDES=$(NTINCLUDES);$(KMDF_INC_PATH)\$(KMDF_VER_PATH)
  3450.  
  3451. #
  3452. # Add Windows Driver Framework inc if it is a WDF driver.
  3453. #
  3454.  
  3455. #
  3456. # KMDF_MAJOR_VERSION and KMDF_MINOR_VERSION are C flags and can be used by
  3457. # the C preprocessor, in order to find the version of KMDF
  3458. #
  3459. USER_C_FLAGS=$(USER_C_FLAGS) /DKMDF_MAJOR_VERSION=$(KMDF_VERSION_MAJOR)
  3460. USER_C_FLAGS=$(USER_C_FLAGS) /DKMDF_MINOR_VERSION=$(KMDF_VERSION_MINOR)
  3461.  
  3462. #
  3463. # KMDF_MAJOR_VERSION_STRING and KMDF_MINOR_VERSION_STRING are C flags and
  3464. # can be used by scripts and applications to build KMDF filenames
  3465. # dynamically (e.g. the nonpnpapp uses it to build the name of the
  3466. # coinstaller)
  3467. #
  3468. ! if $(KMDF_VERSION_MAJOR) < 10
  3469. USER_C_FLAGS=$(USER_C_FLAGS) /DKMDF_MAJOR_VERSION_STRING=0$(KMDF_VERSION_MAJOR)
  3470. ! else if $(KMDF_VERSION_MAJOR) < 100
  3471. USER_C_FLAGS=$(USER_C_FLAGS) /DKMDF_MAJOR_VERSION_STRING=$(KMDF_VERSION_MAJOR)
  3472. ! else
  3473. ! error using incorrect KMDF major version number $(KMDF_VERSION_MAJOR).
  3474. ! endif
  3475.  
  3476. ! if $(KMDF_VERSION_MINOR) < 10
  3477. USER_C_FLAGS=$(USER_C_FLAGS) /DKMDF_MINOR_VERSION_STRING=00$(KMDF_VERSION_MINOR)
  3478. ! else if $(KMDF_VERSION_MINOR) < 100
  3479. USER_C_FLAGS=$(USER_C_FLAGS) /DKMDF_MINOR_VERSION_STRING=0$(KMDF_VERSION_MINOR)
  3480. ! else if $(KMDF_VERSION_MINOR) < 1000
  3481. USER_C_FLAGS=$(USER_C_FLAGS) /DKMDF_MINOR_VERSION_STRING=$(KMDF_VERSION_MINOR)
  3482. ! else
  3483. ! error using incorrect KMDF minor version number $(KMDF_VERSION_MINOR).
  3484. ! endif
  3485. !ELSE
  3486. USER_C_FLAGS=$(USER_C_FLAGS) /DKMDF_MAJOR_VERSION_STRING=01
  3487. USER_C_FLAGS=$(USER_C_FLAGS) /DKMDF_MINOR_VERSION_STRING=00$(KMDF_VERSION_MINOR_LATEST)
  3488. !ENDIF
  3489.  
  3490. !IF DEFINED(UMDF_VERSION_MAJOR)
  3491. ! if ("$(UMDF_VERSION_MAJOR)" == "1" || "$(UMDF_VERSION_MAJOR)" == "01")
  3492. UMDF_VERSION_MAJOR = 1
  3493. ! IF !DEFINED(UMDF_VERSION_MINOR)
  3494. UMDF_VERSION_MINOR = $(UMDF_VERSION_MINOR_LATEST)
  3495. ! ENDIF
  3496. UMDF_VER_PATH = $(UMDF_VERSION_MAJOR).$(UMDF_VERSION_MINOR)
  3497. ! else
  3498. ! error using incorrect UMDF major version number $(UMDF_VERSION_MAJOR).
  3499. ! endif
  3500. NTINCLUDES=$(NTINCLUDES);$(UMDF_INC_PATH)\$(UMDF_VER_PATH)
  3501. !ENDIF
  3502.  
  3503.  
  3504. !IFNDEF CBSTRING
  3505. ! IF "$(MAJORCOMP)" == "ntos" || \
  3506. "$(MAJORCOMP)" == "NTOS" || \
  3507. "$(TARGETTYPE)" == "DRIVER" || \
  3508. "$(TARGETTYPE)" == "DRIVER_LIBRARY" || \
  3509. "$(TARGETTYPE)" == "GDI_DRIVER" || \
  3510. "$(TARGETTYPE)" == "HAL" || \
  3511. "$(TARGETTYPE)" == "EXPORT_DRIVER" || \
  3512. "$(TARGETTYPE)" == "MINIPORT"
  3513. ! IF "$(DRIVERTYPE)" != "VXD"
  3514. CBSTRING= -cbstring
  3515. ! ENDIF
  3516. ! ELSE
  3517. CBSTRING=
  3518. ! ENDIF
  3519. !ENDIF
  3520.  
  3521.  
  3522. !if "$(TARGETTYPE)" == "DRIVER_LIBRARY"
  3523. TARGETTYPE=LIBRARY
  3524. !endif
  3525.  
  3526. #
  3527. # Add PROJECT_INC_PATH to NTINCLUDES, if NO_PRIVATE_INC is not set
  3528. #
  3529. !IFDEF PROJECT_INC_PATH
  3530. ! IFNDEF NO_PRIVATE_INC
  3531. NTINCLUDES=$(PROJECT_ROOT)\inc;$(PROJECT_OBJ_ROOT)\inc\$O;$(PROJECT_INC_PATH);$(NTINCLUDES)
  3532. ! ENDIF
  3533. !ENDIF
  3534.  
  3535. NTINCLUDES=$(OBJ_PATH)\$O;$(NTINCLUDES)
  3536.  
  3537. !if "$(POCKETPC)" == ""
  3538. !IFNDEF COMPILER_WARNINGS
  3539. COMPILER_WARNINGS=/FI$(SDK_INC_PATH)\warning.h $(PROJECT_COMPILER_WARNINGS)
  3540. !ifdef USE_LINT
  3541. LINT_FORCEDINCS=$(LINT_FORCEDINCS) -header($(SDK_INC_PATH)\warning.h)
  3542. !endif
  3543. !ENDIF
  3544.  
  3545. #
  3546. # Warnings that should not be over-ridden by individual projects.
  3547. #
  3548. #
  3549. # tag test code so static analysis tools can distinguish product code and test code
  3550. #
  3551. !ifdef TEST_CODE
  3552.  
  3553. ! if "$(URT_VER)" < "2.0"
  3554. TEST_CODE_MANAGED_RES=$(SDKTOOLS_REF_PATH)\__testcode11__.resources
  3555. ! else # URT_VER >= 2.0
  3556. TEST_CODE_MANAGED_RES=$(SDKTOOLS_REF_PATH)\__testcode20__.resources
  3557. ! endif
  3558.  
  3559. ! if defined(_C_SHARP)
  3560. USER_CS_FLAGS=$(USER_CS_FLAGS) /res:$(TEST_CODE_MANAGED_RES)
  3561. ! elseif defined(_VB)
  3562. USER_VB_NET_FLAGS=$(USER_VB_NET_FLAGS) /res:$(TEST_CODE_MANAGED_RES) /win32manifest:$(RAZZLETOOLPATH)\managed\v2.0\test.win32manifest
  3563. ! elseif defined(MANAGED_CXX) # managed C++
  3564. LINKER_FLAGS=$(LINKER_FLAGS) /ASSEMBLYRESOURCE:$(TEST_CODE_MANAGED_RES)
  3565. ! else # native C++
  3566. COMPILER_WARNINGS=$(COMPILER_WARNINGS) /FI$(SDKTOOLS_INC_PATH)\testcode.h
  3567. ! endif
  3568.  
  3569. !endif # TEST_CODE
  3570.  
  3571. !endif
  3572.  
  3573. !ifndef WIN32_WINNT_VERSION
  3574. WIN32_WINNT_VERSION=$(CURRENT_WIN32_WINNT_VERSION)
  3575. !endif
  3576.  
  3577. !ifndef WIN32_WIN95_VERSION
  3578. WIN32_WIN95_VERSION=$(LATEST_WIN32_WIN95_VERSION)
  3579. !endif
  3580.  
  3581. !ifndef WIN32_WCE_VERSION
  3582. WIN32_WCE_VERSION=$(LATEST_WIN32_WCE_VERSION)
  3583. !endif
  3584.  
  3585. !ifndef WIN32_IE_VERSION
  3586. WIN32_IE_VERSION=$(CURRENT_WIN32_IE_VERSION)
  3587. !endif
  3588.  
  3589. !ifndef WINVER_VERSION
  3590. !ifdef CHICAGO_PRODUCT
  3591. WINVER_VERSION=$(WIN32_WIN95_VERSION)
  3592. !elseif defined(POCKETPC)
  3593. WINVER_VERSION=$(WIN32_WCE_VERSION)
  3594. !else
  3595. WINVER_VERSION=$(WIN32_WINNT_VERSION)
  3596. !endif
  3597. !endif
  3598.  
  3599. !ifdef UNDEF_WINVER
  3600. _WINVER_VERSION=/UWINVER
  3601. !else
  3602. _WINVER_VERSION=/DWINVER=$(WINVER_VERSION)
  3603. !endif
  3604.  
  3605. !ifdef POCKETPC
  3606.  
  3607. NO_NTDLL=1
  3608. ! IFNDEF WIN32_DEFINE
  3609. WIN32_DEFINE=/DWIN32=300 /D_WIN32_WCE=$(WIN32_WCE_VERSION) $(_WINVER_VERSION)
  3610. ! if "$(POCKETPC_EMULATION)" != ""
  3611. WIN32_DEFINE = $(WIN32_DEFINE) /D_WIN32_WCE_EMULATION
  3612. ! endif
  3613. ! ENDIF
  3614.  
  3615. !ELSEIF defined(CHICAGO_PRODUCT)
  3616.  
  3617. NO_NTDLL=1
  3618. ! IFNDEF WIN32_DEFINE
  3619. WIN32_DEFINE=/DWIN32=200 /D_CHICAGO_=200 /D_WIN32_WINDOWS=$(WIN32_WIN95_VERSION) $(_WINVER_VERSION)
  3620. ! ENDIF
  3621.  
  3622. !ELSE
  3623.  
  3624. WIN32_DEFINE=/DWIN32=100 /D_NT1X_=100 /DWINNT=1 /D_WIN32_WINNT=$(WIN32_WINNT_VERSION) $(_WINVER_VERSION)
  3625.  
  3626. !ENDIF
  3627.  
  3628. WIN32_DEFINE=$(WIN32_DEFINE) /D_WIN32_IE=$(WIN32_IE_VERSION)
  3629.  
  3630. INCLUDES = $(INCLUDES: =)
  3631. NTINCLUDES = $(NTINCLUDES: =)
  3632. UMINCL = $(UMINCL: =)
  3633. MFC_INCLUDES = $(MFC_INCLUDES: =)
  3634. USER_INCLUDES =$(USER_INCLUDES: =)
  3635. ATL_INCLUDES = $(ATL_INCLUDES: =)
  3636. WTL_INCLUDES = $(WTL_INCLUDES: =)
  3637.  
  3638. # MFC, ATL, WTL, and USER first
  3639.  
  3640. INCPATH0=/I$(MFC_INCLUDES:;= /I) /I$(ATL_INCLUDES:;= /I) /I$(WTL_INCLUDES:;= /I) /I$(USER_INCLUDES:;= /I)
  3641. INCPATH1=/I$(MFC_INCLUDES:;= /I) /I$(ATL_INCLUDES:;= /I) /I$(WTL_INCLUDES:;= /I) /I$(USER_INCLUDES:;= /I)
  3642.  
  3643. # INCLUDES if set
  3644.  
  3645. !ifdef INCLUDES
  3646. INCPATH0 = $(INCPATH0) /I$(INCLUDES:;= /I)
  3647. INCPATH1 = $(INCPATH1) /I$(INCLUDES:;= /I)
  3648. !endif
  3649.  
  3650. # Finally NT and UM
  3651.  
  3652. INCPATH0=$(INCPATH0) /I$(NTINCLUDES:;= /I) /I$(UMINCL:;= /I)
  3653. INCPATH1=$(INCPATH1) /I$(NTINCLUDES:;= /I) /I$(UMINCL:;= /I)
  3654.  
  3655. # Remove empty "/I " settings (INCL/NTINCLUDES/UMINCL/MFC_INCLUDES macros may be empty above)
  3656.  
  3657. INCPATH0=$(INCPATH0:-I =)
  3658. INCPATH0=$(INCPATH0:/I =)
  3659. INCPATH1=$(INCPATH1:-I =)
  3660. INCPATH1=$(INCPATH1:/I =)
  3661. !ifdef USE_LINT
  3662. LINT_INCLUDES=-i$(TARGET_DIRECTORY)\ -i. $(LINT_PRECOMPPATH) $(INCPATH1:/I=-i)
  3663. !endif
  3664.  
  3665. !IF !defined(DLLENTRY) || defined(NO_DLLENTRY)
  3666. DLLENTRY=/noentry
  3667. !ELSE
  3668. ! if "$(DLLENTRY:-entry:=)" == "$(DLLENTRY)" && "$(DLLENTRY:/entry:=)" == "$(DLLENTRY)"
  3669. DLLENTRY=/entry:$(DLLENTRY)
  3670. ! endif
  3671. !ENDIF
  3672.  
  3673. !IFNDEF DLLBASE
  3674. ! IFDEF COFFBASE
  3675. DLLBASE=@$(COFFBASE_TXT_FILE),$(COFFBASE)
  3676. ! ELSE
  3677. DLLBASE=@$(COFFBASE_TXT_FILE),$(TARGETNAME)
  3678. ! ENDIF
  3679. !ENDIF
  3680.  
  3681. !if !defined(MCPP_TYPE)
  3682. !IFNDEF DLLDEF
  3683. DLLDEF=$(@B).def
  3684. !ENDIF
  3685. !endif
  3686.  
  3687. !IFNDEF BOOTBASE
  3688. ! IFDEF FRAZZLE
  3689. BOOTBASE=0xd0100000,0xd0104000
  3690. ! ELSE
  3691. BOOTBASE=0xd0ff0000,0xd0ff4000
  3692. ! ENDIF
  3693. !ENDIF
  3694.  
  3695. !IFNDEF DRIVERBASE
  3696. DRIVERBASE=0x10000
  3697. !ENDIF
  3698.  
  3699. !IFNDEF HALBASE
  3700. HALBASE=0x80010000
  3701. !ENDIF
  3702.  
  3703. !endif # } }
  3704.  
  3705. COMPLUS_INSTALLROOT=$(RAZZLETOOLPATH)\managed
  3706.  
  3707. !if (defined(URT_VER) || defined(_PROJECT_BUILDS_MANAGED_CODE))
  3708.  
  3709. ! if "$(URT_VER)" == "1.1"
  3710. ! if defined(_PROJECT_BUILDS_MANAGED_CODE) && !$(386)
  3711. ! error URT_VER=1.1 is not supported for $(_BUILDARCH) (try 2.0)
  3712. ! endif
  3713. ! ifdef MCPP_TYPE
  3714. ! error MCPP_TYPE is not supported for URT_VER=1.1 (try 2.0)
  3715. ! endif
  3716. ! if defined(_PROJECT_BUILDS_MANAGED_CODE)
  3717. _NT_TOOLS_VERSION=0x700
  3718. ! endif
  3719. ! elseif "$(URT_VER)" == "2.0"
  3720. ! else
  3721. ! error URT_VER must be specified as 1.1 or 2.0
  3722. ! endif
  3723.  
  3724. COMPLUS_VERSION=v$(URT_VER)
  3725. CLR_REF_PATH=$(SDK_REF_PATH)\clr$(URT_VER:.=)
  3726. URTTARGET=$(CLR_REF_PATH)
  3727.  
  3728. ! ifdef BUILD_PATH
  3729. BUILD_PATH=$(COMPLUS_INSTALLROOT)\$(COMPLUS_VERSION);$(BUILD_PATH)
  3730. PATH=$(BUILD_PATH)
  3731. ! else
  3732. PATH=$(COMPLUS_INSTALLROOT)\$(COMPLUS_VERSION);$(PATH)
  3733. ! endif
  3734.  
  3735. ! if [set COMPLUS_INSTALLROOT=$(COMPLUS_INSTALLROOT)]
  3736. ! endif
  3737. ! if [set COMPLUS_VERSION=$(COMPLUS_VERSION)]
  3738. ! endif
  3739.  
  3740. ! ifdef MANAGED_CXX
  3741. LINK_NAME=$(COMPLUS_INSTALLROOT)\$(COMPLUS_VERSION)\$(_BUILDARCH)\link
  3742. CC_NAME=$(COMPLUS_INSTALLROOT)\$(COMPLUS_VERSION)\$(_BUILDARCH)\cl
  3743.  
  3744. ! ifdef BUILD_PATH
  3745. BUILD_PATH=$(COMPLUS_INSTALLROOT)\$(COMPLUS_VERSION)\$(_BUILDARCH);$(BUILD_PATH)
  3746. PATH=$(BUILD_PATH)
  3747. ! else
  3748. PATH=$(COMPLUS_INSTALLROOT)\$(COMPLUS_VERSION)\$(_BUILDARCH);$(PATH)
  3749. ! endif
  3750.  
  3751. # Managed CXX implies /EHa
  3752. USE_NATIVE_EH=ASYNC
  3753.  
  3754. ! if !$(FREEBUILD) && !defined(NO_DEBUG_ASSEMBLY)
  3755. LINKER_FLAGS=$(LINKER_FLAGS) /AssemblyDebug
  3756. ! endif
  3757.  
  3758. ! if "$(URT_VER)" >= "2.0"
  3759. MANAGED_CXX_FLAGS=$(MANAGED_CXX_FLAGS) /d1clr:nostdlib /d1clr:nomscorlib $(USECXX_FLAG)
  3760. ! else
  3761. LINKER_FLAGS=$(LINKER_FLAGS) $(SDK_LIB_PATH)\nochkclr.obj
  3762. ! endif
  3763.  
  3764. ! ifdef MCPP_TYPE
  3765. MANAGED_CXX_FLAGS=$(MANAGED_CXX_FLAGS) /clr:$(MCPP_TYPE)
  3766. LINKER_FLAGS=$(LINKER_FLAGS) /clrimagetype:$(MCPP_TYPE)
  3767. ! else
  3768. MANAGED_CXX_FLAGS=$(MANAGED_CXX_FLAGS) /clr
  3769. ! endif
  3770.  
  3771. ! endif
  3772.  
  3773. #
  3774. # Enable FxCop in-source suppression for managed code
  3775. #
  3776.  
  3777. # 1. For C# projects
  3778.  
  3779. ! if defined(_C_SHARP)
  3780. ! if defined(VERIFY_BUILD) || defined(BUILD_OACR)
  3781. USER_CS_FLAGS=$(USER_CS_FLAGS) /d:CODE_ANALYSIS
  3782. ! if "$(URT_VER)" < "2.0"
  3783. REFERENCES = $(REFERENCES);$(SDKTOOLS_REF_PATH)\SuppressMessage11.metadata_dll
  3784. ! endif
  3785. ! endif
  3786.  
  3787. # 2. For managed C++ projects
  3788.  
  3789. ! elseif defined(MANAGED_CXX)
  3790. ! if defined(VERIFY_BUILD) || defined(BUILD_OACR)
  3791. USER_C_FLAGS=$(USER_C_FLAGS) /DCODE_ANALYSIS=1
  3792. ! if "$(URT_VER)" < "2.0"
  3793. REFERENCES = $(REFERENCES);$(SDKTOOLS_REF_PATH)\SuppressMessage11.metadata_dll
  3794. ! endif
  3795. ! endif
  3796.  
  3797. # 3. For managed VB projects
  3798.  
  3799. !elseif defined(MANAGED_VB)
  3800.  
  3801. ! if defined(VERIFY_BUILD) || defined(BUILD_OACR)
  3802.  
  3803. # Define CODE_ANALYSIS iff running 'timebuild /verify'
  3804. USER_VB_NET_FLAGS=$(USER_VB_NET_FLAGS) /define:CODE_ANALYSIS=1
  3805.  
  3806. ! if "$(URT_VER)" < "2.0"
  3807. REFERENCES = $(REFERENCES);$(SDKTOOLS_REF_PATH)\SuppressMessage11.metadata_dll
  3808. ! endif
  3809.  
  3810. ! endif # VERIFY_BUILD
  3811.  
  3812. !endif
  3813.  
  3814. #
  3815. # Handle REFERENCES.
  3816. #
  3817. # C# accepts
  3818. # /r:foo1.dll /r:foo2.dll
  3819. # /r:foo1.dll,foo2.dll
  3820. #
  3821. # C++ accepts
  3822. # /FUfoo1.dll /FUfoo2.dll
  3823. #
  3824. # (minor bug -- build.exe splits on , and ; even for C++, it should do only ;)
  3825. #
  3826. !if defined(REFERENCES) && defined(_PROJECT_BUILDS_MANAGED_CODE)
  3827.  
  3828. _REFERENCES=$(REFERENCES: =)
  3829.  
  3830. # Convert double semicolons to single semicolons, to handle appending ";foo" to REFERENCES that
  3831. # is already semicolon terminated.
  3832. _REFERENCES=$(_REFERENCES:;;=;)
  3833.  
  3834. # get rid of the leading ; if there is one
  3835. _REFERENCES=; $(_REFERENCES)
  3836. _REFERENCES=$(_REFERENCES:; ;=)
  3837. _REFERENCES=$(_REFERENCES:; =)
  3838.  
  3839. # get rid of the trailing ; if there is one
  3840. _REFERENCES=$(_REFERENCES) ;
  3841. _REFERENCES=$(_REFERENCES:; ;=)
  3842. _REFERENCES=$(_REFERENCES: ;=)
  3843.  
  3844. ! if "$(BUILD_PRODUCT)" == "NT"
  3845. ! if "$(_REFERENCES)" == ""
  3846. ! error REFERENCES is empty.
  3847. ! else
  3848.  
  3849. #
  3850. # Adding '*' at the end so we can detect correctly case when reference
  3851. # is last one without anything appended (we detect only when .dll or
  3852. # .exe is put at the end of reference, removing false negative
  3853. # like Wtt.ExecutionLayer.meatadata_dll
  3854. #
  3855. _REFERENCES_CHECK=$(REFERENCES)*
  3856. _REFERENCES_CHECK=$(_REFERENCES_CHECK:B=b)
  3857. _REFERENCES_CHECK=$(_REFERENCES_CHECK:C=c)
  3858. _REFERENCES_CHECK=$(_REFERENCES_CHECK:D=d)
  3859. _REFERENCES_CHECK=$(_REFERENCES_CHECK:E=e)
  3860. _REFERENCES_CHECK=$(_REFERENCES_CHECK:I=i)
  3861. _REFERENCES_CHECK=$(_REFERENCES_CHECK:L=l)
  3862. _REFERENCES_CHECK=$(_REFERENCES_CHECK:M=m)
  3863. _REFERENCES_CHECK=$(_REFERENCES_CHECK:O=o)
  3864. _REFERENCES_CHECK=$(_REFERENCES_CHECK:R=r)
  3865. _REFERENCES_CHECK=$(_REFERENCES_CHECK:S=s)
  3866. _REFERENCES_CHECK=$(_REFERENCES_CHECK:X=x)
  3867.  
  3868. ! if "$(_REFERENCES_CHECK:\mscorlib.dll=)" != "$(_REFERENCES_CHECK)" \
  3869. || "$(_REFERENCES_CHECK:\mscorlib.metadata_dll=)" != "$(_REFERENCES_CHECK)"
  3870.  
  3871. ! error Do not put mscorlib.dll or mcorlib.metadata_dll in REFERENCES.
  3872. ! error Just let the build system provide you mscorlib.dll in whatever way it automatically does.
  3873.  
  3874. ! elseif "$(_REFERENCES_CHECK:.dll*=)" != "$(_REFERENCES_CHECK)" \
  3875. || "$(_REFERENCES_CHECK:.dll,=)" != "$(_REFERENCES_CHECK)" \
  3876. || "$(_REFERENCES_CHECK:.dll;=)" != "$(_REFERENCES_CHECK)" \
  3877. || "$(_REFERENCES_CHECK:.dll =)" != "$(_REFERENCES_CHECK)"
  3878. ! error REFERENCES must use .metadata_dll instead of .dll.
  3879.  
  3880. ! elseif "$(_REFERENCES_CHECK:.exe*=)" != "$(_REFERENCES_CHECK)" \
  3881. || "$(_REFERENCES_CHECK:.exe,=)" != "$(_REFERENCES_CHECK)" \
  3882. || "$(_REFERENCES_CHECK:.exe;=)" != "$(_REFERENCES_CHECK)" \
  3883. || "$(_REFERENCES_CHECK:.exe =)" != "$(_REFERENCES_CHECK)"
  3884. ! error REFERENCES must use .metadata_exe instead of .exe.
  3885.  
  3886. ! endif
  3887.  
  3888. # Note this is checking all the references at once, so REFERENCES=.\foo.metadata_dll bar.metadata_dll bogusly
  3889. # accepts bar.metadata_dll.
  3890. ! if "$(_REFERENCES_CHECK:\=)" == "$(_REFERENCES_CHECK)"
  3891. ! error REFERENCES must contain only full paths or relative paths, it cannot contain leaf-only elements. (For example, use $$(CLR_REF_PATH)\System.metadata_dll instead of System.metadata_dll.)
  3892. ! endif
  3893. ! endif
  3894. ! endif
  3895.  
  3896. ! ifdef MANAGED_CXX
  3897. MANAGED_CXX_FLAGS=$(MANAGED_CXX_FLAGS) /FU$(_REFERENCES:;= /FU)
  3898. ! elseif (defined(_C_SHARP) || defined(_VB) || defined(_TLBIMP))
  3899. MANAGED_REFERENCES=/r:$(_REFERENCES:;= /r:)
  3900. ! else
  3901. ! error REFERENCES defined but not any of MANAGED_CXX, sources=*.cs, *vb, *.tlb.
  3902. ! endif
  3903. ! endif
  3904.  
  3905. #
  3906. # These references are not optional for Managed C++, and the compiler does not like
  3907. # it if you specify .metadata_dll. /FU is order dependent, you must put these at the start.
  3908. #
  3909. ! ifdef MANAGED_CXX
  3910. MANAGED_CXX_FLAGS=/FU$(CLR_REF_PATH)\Microsoft.VisualC.dll $(MANAGED_CXX_FLAGS)
  3911. ! if "$(URT_VER)" < "2.0"
  3912. MANAGED_CXX_FLAGS=/FI$(OBJECT_ROOT)\$O\_using_mscorlib.h $(MANAGED_CXX_FLAGS)
  3913. ! else
  3914. MANAGED_CXX_FLAGS=/FU$(CLR_REF_PATH)\mscorlib.dll $(MANAGED_CXX_FLAGS)
  3915. ! endif
  3916. ! endif
  3917.  
  3918. ! if (defined(_C_SHARP) || defined(_VB) || defined(_TLBIMP))
  3919. ! ifndef MANAGED_TARGET_TYPE
  3920. ! if "$(TARGETTYPE)" == "PROGRAM"
  3921. ! if "$(UMTYPE)" != "console"
  3922. MANAGED_TARGET_TYPE=winexe
  3923. ! else
  3924. MANAGED_TARGET_TYPE=exe
  3925. ! endif
  3926. ! elseif "$(TARGETTYPE)" == "DYNLINK"
  3927. MANAGED_TARGET_TYPE=library
  3928. ! endif
  3929. ! endif
  3930.  
  3931. ! ifdef MANAGED_PLATFORM_SPECIFIC
  3932. ! if "$(URT_VER)" < "2.0"
  3933. ! error MANAGED_PLATFORM_SPECIFIC cannot be used with URT_VER < 2.0
  3934. ! endif
  3935.  
  3936. ! if "$(_BUILDARCH)" == "ia64"
  3937. USER_CS_FLAGS=$(USER_CS_FLAGS) /platform:itanium
  3938. ! else if "$(_BUILDARCH)" == "amd64"
  3939. USER_CS_FLAGS=$(USER_CS_FLAGS) /platform:x64
  3940. ! else if "$(_BUILDARCH)" == "x86"
  3941. USER_CS_FLAGS=$(USER_CS_FLAGS) /platform:x86
  3942. ! else
  3943. ! error Using MANAGED_PLATFORM_SPECIFIC with unsupported build architecture
  3944. ! endif
  3945. ! else
  3946. ! if "$(URT_VER)" >= "2.0"
  3947. USER_CS_FLAGS=$(USER_CS_FLAGS) /platform:anycpu
  3948. ! endif
  3949. ! endif
  3950.  
  3951. ! ifndef GENBASEMAC_CMD
  3952. GENBASEMAC_CMD=$(RAZZLETOOLPATH)\genbasemac.pl
  3953. ! endif
  3954. ! if "$(GENBASEMAC_CMD)"!=""
  3955. ! if !exist($(GENBASEMAC_CMD))
  3956. ! message NMAKE : Uxxxx: unable to find $(GENBASEMAC_CMD)
  3957. ! endif
  3958. ! message BUILD: $(GENBASEMAC_CMD) $(OBJ_PATH)\$O $(TARGETNAME) $(COFFBASE_TXT_FILE)
  3959. ! IF [$(_PERL) $(GENBASEMAC_CMD) $(OBJ_PATH)\$O $(TARGETNAME) $(COFFBASE_TXT_FILE)]
  3960. ! ENDIF
  3961. ! IF EXIST( $(OBJ_PATH)\$O\coffbase.mac )
  3962. ! INCLUDE $(OBJ_PATH)\$O\coffbase.mac
  3963. ! ELSE
  3964. MANAGED_COFFBASE=0x400000
  3965. ! ENDIF
  3966. ! endif
  3967.  
  3968. ! if $(FREEBUILD)
  3969. MANAGED_DBG_FLAGS=/optimize+ /debug:pdbonly
  3970. ! else
  3971. ! if defined(_VB)
  3972. MANAGED_DBG_FLAGS=/debug:full /define:DEBUG=1
  3973. ! else
  3974. MANAGED_DBG_FLAGS=/debug:full /define:DEBUG
  3975. ! endif
  3976. ! endif
  3977.  
  3978. #
  3979. # Tlbimp.cmd is still used for 1.1 for its error filtering.
  3980. #
  3981. MANAGED_CODE_BUILD_TOOL= \
  3982. ! if defined(_VB)
  3983. $(VB_NET_COMPILER_NAME)
  3984. ! elseif defined(_TLBIMP)
  3985. ! if "$(URT_VER)" < "2.0"
  3986. tlbimp.cmd /strictref $(_TLBIMP_FLAGS) /noenv
  3987. ! else
  3988. tlbimp.exe $(TLBIMP_MACHINE) /strictref:nopia $(_TLBIMP_FLAGS)
  3989. ! endif
  3990. ! else
  3991. $(CS_COMPILER_NAME)
  3992. ! endif
  3993.  
  3994. MANAGED_CODE_BUILD_SWITCHES1= \
  3995. /out:$(TARGET) \
  3996.  
  3997. ! if defined(_VB) || defined(_C_SHARP)
  3998. ! if !defined(_MANAGED_SOURCES)
  3999. _MANAGED_SOURCES=$(SOURCES)
  4000. ! endif
  4001.  
  4002. # make sure csc.rsp is never used
  4003. MANAGED_CODE_BUILD_TOOL=$(MANAGED_CODE_BUILD_TOOL) /noconfig
  4004.  
  4005. MANAGED_CODE_BUILD_SWITCHES2= \
  4006. $(MANAGED_CODE_BUILD_SWITCH_CUSTOM) \
  4007. /target:$(MANAGED_TARGET_TYPE) \
  4008. /baseaddress:$(MANAGED_COFFBASE) \
  4009. $(MANAGED_STD_FLAGS) \
  4010. $(_LANGUAGE_SPECIFIC_MANAGED_RESOURCES_CSC_OR_VBC_FLAGS) \
  4011. $(_LANGUAGE_NEUTRAL_MANAGED_RESOURCES_CSC_OR_VBC_FLAGS)
  4012.  
  4013. ! endif
  4014.  
  4015. MANAGED_CODE_BUILD_SWITCHES2= \
  4016. $(MANAGED_CODE_BUILD_SWITCHES2) \
  4017. $(MANAGED_REFERENCES) \
  4018.  
  4019. !if defined(_RES_FILE)
  4020. !if defined(_C_SHARP)
  4021. MANAGED_CODE_BUILD_SWITCHES2=$(MANAGED_CODE_BUILD_SWITCHES2) /win32res:$(_RES_FILE)
  4022. !endif
  4023. !if defined(_VB)
  4024. MANAGED_CODE_BUILD_SWITCHES2=$(MANAGED_CODE_BUILD_SWITCHES2) /win32resource:$(_RES_FILE)
  4025. !endif
  4026. !endif
  4027.  
  4028. MANAGED_CODE_BUILD_SWITCHES=\
  4029. $(MANAGED_CODE_BUILD_SWITCHES1) \
  4030. $(MANAGED_CODE_BUILD_SWITCHES2)
  4031.  
  4032. # This split is related to changing spaces to newlines in the output.
  4033. # We change only the newlines in "2" and leave them in "1", so build.exe
  4034. # can sniff the command correctly.
  4035. MANAGED_CODE_BUILD_CMD1 = \
  4036. $(MANAGED_CODE_BUILD_TOOL) \
  4037. $(MANAGED_CODE_BUILD_SWITCHES1) \
  4038.  
  4039. MANAGED_CODE_BUILD_CMD1=$(MANAGED_CODE_BUILD_CMD1: = )
  4040.  
  4041. MANAGED_CODE_BUILD_CMD2= \
  4042. $(MANAGED_CODE_BUILD_SWITCHES2) \
  4043. $(_MANAGED_SOURCES)
  4044.  
  4045. MANAGED_CODE_BUILD_CMD=\
  4046. $(MANAGED_CODE_BUILD_CMD1) \
  4047. $(MANAGED_CODE_BUILD_CMD2)
  4048.  
  4049. # Managed code always defines MAKEDLL (it's a single pass build after all).
  4050.  
  4051. MAKEDLL=1
  4052.  
  4053. ! endif # _C_SHARP || _VB || _TLBIMP
  4054. !endif # URT_VER || _PROJECT_BUILDS_MANAGED_CODE
  4055.  
  4056.  
  4057. # Variable to hold default value to w2k razzle builds
  4058. WIN2K_DDK_REPLACEMENT=win2000.obj
  4059.  
  4060. WIN2K_DDK_REPLACEMENT=winxp.obj
  4061.  
  4062. !if defined(USE_MSVCRT) \
  4063. && ("$(SUBSYSTEM_VERSIONX)" < "6.00")
  4064.  
  4065. !if defined(MANAGED_CXX) && "$(URT_VER)" == "1.1" && $(386) && !defined(MCPP_TYPE)
  4066.  
  4067. !if ("$(SUBSYSTEM_VERSIONX)" < "5.00")
  4068. LIBC_LIB=$(SDK_LIB_PATH)\libcmmt11_winnt4.obj $(SDK_LIB_PATH)\msvcrt_winnt4.obj $(LIBC_LIB)
  4069. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.00")
  4070. LIBC_LIB=$(SDK_LIB_PATH)\libcmmt11_$(WIN2K_DDK_REPLACEMENT) $(SDK_LIB_PATH)\msvcrt_$(WIN2K_DDK_REPLACEMENT) $(LIBC_LIB)
  4071. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.01")
  4072. LIBC_LIB=$(SDK_LIB_PATH)\libcmmt11_winxp.obj $(SDK_LIB_PATH)\msvcrt_winxp.obj $(LIBC_LIB)
  4073. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.02")
  4074. LIBC_LIB=$(SDK_LIB_PATH)\libcmmt11_win2003.obj $(SDK_LIB_PATH)\msvcrt_win2003.obj $(LIBC_LIB)
  4075. !else
  4076. !error SUBSYSTEM_VERSION=$(SUBSYSTEM_VERSIONX) is invalid for x86 and URT_VER=1.1.
  4077. !endif
  4078.  
  4079. !elseif defined(MANAGED_CXX) && "$(URT_VER)" == "2.0" && "$(MCPP_TYPE)" == "pure"
  4080.  
  4081. !if ("$(SUBSYSTEM_VERSIONX)" < "5.00") && $(386)
  4082. LIBC_LIB=$(SDK_LIB_PATH)\libcummt_winnt4.obj $(LIBC_LIB)
  4083. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.00") && $(386)
  4084. LIBC_LIB=$(SDK_LIB_PATH)\libcummt_$(WIN2K_DDK_REPLACEMENT) $(LIBC_LIB)
  4085. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.01") && $(386)
  4086. LIBC_LIB=$(SDK_LIB_PATH)\libcummt_winxp.obj $(LIBC_LIB)
  4087. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.02")
  4088. LIBC_LIB=$(SDK_LIB_PATH)\libcummt_win2003.obj $(LIBC_LIB)
  4089. !else
  4090. !error SUBSYSTEM_VERSION=$(SUBSYSTEM_VERSIONX) is invalid for URT_VER=2.0 and MCPP_TYPE=PURE.
  4091. !endif
  4092.  
  4093. !elseif defined(MANAGED_CXX) && "$(URT_VER)" == "2.0" && !defined(MCPP_TYPE)
  4094.  
  4095. !if ("$(SUBSYSTEM_VERSIONX)" < "5.00") && $(386)
  4096. LIBC_LIB=$(SDK_LIB_PATH)\libcmmt_winnt4.obj $(SDK_LIB_PATH)\msvcrt_winnt4.obj $(LIBC_LIB)
  4097. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.00") && $(386)
  4098. LIBC_LIB=$(SDK_LIB_PATH)\libcmmt_$(WIN2K_DDK_REPLACEMENT) $(SDK_LIB_PATH)\msvcrt_$(WIN2K_DDK_REPLACEMENT) $(LIBC_LIB)
  4099. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.01") && $(386)
  4100. LIBC_LIB=$(SDK_LIB_PATH)\libcmmt_winxp.obj $(SDK_LIB_PATH)\msvcrt_winxp.obj $(LIBC_LIB)
  4101. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.02")
  4102. LIBC_LIB=$(SDK_LIB_PATH)\libcmmt_win2003.obj $(SDK_LIB_PATH)\msvcrt_win2003.obj $(LIBC_LIB)
  4103. !else
  4104. !error SUBSYSTEM_VERSION=$(SUBSYSTEM_VERSIONX) is invalid for URT_VER=2.0.
  4105. !endif
  4106.  
  4107. !elseif !defined(MANAGED_CXX) && !defined(MCPP_TYPE)
  4108.  
  4109. !if !defined(DEBUG_CRTS)
  4110.  
  4111. !if ("$(SUBSYSTEM_VERSIONX)" < "5.00") && $(386)
  4112. LIBC_LIB=$(SDK_LIB_PATH)\msvcrt_winnt4.obj $(LIBC_LIB)
  4113. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.00") && $(386)
  4114. LIBC_LIB=$(SDK_LIB_PATH)\msvcrt_$(WIN2K_DDK_REPLACEMENT) $(LIBC_LIB)
  4115. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.01") && $(386)
  4116. LIBC_LIB=$(SDK_LIB_PATH)\msvcrt_winxp.obj $(LIBC_LIB)
  4117. !elseif ("$(SUBSYSTEM_VERSIONX)" == "5.02")
  4118. LIBC_LIB=$(SDK_LIB_PATH)\msvcrt_win2003.obj $(LIBC_LIB)
  4119. !else
  4120. !error SUBSYSTEM_VERSION=$(SUBSYSTEM_VERSIONX) is invalid for $(_BUILDARCH).
  4121. !endif
  4122.  
  4123. !if defined(USE_STL) && "$(STL_VER)" == "70"
  4124. LIBC_LIB=$(CRT_LIB_PATH)\msvcprt_btowc.lib $(LIBC_LIB)
  4125. !endif
  4126.  
  4127. #
  4128. # temporary workaround umlibs bug
  4129. #
  4130. !if defined(UMAPPL)
  4131. _UMAPPL_LINK_LIB_IGNORE_DUPLICATE_DOWNLEVEL_LIBC_OBJ_SPECIFIED_MORE_THAN_ONCE=1
  4132. !endif
  4133.  
  4134. !endif
  4135. !endif
  4136. !endif
  4137.  
  4138. !if defined(DOWNLEVEL_BTOWC)
  4139. ! error $(MAKEDIR) DOWNLEVEL_BTOWC is no longer used, use _NT_TARGET_VERSION or SUBSYSTEM_VERSION instead.
  4140. !endif
  4141.  
  4142. !if (defined(USE_MFC) || defined(USE_MFCUNICODE)) \
  4143. && !defined(USE_STATIC_MFC) \
  4144. && "$(MFC_VER)" == "42" \
  4145. && ("$(SUBSYSTEM_VERSIONX)" <= "5.00") \
  4146. && $(386) \
  4147. && defined(_PROVIDE_MFC_LIBS)
  4148. MFC_LIBS=$(SDK_LIB_PATH)\mfc42_downlevel.obj $(MFC_LIBS)
  4149. !endif
  4150.  
  4151. !ifndef PASS_INDEPENDENT_TARGETS
  4152.  
  4153. !IFDEF makedll
  4154. !error use MAKEDLL instead of makedll.
  4155. !ENDIF
  4156.  
  4157. !IF $(386)
  4158. OBJECTS=$(386_OBJECTS)
  4159. DLLLIBOBJECTS=$(DLLLIBOBJECTS) $(386_DLLLIBOBJECTS)
  4160. !ELSEIF $(IA64)
  4161. OBJECTS=$(IA64_OBJECTS)
  4162. DLLLIBOBJECTS=$(DLLLIBOBJECTS) $(IA64_DLLLIBOBJECTS)
  4163. !ELSEIF $(AMD64)
  4164. OBJECTS=$(AMD64_OBJECTS)
  4165. DLLLIBOBJECTS=$(DLLLIBOBJECTS) $(AMD64_DLLLIBOBJECTS)
  4166. !ELSEIF $(ARM)
  4167. OBJECTS=$(ARM_OBJECTS)
  4168. DLLLIBOBJECTS=$(DLLLIBOBJECTS) $(ARM_DLLLIBOBJECTS)
  4169. !ENDIF
  4170.  
  4171. !if defined(_RES_FILE) \
  4172. && ( ("$(TARGETTYPE)" == "PROGRAM") \
  4173. || ("$(TARGETTYPE)" == "DRIVER") \
  4174. || ("$(BUILD_PASS)" == "PASS2") \
  4175. || ("$(BUILD_PASS)" == "PASSALL") \
  4176. || ("$(MAKEDLL)" == "1") \
  4177. || defined(_C_SHARP) \
  4178. || defined(_VB) \
  4179. || defined(RESOURCE_ONLY_DLL) \
  4180. || defined(COMPILE_RESOURCES_IN_PASS1) \
  4181. )
  4182. MYMUILINK=$(_RES_FILE)
  4183. !endif
  4184.  
  4185. !if !defined(TARGETTYPE) || "$(TARGETTYPE)" == "NOTARGET"
  4186. MYMUILINK=
  4187. !endif
  4188.  
  4189. #
  4190. # BUILD.EXE defines the NOLINK variable to disable the building of any
  4191. # test executables when it is recursing on a dirs. file to build components
  4192. # in subdirectories.
  4193. #
  4194.  
  4195. !IF "$(BUILDMSG)" != "Stop."
  4196. ! IFDEF NOLINK
  4197. ! UNDEF NTKERNEL
  4198. ! UNDEF MAKEDLL
  4199. ! ELSE
  4200. ! IFDEF nolink
  4201. ! UNDEF NTKERNEL
  4202. ! UNDEF MAKEDLL
  4203. ! ENDIF
  4204. ! ENDIF # DEF NOLINK
  4205. !ENDIF # BUILDMSG != "Stop."
  4206.  
  4207. !IF (!defined(_C_SHARP) && !defined(_VB))
  4208. DYNLINK_LIB=$(TARGETPATHLIB)\$(TARGET_DIRECTORY)\$(TARGETNAME).lib
  4209. DYNLINK_LIBDIR=$(ALT_PROJECT_TARGET)\$(TARGET_DIRECTORY)\$(TARGETNAME).lib
  4210. !ENDIF
  4211.  
  4212. !IF "$(TARGETNAMEP)" != ""
  4213. DYNLINK_LIBP=$(TARGETPATHLIB)\$(TARGET_DIRECTORY)\$(TARGETNAMEP).lib
  4214. DYNLINK_LIBPDIR=$(ALT_PROJECT_TARGET)\$(TARGET_DIRECTORY)\$(TARGETNAMEP).lib
  4215. !ENDIF
  4216.  
  4217. !if !defined(MCPP_TYPE)
  4218. DYNLINK_EXP=$(TARGETPATHLIB)\$(TARGET_DIRECTORY)\$(TARGETNAME).exp
  4219. !endif
  4220.  
  4221. #
  4222. # Determine type of target link we are doing
  4223. #
  4224. !IF "$(TARGETTYPE)" == "PROGLIB"
  4225. ! IF "$(TARGETEXT)" == ""
  4226. TARGETEXT=exe
  4227. !endif
  4228. ! if defined(USE_NTDLL)
  4229. TARGETLIB=$(NTDLL_CRT)
  4230. ! else
  4231. TARGETLIB=$(LIBC_LIB)
  4232. ! endif
  4233. !ELSEIF "$(TARGETTYPE)" == "CATALOG"
  4234. TARGETEXT=cat
  4235. !ELSEIF "$(TARGETTYPE)" == "MSI"
  4236. TARGETEXT=msi
  4237. !ELSEIF "$(TARGETTYPE)" == "PROGRAM"
  4238. ! IF "$(TARGETEXT)" == ""
  4239. TARGETEXT=exe
  4240. ! endif
  4241. ! if defined(USE_NTDLL)
  4242. TARGETLIB=$(NTDLL_CRT)
  4243. ! else
  4244. TARGETLIB=$(LIBC_LIB)
  4245. ! endif
  4246. !ELSEIF "$(TARGETTYPE)" == "DYNLINK"
  4247. ! IF "$(MAKEDLL)" != ""
  4248. ! IF "$(TARGETNAME)" == "ntdll"
  4249. TARGETLIB=
  4250. ! ELSEIF defined (USE_NTDLL) # USE_NTDLL never links with LIBC_LIB
  4251. TARGETLIB=$(WIN32DLL_LIBS) $(NTDLL_CRT)
  4252.  
  4253. ! ELSEIF defined (USE_SYSDLL) # USE_SYSDLL uses either kernel32 (Win95) or ntdll (NT) for CRT support
  4254. !error $(MAKEDIR) - USE_SYSDLL no longer supported
  4255. ! ELSEIF defined (NO_NTDLL) # NO_NTDLL never links with ntdll
  4256. TARGETLIB=$(WIN32DLL_LIBS) $(LIBC_LIB)
  4257. ! ELSE # Everything else uses ntdll after libc.
  4258. TARGETLIB=$(WIN32DLL_LIBS) $(LIBC_LIB)
  4259. ! ENDIF
  4260. ! IF "$(TARGETEXT)" == ""
  4261. TARGETEXT=dll
  4262. ! ENDIF
  4263. ! ELSE
  4264. TARGETEXT=lib
  4265. TARGETLIB=
  4266. ! ENDIF
  4267.  
  4268. !ELSEIF "$(TARGETTYPE)" == "LIBRARY"
  4269. TARGETEXT=lib
  4270. TARGETLIB=
  4271.  
  4272. !ELSEIF "$(TARGETTYPE)" == "DRIVER"
  4273. ! IF "$(TARGETEXT)" == ""
  4274. TARGETEXT=sys
  4275. ! ENDIF
  4276. !if "$(DRIVERTYPE)" == "wdm" || "$(DRIVERTYPE)" == "WDM"
  4277. TARGETLIB=$(DDK_LIB_PATH)\wdm.lib
  4278. !ELSEIF "$(DRIVERTYPE)" == "VXD"
  4279. TARGETEXT=vxd
  4280. !ELSE
  4281. TARGETLIB=$(DDK_LIB_PATH)\ntoskrnl.lib $(DDK_LIB_PATH)\hal.lib $(DDK_LIB_PATH)\wmilib.lib
  4282. ! IF defined(SUBSYSTEM_VERSION) && "$(SUBSYSTEM_VERSION)" < "$(SUBSYSTEM_601)"
  4283. TARGETLIB=$(CRT_LIB_PATH)\safecrtnt.lib $(SDK_LIB_PATH)\libcntpr.lib $(TARGETLIB)
  4284. ! ENDIF
  4285. !ENDIF
  4286.  
  4287. #
  4288. # Add Windows Driver Framework lib if it is a WDF driver
  4289. #
  4290. !IF DEFINED(KMDF_VERSION_MAJOR)
  4291. TARGETLIB=$(TARGETLIB) \
  4292. $(KMDF_LIB_PATH)\$(KMDF_VER_PATH)\WdfLdr.lib \
  4293. $(KMDF_LIB_PATH)\$(KMDF_VER_PATH)\WdfDriverEntry.lib
  4294. !ENDIF
  4295.  
  4296. !ELSEIF "$(TARGETTYPE)" == "EXPORT_DRIVER"
  4297. ! IF "$(MAKEDLL)" != ""
  4298. TARGETEXT=sys
  4299. !if "$(DRIVERTYPE)" == "wdm" || "$(DRIVERTYPE)" == "WDM"
  4300. TARGETLIB=$(DDK_LIB_PATH)\wdm.lib
  4301. !ELSE
  4302. TARGETLIB=$(DDK_LIB_PATH)\ntoskrnl.lib $(DDK_LIB_PATH)\hal.lib $(DDK_LIB_PATH)\wmilib.lib
  4303. ! IF defined (SUBSYSTEM_VERSION) && "$(SUBSYSTEM_VERSION)" < "$(SUBSYSTEM_601)"
  4304. TARGETLIB=$(CRT_LIB_PATH)\safecrtnt.lib $(SDK_LIB_PATH)\libcntpr.lib $(TARGETLIB)
  4305. ! ENDIF
  4306. !ENDIF
  4307.  
  4308. #
  4309. # Add Windows Driver Framework lib if it is a WDF export driver
  4310. #
  4311. !IF DEFINED(KMDF_VERSION_MAJOR)
  4312. TARGETLIB=$(TARGETLIB) \
  4313. $(KMDF_LIB_PATH)\$(KMDF_VER_PATH)\WdfLdr.lib \
  4314. $(KMDF_LIB_PATH)\$(KMDF_VER_PATH)\WdfDriverEntry.lib
  4315.  
  4316. !ENDIF
  4317.  
  4318. ! ELSE
  4319. TARGETEXT=lib
  4320. TARGETLIB=
  4321. ! ENDIF
  4322.  
  4323. !ELSEIF "$(TARGETTYPE)" == "HAL"
  4324. ! IF "$(MAKEDLL)" != ""
  4325. TARGETEXT=dll
  4326. TARGETLIB=$(DDK_LIB_PATH)\ntoskrnl.lib
  4327. ! ELSE
  4328. TARGETEXT=lib
  4329. TARGETLIB=
  4330. ! ENDIF
  4331.  
  4332. !ELSEIF "$(TARGETTYPE)" == "MINIPORT"
  4333. TARGETEXT=sys
  4334.  
  4335. !ELSEIF "$(TARGETTYPE)" == "GDI_DRIVER"
  4336.  
  4337. TARGETEXT=dll
  4338. TARGETLIB=$(DDK_LIB_PATH)\win32k.lib
  4339. !ifdef USE_LIBCNTPR_FOR_GDI_DRIVER_CRTS
  4340. TARGETLIB=$(SDK_LIB_PATH)\libcntpr.lib $(TARGETLIB)
  4341. !endif
  4342. !ENDIF # TARGETTYPE
  4343.  
  4344.  
  4345. !if !defined(INSTRUMENT_FOR_COVERAGE)
  4346. INSTRUMENT_FOR_COVERAGE=0
  4347. !endif
  4348.  
  4349.  
  4350. !if defined(BUILD_DEBUG)
  4351. !message MAKEDIR=$(MAKEDIR)
  4352. !message TARGETNAME=$(TARGETNAME)
  4353. !message TARGET_DESTINATION=$(TARGET_DESTINATION)
  4354. !message TEST_CODE=$(TEST_CODE)
  4355. !message TARGETEXT=$(TARGETEXT)
  4356. !message TARGETNAME=$(TARGETNAME)
  4357. !endif
  4358.  
  4359.  
  4360. _BINPLACE_LINK_RESULT = $@
  4361. _PRE_BBT_TARGET_DESTINATION=$(_TARGET_DESTINATION_WITHOUT_QUOTES)
  4362.  
  4363.  
  4364. !if $(FREEBUILD) \
  4365. && defined(_NTTREE) \
  4366. && defined(TARGET_DESTINATION) \
  4367. && "$(IBC)" != "0" \
  4368. && ("$(_TARGET_DESTINATION_WITHOUT_QUOTES::=)" == "$(_TARGET_DESTINATION_WITHOUT_QUOTES)") \
  4369. && (exist($(BASEDIR)\bbt\$(_BUILDARCH)fre\ibc\$(TARGET_DESTINATION:retail=)\$(TARGETNAME).$(TARGETEXT)))
  4370.  
  4371. IBC_CMD= $(_PERL) $(BASEDIR)\bbt\bbtcountsgen\ibc.pl \
  4372. ! if "$(_TARGET_DESTINATION_WITHOUT_QUOTES)" != "retail"
  4373. /Destination:$(TARGET_DESTINATION) \
  4374. ! endif
  4375. /File:$@
  4376. !else
  4377. IBC_CMD=
  4378. !endif
  4379.  
  4380. TARGET=
  4381.  
  4382. !ifdef PASS1_NOLIB
  4383. !ifdef NTTARGETFILE1
  4384. USE_MAKEFILE_INC=1
  4385. !undef NTTARGETFILE1
  4386. !endif
  4387. !ifdef NTTARGETFILE2
  4388. USE_MAKEFILE_INC=1
  4389. !undef NTTARGETFILE2
  4390. !endif
  4391. !ifdef NTTARGETFILES
  4392. USE_MAKEFILE_INC=1
  4393. !undef NTTARGETFILES
  4394. !endif
  4395. !undef TARGETEXEFILES
  4396. !undef MISCFILES
  4397. !endif
  4398.  
  4399. !IF ("$(TARGETTYPE)" != "UMAPPL_NOLIB" && !defined(PASS1_NOLIB)) \
  4400. && (("$(TARGETTYPE)" == "CATALOG") \
  4401. || ("$(TARGETTYPE)" == "MSI") \
  4402. || ("$(OBJECTS)" != "") \
  4403. || (defined(_RES_FILE) && (("$(TARGETTYPE)" == "DRIVER") || ("$(TARGETTYPE)" == "PROGRAM") || ("$(TARGETTYPE)" == "DYNLINK") || ("$(TARGETTYPE)" == "EXPORT_DRIVER") || ("$(TARGETTYPE)" == "PROGLIB"))) \
  4404. || defined(_TLBIMP) \
  4405. || defined(NTKERNEL) \
  4406. || (defined(_C_SHARP) && ("$(_MANAGED_SOURCES:.cs=)" != "$(_MANAGED_SOURCES)")) \
  4407. || (defined(_VB) && ("$(_MANAGED_SOURCES:.vb=)" != "$(_MANAGED_SOURCES)")) \
  4408. || ("$(OBJLIBFILES)" != "" && (("$(TARGETTYPE)" == "LIBRARY") || ("$(TARGETTYPE)" == "DRIVER_LIBRARY")))) \
  4409.  
  4410. TARGET=$(TARGETPATH)\$(TARGET_DIRECTORY)\$(TARGETNAME).$(TARGETEXT)
  4411.  
  4412. !ELSE
  4413.  
  4414. !if !defined(PASS1_NOLIB) && "$(BUILD_PASS)" == "PASS1" && (("$(TARGETTYPE)" == "LIBRARY") || ("$(TARGETTYPE)" == "DRIVER_LIBRARY"))
  4415. !message error : No .lib/.dll/.exe/.sys is produced, at least for $(_BUILDARCH). Change TARGETTYPE to NOTARGET. Or possibly tag the directory not to build for $(_BUILDARCH).
  4416. !if "$(SOURCES: =)" == ""
  4417. !message error : You can probably also remove SOURCES=<empty> (try it).
  4418. !endif
  4419. !if defined(TARGETNAME) && !defined(SLS_LICENSING_MANIFEST)
  4420. !message error : You can often but not always also remove TARGETNAME (try it).
  4421. !endif
  4422. !error
  4423. !endif
  4424.  
  4425. !ENDIF
  4426.  
  4427. !if defined(SLS_LICENSING_MANIFEST) && !defined(TARGETNAME)
  4428. !error SLS_LICENSING_MANIFEST requires TARGETNAME.
  4429. !endif
  4430.  
  4431. !IFDEF NOTARGETLIB
  4432. TARGETLIB=
  4433. !ENDIF
  4434.  
  4435. !IFNDEF MACHINE_TARGETLIBS
  4436. MACHINE_TARGETLIBS=$(TARGETLIB) $(TARGETLIBS)
  4437. !ENDIF
  4438.  
  4439. !if (!defined(_C_SHARP) && !defined(_VB))
  4440. TARGETOBJFILES=$(TARGETOBJFILES) $(OBJECTS)
  4441. !ENDIF
  4442.  
  4443. # This allows us to call packthem /s to "sign" MST files
  4444. # after they're built and before they're binplaced
  4445. SIGN_THEME_FILE_CMD=
  4446. !if "$(SIGN_THEME_FILE)" == "1"
  4447. SIGN_THEME_FILE_CMD=SignTheme.cmd $(OBJ_PATH)\$(O) $@
  4448. !endif
  4449.  
  4450. #
  4451. # MUI LANGUAGE_NEUTRAL
  4452. #
  4453.  
  4454. !ifdef LANGUAGE_NEUTRAL
  4455.  
  4456.  
  4457. MUI = $(LANGUAGE_NEUTRAL)
  4458. MUI_COMMENT = LN_TEMPSUPPORT, LANGUAGE_NEUTRAL value being used to set MUI - this support will be removed soon
  4459. !endif
  4460.  
  4461. #
  4462. # Undefine these flags in case user has defined them accidentially. These flags are for internal use only in this file.
  4463. # They will be defined in this file.
  4464. #
  4465. !undef DO_LANGUAGE_NEUTRAL
  4466. !undef DO_LANGUAGE_NEUTRAL_DRV
  4467. !undef LANGUAGE_NEUTRAL_STS
  4468.  
  4469. !if "$(TARGETTYPE)" == "DRIVER" || "$(TARGETTYPE)" == "DRIVER_LIBRARY" || "$(TARGETTYPE)" == "GDI_DRIVER" || \
  4470. "$(TARGETTYPE)" == "HAL" || "$(TARGETTYPE)" == "EXPORT_DRIVER" || "$(TARGETTYPE)" == "MINIPORT" || \
  4471. ( ("$(MAJORCOMP)" == "ntos" || "$(MAJORCOMP)" == "NTOS") && "$(TARGETTYPE)" != "LIBRARY" )
  4472. DO_LANGUAGE_NEUTRAL_DRV=1
  4473. !endif
  4474.  
  4475. #
  4476. # MUI_DRV is for forcing a user mode project to be treated as a driver.
  4477. # For example a printer notification dll shipped with printer driver.
  4478. #
  4479. !ifdef MUI_DRV
  4480. DO_LANGUAGE_NEUTRAL_DRV=1
  4481. !endif
  4482.  
  4483. #
  4484. # Now that we know how we'll be MUI splitting, do an extra check on LOCALIZE_BASE_FILE to be sure it's not being abused
  4485. #
  4486. !if "$(LOCALIZE_BASE_FILE)" == "1"
  4487. ! if "$(DO_LANGUAGE_NEUTRAL_DRV)" == "1"
  4488. !message BUILDMSG: Warning: LOCALIZE_BASE_FILE should only be used if you are doing kernel-mode style MUI splitting : $(MAKEDIR)
  4489. ! endif
  4490. !endif
  4491.  
  4492. #
  4493. # If user explicitely disables MUI then they must also define MUI_COMMENT
  4494. # and put justification as why he disabled MUI, otherwise we'll output error.
  4495. #
  4496. !if "$(MUI)" != "1"
  4497. ! if "$(MUI)" == "0"
  4498. ! ifdef MUI_COMMENT
  4499. LANGUAGE_NEUTRAL_STS=LGNSTS_MUIOFF
  4500. ! else
  4501. ! ERROR MUI split disabling by setting MUI=0 requires a detailed explanation justifying this decision. Please add one in the form "MUI_COMMENT=" to your sources file.
  4502. ! endif
  4503. ! else
  4504. ! ERROR MUI=$(MUI); MUI must be set to 1 or 0.
  4505. ! endif
  4506. !endif #MUI != "1"
  4507.  
  4508. #
  4509. # If MUI is enabled we still check if the project is of valid type for MUIzation.
  4510. # The project must be UNMANAGED code.
  4511. #
  4512. !if "$(MUI)" == "1"
  4513. ! if ( defined(DO_LANGUAGE_NEUTRAL_DRV) || "$(TARGETTYPE)" == "PROGRAM" || \
  4514. "$(TARGETTYPE)" == "PROGLIB" || "$(TARGETTYPE)" == "DYNLINK" || \
  4515. ( "$(TARGETTYPE)" == "NOTARGET" && \
  4516. ( defined(MISCFILES) || defined(LANG_MISCFILES) || \
  4517. defined(MULTI_MISCFILES) || defined(MULTI_MUI_MISCFILES) || \
  4518. defined(LOC_MISCFILES) || defined(LOC_MUI_MISCFILES) || \
  4519. defined(PRELOC_MISCFILES) || defined(PRELOC_MUI_MISCFILES) || \
  4520. defined(PRELOC_MUI_ONLY_MISCFILES) || defined(PASS0_BINPLACE) || \
  4521. defined(PASS1_BINPLACE) || defined(PASS2_BINPLACE) ) ) ) && \
  4522. ( !defined(_C_SHARP) && !defined(_VB) )
  4523. DO_LANGUAGE_NEUTRAL=1
  4524. LANGUAGE_NEUTRAL_STS=LGNSTS_UNKNOWN
  4525. ! ELSE
  4526. ! if "$(TARGETTYPE)" == "PROGRAM" || "$(TARGETTYPE)" == "DYNLINK"
  4527. LANGUAGE_NEUTRAL_STS=LGNSTS_MANAGED
  4528. ! endif
  4529. ! if "$(TARGETTYPE)" == "DRIVER" || "$(TARGETTYPE)" == "GDI_DRIVER" || "$(TARGETTYPE)" == "EXPORT_DRIVER" || "$(TARGETTYPE)" == "HAL" || "$(TARGETTYPE)" == "MINIPORT"
  4530. LANGUAGE_NEUTRAL_STS=LGNSTS_KERNEL
  4531. ! endif
  4532. ! ENDIF
  4533. !ENDIF #MUI == "1"
  4534.  
  4535. LANGUAGE_NEUTRAL_RESDIR=$(LOC_BIN)
  4536.  
  4537. #
  4538. # MUI Manifest
  4539. #
  4540. !ifdef DO_LANGUAGE_NEUTRAL
  4541. ! ifndef DO_LANGUAGE_NEUTRAL_DRV
  4542. RC_CONFIG_ROOT_SOURCE=$(NTMAKEENV)\MUI.RCConfig
  4543. ! else
  4544. RC_CONFIG_ROOT_SOURCE=$(NTMAKEENV)\MUI_DRV.RCConfig
  4545. ! endif
  4546.  
  4547. RC_CONFIG_ROOT=$(NTMAKEENV)
  4548. ! ifndef RC_CONFIG
  4549. ! ifndef DO_LANGUAGE_NEUTRAL_DRV
  4550. ! ifndef MUI_BIDI_IMG
  4551. RC_CONFIG=MUI.RCConfig
  4552. ! else
  4553. RC_CONFIG=MUI_BIDI_IMG.RCConfig
  4554. ! endif
  4555. ! else
  4556. ! ifndef MUI_BIDI_IMG
  4557. RC_CONFIG=MUI_DRV.RCConfig
  4558. ! else
  4559. RC_CONFIG=MUI_DRV_BIDI_IMG.RCConfig
  4560. ! endif
  4561. ! endif
  4562. ! endif #ndef RC_CONFIG
  4563.  
  4564.  
  4565. # Lowercase the name
  4566. RC_CONFIG_LOWERCASE=$(RC_CONFIG)
  4567. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:A=a)
  4568. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:B=b)
  4569. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:C=c)
  4570. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:D=d)
  4571. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:E=e)
  4572. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:F=f)
  4573. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:G=g)
  4574. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:H=h)
  4575. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:I=i)
  4576. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:J=j)
  4577. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:K=k)
  4578. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:L=l)
  4579. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:M=m)
  4580. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:N=n)
  4581. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:O=o)
  4582. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:P=p)
  4583. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:Q=q)
  4584. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:R=r)
  4585. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:S=s)
  4586. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:T=t)
  4587. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:U=u)
  4588. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:V=v)
  4589. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:W=w)
  4590. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:X=x)
  4591. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:Y=y)
  4592. RC_CONFIG_LOWERCASE=$(RC_CONFIG_LOWERCASE:Z=z)
  4593.  
  4594. # Create the variants we need
  4595. RC_CONFIG_SOURCE_FILENAME=$(RC_CONFIG_LOWERCASE:..\=)
  4596. RC_CONFIG_BASENAME=$(RC_CONFIG_SOURCE_FILENAME)
  4597. RC_CONFIG_BASENAME=$(RC_CONFIG_BASENAME:.muimanifest=)
  4598. RC_CONFIG_BASENAME=$(RC_CONFIG_BASENAME:.rcconfig=)
  4599.  
  4600.  
  4601. !ifdef DELTA_RC_CONFIG
  4602. DELTA_RC_CONFIG_BASENAME=$(DELTA_RC_CONFIG:.muimanifest=)
  4603. DELTA_RC_CONFIG_BASENAME=$(DELTA_RC_CONFIG:.rcconfig=)
  4604. RC_CONFIG_OBJ2=$(OBJ_PATH)\$O\$(DELTA_RC_CONFIG_BASENAME).drcc
  4605. !endif
  4606. RC_CONFIG_OBJ1=$(OBJ_PATH)\$O\$(RC_CONFIG_BASENAME).rcc
  4607.  
  4608. MAKE_RC_CONFIG_CMD=nmake.exe /nologo /f $(NTMAKEENV)\makefile.def $(RC_CONFIG_OBJ1)
  4609. MAKE_DELTA_RC_CONFIG_CMD=nmake.exe /nologo /f $(NTMAKEENV)\makefile.def $(RC_CONFIG_OBJ2)
  4610. RC_CONFIG_DEFINES=
  4611. RC_CONFIG_PREPROCESSOR_NAME=preprocessor
  4612. ! if "$(TARGETTYPE)" != "NOTARGET"
  4613. LANGUAGE_NEUTRAL_RESOURCE = -q $(RC_CONFIG_OBJ1)
  4614. ! ifdef MUI_ALWAYS_SPLIT_VERSION
  4615. LANGUAGE_NEUTRAL_RESOURCE = $(LANGUAGE_NEUTRAL_RESOURCE) -g1
  4616. ! endif
  4617. ! ifdef DELTA_RC_CONFIG
  4618. LANGUAGE_NEUTRAL_RESOURCE = $(LANGUAGE_NEUTRAL_RESOURCE) -qq $(RC_CONFIG_OBJ2)
  4619. ! endif
  4620. ! else
  4621. LANGUAGE_NEUTRAL_RESOURCE=
  4622. ! endif
  4623.  
  4624. LANGUAGE_NEUTRAL_RESOURCE_MUIRCT = /q $(RC_CONFIG_OBJ1)
  4625. ! ifdef MUI_ALWAYS_SPLIT_VERSION
  4626. LANGUAGE_NEUTRAL_RESOURCE_MUIRCT = $(LANGUAGE_NEUTRAL_RESOURCE_MUIRCT) /f
  4627. ! endif
  4628.  
  4629. !else
  4630.  
  4631. MAKE_RC_CONFIG_CMD=
  4632. MAKE_DELTA_RC_CONFIG_CMD=
  4633. LANGUAGE_NEUTRAL_RESOURCE=
  4634. LANGUAGE_NEUTRAL_RESOURCE_MUIRCT=
  4635. !endif #defined DO_LANGUAGE_NEUTRAL
  4636.  
  4637.  
  4638. #
  4639. # Lsbuild.exe section
  4640. #
  4641.  
  4642. #
  4643. # Decide if we need to extract resource comments while compiling the resources.
  4644. # This is similar to setting BUILD_LCG.
  4645. #
  4646. # We will create LCE files if:
  4647. #
  4648. # - one of the following is true:
  4649. # - The developer specifies BUILD_LCE_FILE=1 in their sources file
  4650. # - We are NOT building test code
  4651. # - DO_LSBUILD=1
  4652. #
  4653. LCE_FILE=$(OBJ_PATH)\$O\$(TARGETNAME).lce
  4654. !if "$(BUILD_LCE_FILE)" != ""
  4655. !message LCG: BUILD_LCE_FILE: $(BUILD_LCE_FILE)
  4656. ! if "$(BUILD_LCE_FILE)" != "1" && "$(BUILD_LCE_FILE)" != "0"
  4657. ! error BUILD_LCE_FILE must be empty, 1, or 0
  4658. ! endif
  4659.  
  4660. !elseif defined(TEST_CODE)
  4661. BUILD_LCE_FILE=0
  4662.  
  4663. !else
  4664. BUILD_LCE_FILE=1
  4665.  
  4666. !endif
  4667.  
  4668. # If DO_LSBUILD is turned off, don't create LCE files
  4669. !if "$(DO_LSBUILD)" != "1"
  4670. BUILD_LCE_FILE=0
  4671. !endif
  4672.  
  4673.  
  4674.  
  4675.  
  4676. #
  4677. # Only perform LSBUILD-related operations if the LS option is passed to Razzle
  4678. #
  4679. !if "$(DO_LSBUILD)" == "1"
  4680.  
  4681. # If they did not supply an LCI file, look for one in the default place/name
  4682. !if defined(LCI_FILE)
  4683. ! if !exist($(LCI_FILE))
  4684. ! error LCI_DEPEND does not exist : $(LCI_DEPEND)
  4685. ! else
  4686. LCI_DEPEND=$(LCI_FILE)
  4687. ! endif
  4688. !else
  4689. LCI_DEPEND=$(TARGETNAME).$(TARGETEXT).lci
  4690. !endif
  4691.  
  4692. # Stuff we use in multiple places
  4693. LCG_DEPEND=
  4694. MUIRES_DEPEND=$(TARGETPATH)\$(TARGET_DIRECTORY)\$(TARGETNAME).muires
  4695.  
  4696.  
  4697.  
  4698. # We will create LCG files if:
  4699. #
  4700. # - We are in PASS2 or PASSALL and have a target
  4701. # or PASS1 and building a RESOURCE_ONLY_DLL
  4702. # - one of the following is true:
  4703. # - The developer specifies BUILD_LCG=1 in their sources file
  4704. # - The developer specifies LCG_SOURCE=foo.bar in their sources file
  4705. # - We are NOT building test code
  4706. # - MUI splitting is being done
  4707. # - A .muires file was created
  4708. # - We can find the .res file(s) specified by MYMUILINK
  4709. # - There is an developer-supplied LCI file present
  4710. # - An LCE file was created by the resource compiler
  4711. #
  4712. !if ("$(BUILD_PASS)" == "PASS2" \
  4713. || "$(BUILD_PASS)" == "PASSALL" \
  4714. || ("$(BUILD_PASS)" == "PASS1" && defined(RESOURCE_ONLY_DLL)) \
  4715. ) \
  4716. && "$(TARGETTYPE)" != "NOTARGET" && "$(TARGETNAME)" != ""
  4717.  
  4718. ! if "$(BUILD_LCG)" != ""
  4719. !message LCG: BUILD_LCG: $(BUILD_LCG)
  4720. ! if "$(BUILD_LCG)" != "1" && "$(BUILD_LCG)" != "0"
  4721. ! error BUILD_LCG must be empty, 1, or 0
  4722. ! endif
  4723. ! endif
  4724.  
  4725. ! if "$(BUILD_LCG)" == "0"
  4726. # Nothing to do except prevent entering the if/else chain below
  4727.  
  4728. ! elseif "$(BUILD_LCG)" == "1"
  4729.  
  4730. # It was set forcibly by the user, make sure we set MUI_DEPEND correctly
  4731. ! if defined(DO_LANGUAGE_NEUTRAL)
  4732.  
  4733. # MUI dependancies must be the first ones we look for so that we set MUI_DEPEND
  4734. # properly - the LCI and LCE dependancies will get added automatically later on.
  4735. ! if exist($(MUIRES_DEPEND))
  4736. MUI_DEPEND=$(MUIRES_DEPEND)
  4737.  
  4738. # Note that we do not check for existance - this could be multiple files.
  4739. # We rely on the MUI code to create the *.notloc file if needed and we
  4740. # explicitly look for it in CreateLCGFile.pl.
  4741. ! elseif "$(MYMUILINK)" != ""
  4742. MUI_DEPEND=$(MYMUILINK)
  4743.  
  4744. ! endif # MUIRES_DEPEND
  4745. ! endif # DO_LANGUAGE_NEUTRAL
  4746.  
  4747. ! elseif "$(LCG_SOURCE)" != ""
  4748. BUILD_LCG=1
  4749.  
  4750. ! elseif defined(TEST_CODE)
  4751. BUILD_LCG=0
  4752.  
  4753. ! elseif defined(DO_LANGUAGE_NEUTRAL)
  4754.  
  4755. # MUI dependancies must be the first ones we look for so that we set MUI_DEPEND
  4756. # properly - the LCI and LCE dependancies will get added automatically later on.
  4757. ! if exist($(MUIRES_DEPEND))
  4758. MUI_DEPEND=$(MUIRES_DEPEND)
  4759. BUILD_LCG=1
  4760.  
  4761. # Note that we do not check for existance - this could be multiple files.
  4762. # We rely on the MUI code to create the *.notloc file if needed and we
  4763. # explicitly look for it in CreateLCGFile.pl.
  4764. ! elseif "$(MYMUILINK)" != ""
  4765. MUI_DEPEND=$(MYMUILINK)
  4766. BUILD_LCG=1
  4767.  
  4768. ! elseif exist($(LCI_DEPEND))
  4769. BUILD_LCG=1
  4770.  
  4771. ! elseif exist($(LCE_FILE))
  4772. BUILD_LCG=1
  4773.  
  4774. ! else
  4775. BUILD_LCG=0
  4776.  
  4777. ! endif
  4778.  
  4779. ! else
  4780. BUILD_LCG=0
  4781.  
  4782. ! endif # DO_LANGUAGE_NEUTRAL
  4783.  
  4784. !else
  4785. BUILD_LCG=0
  4786.  
  4787. !endif
  4788.  
  4789.  
  4790. #
  4791. # If we are supposed to create an LCG, decide what we depend on for makefile rules and what our source/input file is
  4792. #
  4793. !if "$(BUILD_LCG)" == "1"
  4794.  
  4795. # If they set LCG_SOURCE, we use that for both LCG_DEPEND and LCG_SOURCE.
  4796. !if "$(LCG_SOURCE)" != ""
  4797. !message LCG: Using LCG_SOURCE to set LCG_TARGET and LCG_DEPEND
  4798. LCG_DEPEND=$(LCG_SOURCE)
  4799. LCG_TARGET=$(LCG_SOURCE).lcg
  4800.  
  4801.  
  4802. # If MUI splitting is being done (the normal case for non-managed code with win32 resources),
  4803. # we use the same file as MUI for LCG_DEPEND and the .MUI file for LCG_SOURCE.
  4804. !elseif "$(MUI_DEPEND)" != ""
  4805. !message LCG: Using MUI_DEPEND to set LCG_TARGET and LCG_DEPEND
  4806. LCG_DEPEND=$(MUI_DEPEND)
  4807. LCG_SOURCE=$(TARGETPATH)\$(TARGET_DIRECTORY)\$(TARGETNAME).$(TARGETEXT).mui
  4808. LCG_TARGET=$(OBJ_PATH)\$O\$(TARGETNAME).$(TARGETEXT).mui.lcg
  4809.  
  4810. # Use the non-MUI stuff if it is defined and depend on $(TARGET) as well as using it for the source.
  4811. !elseif "$(TARGET)" != ""
  4812. !message LCG: Using TARGET to set LCG_TARGET and LCG_DEPEND
  4813. LCG_DEPEND=$(TARGET)
  4814. LCG_SOURCE=$(TARGET)
  4815. LCG_TARGET=$(OBJ_PATH)\$O\$(TARGETNAME).$(TARGETEXT).lcg
  4816.  
  4817. !endif
  4818.  
  4819.  
  4820. # If we have an LCG_SOURCE, add in any extra dependancies we can find
  4821. !if "$(LCG_SOURCE)" != ""
  4822.  
  4823. # If it exists, we have a dependency on the lci (dev supplied comments) file
  4824. !if exist($(LCI_DEPEND))
  4825. !message LCG: Adding LCI dependency: $(LCI_DEPEND)
  4826. LCG_DEPEND=$(LCG_DEPEND) $(LCI_DEPEND)
  4827. !endif
  4828.  
  4829. # If we are creating an LCE file, add a dependency on the lce (resource compiler extracted comments) file
  4830. !if "$(BUILD_LCE_FILE)" == "1"
  4831. !message LCG: Adding LCE dependency: $(LCE_FILE)
  4832. LCG_DEPEND=$(LCG_DEPEND) $(LCE_FILE)
  4833. LSBUILD_LCE_OPTION=/e:$(LCE_FILE)
  4834. !else
  4835. LSBUILD_LCE_OPTION=
  4836. !endif
  4837.  
  4838. !endif # LCG_SOURCE
  4839.  
  4840. !message LCG_SOURCE: $(LCG_SOURCE)
  4841. !message LCG_DEPEND: $(LCG_DEPEND)
  4842. !message LCG_TARGET: $(LCG_TARGET)
  4843.  
  4844. !endif # BUILD_LCG
  4845.  
  4846. !endif # DO_LSBUILD
  4847.  
  4848.  
  4849. # Support for localizing the file we just linked
  4850. LOCALIZE_BASE_FILE_CMD=
  4851.  
  4852. !if "$(LOCALIZE_BASE_FILE)" == "1"
  4853. ! if defined(DO_LSBUILD)
  4854.  
  4855. LOCALIZE_BASE_FILE_CMD=\
  4856. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  4857. /f:$@ \
  4858. /t:$(OBJ_PATH)\$O \
  4859. $(LSBUILD_PARSER_ID_OPTION) \
  4860. $(ALT_LCI_DIR_OPTION) \
  4861. /l:$(LANGUAGE) \
  4862. /s:$(LSBUILD_PARSER_SETTINGS) \
  4863. ! ifndef NO_BINPLACE
  4864. /r:$(LCG_BINPLACE_TARGET) \
  4865. ! endif # NO_BINPLACE
  4866. $(LSBUILD_LCE_OPTION)
  4867. ! endif # DO_LSBUILD
  4868.  
  4869. !endif # LOCALIZE_BASE_FILE
  4870.  
  4871.  
  4872. #
  4873. # End of Lsbuild.exe rules/definitions
  4874. #
  4875.  
  4876.  
  4877.  
  4878.  
  4879. !IF "$(NOLINK)" == "" || \
  4880. ("$(NOLINK)" != "" && !defined(PASS1_NOLIB) && ("$(TARGETTYPE)" == "LIBRARY" || \
  4881. ( ("$(TARGETTYPE)" == "DYNLINK" || \
  4882. "$(TARGETTYPE)" == "PROGLIB" || \
  4883. "$(TARGETTYPE)" == "EXPORT_DRIVER" || \
  4884. "$(TARGETTYPE)" == "HAL") && \
  4885. "$(MAKEDLL)" == "") \
  4886. ) \
  4887. )
  4888.  
  4889.  
  4890. ! IF "$(NOLINK)" != "" && "$(TARGET)" != ""
  4891. ! ifndef NO_DLL_EXPORTS
  4892. TARGETLIBFILES=$(TARGETLIBFILES) $(TARGETPATH)\$(TARGET_DIRECTORY)\$(TARGETNAME).lib
  4893. ! endif
  4894. ! ELSE
  4895. TARGETEXEFILES=$(TARGETEXEFILES) $(TARGET)
  4896. ! ENDIF
  4897.  
  4898. !ENDIF # NOLINK == "" || building .lib file for dll
  4899.  
  4900. !if "$(UMAPPL)" == ""
  4901. # Turn off UMEXEFILES/UMOBJFILES (handles case where it's conditional in sources file
  4902. # and build doesn't realize it when generating _objects.mac).
  4903. UMEXEFILES=
  4904. UMOBJFILES=
  4905. !endif
  4906.  
  4907. !IF defined(NTKERNEL)
  4908.  
  4909. TARGETOBJFILES=$(TARGETOBJFILES) $(OBJ_PATH)\$O\$(NTKERNEL).obj
  4910.  
  4911. ! IFNDEF NOLINK
  4912.  
  4913. TARGETEXEFILES=$(TARGETEXEFILES) $(OBJ_PATH)\$O\$(NTKERNEL).exe
  4914.  
  4915. ! ENDIF # NDEF NOLINK
  4916. !ENDIF # NTKERNEL
  4917.  
  4918. !IFDEF USE_LINT
  4919. ! IFNDEF LINT_OUTPUT
  4920. LINT_OUTPUT=$(TARGETNAME)
  4921. ! ENDIF
  4922. ! IFNDEF LINT_EXT
  4923. LINT_EXT=tmp
  4924. ! ENDIF
  4925. ! IF "$(LINT_TYPE)" == "all"
  4926. TARGETLOBFILES1=
  4927. TARGETLOBFILES2=$(OBJ_PATH)\$O\$(LINT_OUTPUT).$(LINT_EXT)
  4928. ! ELSEIF "$(LINT_TYPE)" == "lob"
  4929. TARGETLOBFILES1=$(TARGETOBJFILES:.obj=.lob)
  4930. TARGETLOBFILES2=
  4931. ! ELSE
  4932. TARGETLOBFILES1=
  4933. TARGETLOBFILES2=$(TARGETOBJFILES:.obj=.lob)
  4934. ! ENDIF
  4935. !ELSE
  4936. TARGETLOBFILES1=
  4937. TARGETLOBFILES2=
  4938. !ENDIF
  4939.  
  4940. #
  4941. # Define NT_UP as 0 in environment to turn on MP.
  4942. # If undefined or equal to 1, you get UP.
  4943. #
  4944.  
  4945. !IFNDEF NT_UP
  4946. NT_UP=1
  4947. !ENDIF
  4948.  
  4949. !IF "$(NT_UP)" == "0"
  4950. NT_UP_DEFINES=
  4951. !ELSE
  4952. NT_UP_DEFINES=/DNT_UP=1
  4953. !ENDIF
  4954.  
  4955. !IFNDEF NT_INST
  4956. NT_INST=0
  4957. !ENDIF
  4958.  
  4959. #
  4960. # User defined variables (environment variables or command line).
  4961. # A cpu specific definition will take precedence over the MSC definition.
  4962. #
  4963. # xxx_WARNING_LEVEL
  4964. # xxx_OPTIMIZATION
  4965. # xxx_CPPFLAGS
  4966. #
  4967.  
  4968. !IFNDEF MSC_WARNING_LEVEL
  4969. MSC_WARNING_LEVEL=/W3
  4970. !ENDIF
  4971.  
  4972. #
  4973. # End of user defined variables.
  4974. #
  4975.  
  4976. STD_DEFINES=/DCONDITION_HANDLING=1 $(NT_UP_DEFINES) \
  4977. /DNT_INST=$(NT_INST) $(WIN32_DEFINE) $(NT_PNP_POWER_DEFINES) \
  4978. $(NT_PNP_STUB_DEFINES)
  4979.  
  4980. !IFNDEF NOT_LEAN_AND_MEAN
  4981. STD_DEFINES = $(STD_DEFINES) /DWIN32_LEAN_AND_MEAN=1
  4982. !ENDIF
  4983.  
  4984. !if "$(NTDEBUG)" == "ntsd" || "$(NTDEBUG)" == "cvp" || "$(NTDEBUG)" == "sym"
  4985. TARGET_DBG_DEFINES= $(TARGET_DBG_DEFINES) /DDEVL=1 /DDBG=1
  4986. !else
  4987. TARGET_DBG_DEFINES= $(TARGET_DBG_DEFINES) /DDEVL=1
  4988. !endif
  4989.  
  4990. !if !defined(RESOURCE_ONLY_DLL) || \
  4991. ("$(NTDEBUG)" == "ntsd") || \
  4992. ("$(NTDEBUG)" == "ntsdnodbg") || \
  4993. ("$(NTDEBUG)" == "cvp") || \
  4994. ("$(NTDEBUG)" == "sym")
  4995. DBGFLAGS=/Zi
  4996. !else
  4997. DBGFLAGS=
  4998. !endif
  4999.  
  5000. !ifndef __BUILDMACHINE__
  5001. __BUILDMACHINE__=$(USERNAME: =)
  5002. !endif
  5003. !if exist ($(OBJECT_ROOT)\$O\__blddate__)
  5004. !include $(OBJECT_ROOT)\$O\__blddate__
  5005. !endif
  5006. TARGET_DBG_DEFINES=$(TARGET_DBG_DEFINES)\
  5007. !ifdef BUILDDATE
  5008. /D__BUILDDATE__=$(BUILDDATE)\
  5009. !endif
  5010. /D__BUILDMACHINE__=$(__BUILDMACHINE__)
  5011.  
  5012. !IF "$(PRECOMPILED_OPTION)" == ""
  5013. ! IF "$(PRECOMPILED_INCLUDE)" != ""
  5014. ! IF "$(PRECOMPILED_INCLUDE)" != "$(PRECOMPILED_INCLUDE:.hxx=)"
  5015. PRECOMPILED_CXX=1
  5016. ! ENDIF
  5017. ! IF "$(PRECOMPILED_INCLUDE)" != "$(PRECOMPILED_INCLUDE:.hpp=)"
  5018. PRECOMPILED_CXX=1
  5019. ! ENDIF
  5020. ! IF "$(PRECOMPILED_INCLUDE)" != "$(PRECOMPILED_INCLUDE:.cxx=)"
  5021. PRECOMPILED_CXX=1
  5022. ! ENDIF
  5023. ! IF "$(PRECOMPILED_INCLUDE)" != "$(PRECOMPILED_INCLUDE:.cpp=)"
  5024. PRECOMPILED_CXX=1
  5025. ! ENDIF
  5026. ! IF "$(PRECOMPILED_PCH)" == ""
  5027. PRECOMPILED_PCH=$(PRECOMPILED_INCLUDE_BASENAME:.hxx=.pch)
  5028. PRECOMPILED_PCH=$(PRECOMPILED_PCH:.hpp=.pch)
  5029. PRECOMPILED_PCH=$(PRECOMPILED_PCH:.h=.pch)
  5030. PRECOMPILED_PCH=$(PRECOMPILED_PCH:.cxx=.pch)
  5031. PRECOMPILED_PCH=$(PRECOMPILED_PCH:.cpp=.pch)
  5032. PRECOMPILED_PCH=$(PRECOMPILED_PCH:.c=.pch)
  5033. ! ENDIF
  5034. ! IF "$(PRECOMPILED_OBJ)" == ""
  5035. PRECOMPILED_OBJ=$(PRECOMPILED_PCH:.pch=.obj)
  5036. ! ENDIF
  5037. ! ENDIF
  5038. !ENDIF
  5039.  
  5040. !IF "$(PRECOMPILED_OPTION)" == ""
  5041. ! IF "$(PRECOMPILED_INCLUDE)" != ""
  5042. ! IF "$(PRECOMPILED_PCH)" != ""
  5043. ! if $(USE_OBJECT_ROOT)
  5044. HEADERFILE=/Fp$(OBJ_PATH)\$O\$(PRECOMPILED_PCH)
  5045. ! else
  5046. HEADERFILE=/Fp$O\$(PRECOMPILED_PCH)
  5047. ! endif
  5048. ! ENDIF
  5049. ! IF "$(PRECOMPILED_OBJ)" != ""
  5050. ! if $(USE_OBJECT_ROOT)
  5051. HEADEROBJNAME=$(OBJ_PATH)\$O\$(PRECOMPILED_OBJ)
  5052. ! else
  5053. HEADEROBJNAME=$O\$(PRECOMPILED_OBJ)
  5054. ! endif
  5055. HEADEROBJ=/Fo"$(HEADEROBJNAME)"
  5056. ! ENDIF
  5057.  
  5058. ! IF "$(PRECOMPILED_CXX)" == ""
  5059. PRECOMPILED=/Yu$(PRECOMPILED_INCLUDE_BASENAME) $(HEADERFILE)
  5060. PRECOMPILED_CXX=
  5061. ! ELSE
  5062. PRECOMPILED=
  5063. PRECOMPILED_CXX=/Yu$(PRECOMPILED_INCLUDE_BASENAME) $(HEADERFILE)
  5064. ! ENDIF
  5065. ! if $(USE_OBJECT_ROOT)
  5066. PRECOMPILED_TARGET=$(OBJ_PATH)\$O\$(PRECOMPILED_PCH)
  5067. ! else
  5068. PRECOMPILED_TARGET=$O\$(PRECOMPILED_PCH)
  5069. ! endif
  5070. ! ELSE
  5071. PRECOMPILED=
  5072. PRECOMPILED_CXX=
  5073. ! ENDIF
  5074. !ELSE
  5075. ! IF "$(PRECOMPILED_CXX)" == ""
  5076. PRECOMPILED=$(PRECOMPILED_OPTION)
  5077. PRECOMPILED_CXX=
  5078. ! ELSE
  5079. PRECOMPILED=
  5080. PRECOMPILED_CXX=$(PRECOMPILED_OPTION)
  5081. ! ENDIF
  5082. PRECOMPILED_TARGET=$(PRECOMPILED_TARGET)
  5083. ! IF "$(PRECOMPILED_TARGET)" != ""
  5084. HEADERFILE=/Fp$(PRECOMPILED_TARGET)
  5085. ! ENDIF
  5086. ! IF "$(PRECOMPILED_OBJ)" != ""
  5087. HEADEROBJNAME=$(PRECOMPILED_OBJ)
  5088. HEADEROBJ=/Fo$(HEADEROBJNAME)
  5089. ! ENDIF
  5090. !ENDIF
  5091.  
  5092. !IF "$(NTNOPCH)" != ""
  5093. # Need to do this conditionally. If the pch obj exists, it's likely existing files
  5094. # reference it (ie: this isn't a clean build). Keep the file ref but delete the
  5095. # pch stuff so links will work.
  5096. !ifdef HEADEROBJNAME
  5097. !if !exist($(HEADEROBJNAME))
  5098. HEADEROBJNAME=
  5099. HEADEROBJ=
  5100. PRECOMPILED_OBJ=
  5101. !if [del $(OBJ_PATH)\$O\_headerobjname.inc 2>nul]
  5102. !endif
  5103. !else
  5104. #
  5105. # Clearing PRECOMPILED_PCH below makes the delayed evaluation of HEADEROBJNAME
  5106. # be just objfre\i386\, which nmake complains it does not know how to make,
  5107. # and which causes stdinc.obj to not be put in the .lib.
  5108. #
  5109. # Force the evaluation of HEADEROBJNAME.
  5110. #
  5111. !if [-mkdir $(OBJ_PATH)\$O >nul 2>&1] && [echo HEADEROBJNAME=$(HEADEROBJNAME) > $(OBJ_PATH)\$O\_headerobjname.inc]
  5112. !endif
  5113. !endif
  5114. !endif
  5115. PRECOMPILED=
  5116. PRECOMPILED_CXX=
  5117. PRECOMPILED_INCLUDE=
  5118. PRECOMPILED_TARGET=
  5119. PRECOMPILED_PCH=
  5120. !if defined(HEADEROBJNAME) && exist($(OBJ_PATH)\$O\_headerobjname.inc)
  5121. !include $(OBJ_PATH)\$O\_headerobjname.inc
  5122. !endif
  5123. !ENDIF
  5124.  
  5125. !ifdef USECXX_FLAG
  5126. USECXX_FLAG=/TP
  5127. #!if "$(URT_VER)" >= "2"
  5128. # Why doesn't this work here?
  5129. # Every assignment to MANAGED_CXX_FLAGS precedes here (if that even matters).
  5130. #C_COMPILER_FLAGS_NOPCH=$(C_COMPILER_FLAGS_NOPCH) $(MANAGED_CXX_FLAGS)
  5131. #!endif
  5132. !endif
  5133.  
  5134. !IF ("$(PRECOMPILED_CXX)" == "") && ("$(USECXX_FLAG)" == "")
  5135. PRECOMPILED_FLAG=$(PRECOMPILED_FLAG) /Tc
  5136. !ELSE
  5137. PRECOMPILED_FLAG=$(PRECOMPILED_FLAG) /Tp
  5138. !ENDIF
  5139.  
  5140.  
  5141. #
  5142. # Set linker options
  5143. #
  5144.  
  5145. #
  5146. # Merge _PAGE with PAGE, _TEXT with .text, and make sure
  5147. # INIT sections are discardable
  5148. #
  5149.  
  5150. !ifdef LINKER_NOREF
  5151. LINK_REF_FLAG=/OPT:NOREF /OPT:NOICF
  5152. !else
  5153. ! ifdef LINKER_NOICF
  5154. LINK_REF_FLAG=/OPT:REF /OPT:NOICF
  5155. ! else
  5156. LINK_REF_FLAG=/OPT:REF /OPT:ICF
  5157. ! endif
  5158. !endif
  5159.  
  5160. !ifdef NOT_TERMINAL_SERVER_AWARE
  5161. TSLINKER_FLAG=
  5162. !else
  5163. ! if $(_NT_TOOLS_VERSION) >= 0x700
  5164. TSLINKER_FLAG=/tsaware
  5165. ! else
  5166. TSLINKER_FLAG=
  5167. ! endif
  5168. !endif
  5169.  
  5170. !if $(_NT_TOOLS_VERSION) >= 0x800
  5171. DYNAMICBASE_FLAG=/dynamicbase
  5172. !else
  5173. DYNAMICBASE_FLAG=
  5174. !endif
  5175.  
  5176. #
  5177. # warning LNK4010: invalid subsystem version number 4.00; default subsystem version assumed (\nt\sdktools\build)
  5178. # warning LNK4039: section 'INIT' specified with /SECTION option does not exist (\nt\sdktools\build)
  5179. # warning LNK4078: multiple 'INIT' sections found with different attributes (E2000020) (\nt\base\boot\bldr\daytona)
  5180. # warning LNK4070: /OUT: directive in .EXP differs from output filename ignoring directive (\nt\base\ntos\init\mp)
  5181. # warning LNK4221: no public symbols found; archive member will be inaccessible
  5182. #
  5183. DEFAULT_LINK_LIB_IGNORE=4010,4037,4039,4065,4070,4078,4087,4089,4221
  5184. !if "$(BUILD_PRODUCT)" == "NT" || defined(LINK_ALLOW_MISSING_BASE_ADDRESS)
  5185. # Missing base address not interesting for OS (entire product rebased at postbuild time)
  5186. DEFAULT_LINK_LIB_IGNORE=$(DEFAULT_LINK_LIB_IGNORE),4198
  5187. !endif
  5188.  
  5189. !ifdef LINK_LIB_IGNORE
  5190. LINK_LIB_IGNORE_FLAG=/IGNORE:$(LINK_LIB_IGNORE),$(DEFAULT_LINK_LIB_IGNORE)
  5191. !else
  5192. LINK_LIB_IGNORE_FLAG=/IGNORE:$(DEFAULT_LINK_LIB_IGNORE)
  5193. !endif
  5194.  
  5195. !IF $(IA64) || $(AMD64)
  5196. LINK_LIB_IGNORE_FLAG= $(LINK_LIB_IGNORE_FLAG),4108,4088,4218
  5197. !ENDIF
  5198.  
  5199. !if "$(TARGETTYPE)" == "DYNLINK" && defined(RESOURCE_ONLY_DLL)
  5200. # LNK6036, LNK1263, LNK1264 - Don't do LTCG or POGO on resource only dll.
  5201. FORCENATIVEOBJECT=1
  5202. !endif
  5203.  
  5204. !if defined(LINK_TIME_CODE_GENERATION) && !defined(FORCENATIVEOBJECT)
  5205. # 4218: non-native module found; restarting link with /LTCG
  5206. # 4235: /LTCG specified but no code generation required; remove /LTCG from the link command line to improve linker performance
  5207. LINK_LIB_IGNORE_FLAG= $(LINK_LIB_IGNORE_FLAG),4218,4235
  5208. !endif
  5209.  
  5210. !ifdef _UMAPPL_LINK_LIB_IGNORE_DUPLICATE_DOWNLEVEL_LIBC_OBJ_SPECIFIED_MORE_THAN_ONCE
  5211. LINK_LIB_IGNORE_FLAG=$(LINK_LIB_IGNORE_FLAG),4042
  5212. !endif
  5213.  
  5214. !ifdef LINK_NO_RELEASE
  5215. LINK_RELEASE=
  5216. !else
  5217. LINK_RELEASE=/release
  5218. !endif
  5219.  
  5220. !ifdef LARGE_ADDRESS_AWARE
  5221. LINKER_FLAGS = $(LINKER_FLAGS) /LARGEADDRESSAWARE
  5222. !endif
  5223.  
  5224. !ifdef DISABLE_HEAP_TERMINATE
  5225. ! if ("$(SUBSYSTEM_VERSIONX)" < "6.00")
  5226. !error DISABLE_HEAP_TERMINATE only relevent for V6 or higher apps
  5227. ! else
  5228. LINKER_FLAGS = $(LINKER_FLAGS) $(BASE_LIB_PATH)\HeapTerminateDisableV6.obj
  5229. ! endif
  5230. !endif
  5231.  
  5232. !ifdef USE_INCREMENTAL_LINKING
  5233. LINK_INCREMENTAL_FLAG = /OPT:NOREF \
  5234. $(LINK_LIB_IGNORE_FLAG)
  5235. !else
  5236. LINK_INCREMENTAL_FLAG = $(LINK_REF_FLAG) \
  5237. $(LINK_LIB_IGNORE_FLAG) \
  5238. /INCREMENTAL:NO \
  5239. $(LINK_RELEASE)
  5240. !endif
  5241.  
  5242. LINKER_FLAGS = $(LINKER_FLAGS) \
  5243. /MERGE:_PAGE=PAGE \
  5244. /MERGE:_TEXT=.text \
  5245. /SECTION:INIT,d \
  5246. $(LINK_INCREMENTAL_FLAG) \
  5247. /NODEFAULTLIB
  5248.  
  5249. LINKER_FLAGS=$(LINKER_FLAGS) $(LINKER_WX_SWITCH)
  5250.  
  5251. !ifdef LINK_DEBUG
  5252. !if "$(LINK_DEBUG)" == ""
  5253. LINK_DEBUG=/VERBOSE
  5254. !endif
  5255. LINKER_FLAGS=$(LINKER_FLAGS) $(LINK_DEBUG)
  5256. !endif
  5257.  
  5258.  
  5259. LINK_OS_VERSIONS = /version:$(LINKER_APP_VERSION) /osversion:$(LINKER_OS_VERSION)
  5260. LINKER_FLAGS = $(LINKER_FLAGS) $(LINKER_DBG_SECTION) $(LINK_OS_VERSIONS)
  5261. LIBRARIAN_FLAGS = $(LINK_LIB_IGNORE_FLAG) $(LIBRARIAN_FLAGS) $(LINKER_WX_SWITCH) /nodefaultlib
  5262. LIBRARIAN_FLAGS = $(LIBRARIAN_FLAGS) /machine:$(MACHINE_TYPE)
  5263.  
  5264. LINK_TIME_CODE_GENERATION_LIBRARIAN_FLAGS =
  5265. !if defined(LINK_TIME_CODE_GENERATION) && !defined(FORCENATIVEOBJECT)
  5266. LINK_TIME_CODE_GENERATION_LIBRARIAN_FLAGS = /ltcg
  5267. LIBRARIAN_FLAGS = $(LIBRARIAN_FLAGS) $(LINK_TIME_CODE_GENERATION_LIBRARIAN_FLAGS)
  5268. !endif
  5269.  
  5270. !ifdef DO_LANGUAGE_NEUTRAL
  5271. LANGUAGE_NEUTRAL_LINK_FLAG= /WX /noentry /NXCOMPAT /DYNAMICBASE /dll /nodefaultlib $(LINK_OS_VERSIONS) /machine:$(MACHINE_TYPE)
  5272. ! ifdef LARGE_ADDRESS_AWARE
  5273. LANGUAGE_NEUTRAL_LINK_FLAG = $(LANGUAGE_NEUTRAL_LINK_FLAG) /LARGEADDRESSAWARE
  5274. ! endif
  5275. !else
  5276. LANGUAGE_NEUTRAL_LINK_FLAG=
  5277. !endif
  5278.  
  5279. !ifndef LIB_NAME
  5280. LIB_NAME=$(LINK_NAME) /lib
  5281. !endif
  5282.  
  5283. LIBRARIAN=$(LIB_NAME) /out:$@ $(LIBRARIAN_FLAGS)
  5284.  
  5285. !ifndef LINK_NAME
  5286. ! ifdef SUBSTITUTE_LINK
  5287. LINK_NAME=$(SUBSTITUTE_LINK)
  5288. ! else
  5289. LINK_NAME=link.exe
  5290. ! endif
  5291. !endif
  5292.  
  5293. LINKER=$(LINK_NAME) /out:$@ /machine:$(MACHINE_TYPE)
  5294.  
  5295. #
  5296. # SXS_PDB_NAMER is a file built in the obj directory, containing a /pdb flag for LINKER
  5297. # eg: /pdb:obj\i386\MicrosoftWindowsGdiPlus-1.0.3790.127-gdiplus.pdb
  5298. # The pdb file name is derived from ntverp.h, $O, $(SXS_PDB_WOW6432_W_PREFIX)
  5299. # $(SXS_ASSEMBLY_NAME) and $(TARGETNAME)
  5300. # SXS_PDB_NAMER is not always used, but is always built if SXS_MANIFEST_OBJ1 is built.
  5301. #
  5302. _LINKER=$(LINK_NAME) /out:$@ \
  5303. !ifdef SXS_PDB_NAMER
  5304. @$(SXS_PDB_NAMER) \
  5305. !endif
  5306. /machine:$(MACHINE_TYPE)
  5307.  
  5308. !if defined(NTPROFILEINPUT) && ("$(TARGETTYPE)" == "LIBRARY")
  5309. ! message NTPROFILEINPUT should be removed in: $(MAKEDIR).
  5310. !endif
  5311.  
  5312. !IF defined(NTPROFILEINPUT) || defined(EXEPROFILEINPUT)
  5313. ORDER=-order:@$(@B).prf
  5314. !ENDIF
  5315.  
  5316. !IFDEF DLLORDER
  5317. ORDER=-order:@$(DLLORDER)
  5318. !ENDIF
  5319.  
  5320. !if "$(SUBSYSTEM_NATVER)" < "5.02"
  5321. ! ifndef DRIVER_ALIGNMENT
  5322. DRIVER_ALIGNMENT=0x80
  5323. ! endif
  5324. ! ifndef HAL_ALIGNMENT
  5325. HAL_ALIGNMENT=0x80
  5326. ! endif
  5327. ! ifndef KERNEL_ALIGNMENT
  5328. KERNEL_ALIGNMENT=0x80
  5329. ! endif
  5330. !endif
  5331.  
  5332. !if $(AMD64)
  5333. !ifdef DRIVER_ALIGNMENT
  5334. DRIVER_ALIGN_SWITCH=/align:$(DRIVER_ALIGNMENT)
  5335. !endif
  5336. !ifdef HAL_ALIGNMENT
  5337. HAL_ALIGN_SWITCH=/align:$(HAL_ALIGNMENT)
  5338. !endif
  5339. !ifdef KERNEL_ALIGNMENT
  5340. KERNEL_ALIGN_SWITCH=/align:$(KERNEL_ALIGNMENT)
  5341. !endif
  5342. !else
  5343. !ifdef DRIVER_ALIGNMENT
  5344. DRIVER_ALIGN_SWITCH=/align:$(DRIVER_ALIGNMENT) /stub:$(SDK_LIB_DEST)\stub512.com
  5345. !endif
  5346. !ifdef HAL_ALIGNMENT
  5347. HAL_ALIGN_SWITCH=/align:$(HAL_ALIGNMENT) /stub:$(SDK_LIB_DEST)\stub512.com
  5348. !endif
  5349. !ifdef KERNEL_ALIGNMENT
  5350. KERNEL_ALIGN_SWITCH=/align:$(KERNEL_ALIGNMENT) /stub:$(SDK_LIB_DEST)\stub512.com
  5351. !endif
  5352. !endif
  5353.  
  5354. #
  5355. # [GorN] 3/30/2000
  5356. #
  5357. # WPP section (WMI tracing preprocessor)
  5358. #
  5359. # env. vars:
  5360. #
  5361. # RUN_WPP=list of files to run wpp on
  5362. # WPP_REVISION=override default revision
  5363. #
  5364.  
  5365.  
  5366. !ifndef WPP_REVISION
  5367. WPP_REVISION=rev1
  5368. !endif
  5369.  
  5370. !ifndef WPP_NAME
  5371. WPP_NAME=tracewpp
  5372. !endif
  5373.  
  5374. !if $(ANSI_ANNOTATION)
  5375. WPP_MAKEFILE_FLAGS=/DWPP_ANSI_ANNOTATION
  5376. !endif
  5377.  
  5378. !ifdef RUN_WPP
  5379. RUN_WPP=$(WPP_MAKEFILE_FLAGS) -cfgdir:$(WPP_CONFIG_PATH)\$(WPP_REVISION) -odir:$(OBJ_PATH)\$O $(RUN_WPP)
  5380.  
  5381.  
  5382. # execute wpp now
  5383.  
  5384. ! if [-$(WPP_NAME) $(RUN_WPP)]
  5385. ! endif
  5386.  
  5387. ! if exist(obj\_tracewpp.mac)
  5388. ! include obj\_tracewpp.mac
  5389. WPP_TARGETS=$(WPP_EXTRA_TARGETS)
  5390. ! endif
  5391. BINPLACE_FLAGS = $(BINPLACE_FLAGS) /:TMF
  5392. C_DEFINES=$(C_DEFINES) /DRUN_WPP
  5393. !else
  5394. WPP_TARGETS=
  5395. !endif
  5396.  
  5397. !ifdef USE_LINT
  5398. LINT_DEFS=$(CDEFINES:-D=-d)
  5399. LINT_DEFINES=$(LINT_DEFS:/D=-d)
  5400. ! ifndef LINT_PATH
  5401. LINT_PATH=$(BASEDIR)\lint
  5402. ! endif
  5403. ! ifndef LINT_APP
  5404. LINT_APP=$(LINT_PATH)\lint-nt
  5405. ! endif
  5406. !ifndef LINT_OPTS
  5407. LINT_OPTS=+v -zero
  5408. !endif
  5409. ! if "$(LINT_TYPE)" == "all"
  5410. ! ifndef LINT_ALL_CMD
  5411. LINT_ALL_CMD=$(LINT_APP) $(LINT_OPTS) $(LINT_INCLUDES) $(LINT_DEFINES) $(LINT_FORCEDINCS) -i$(LINT_PATH)\ std.lnt -os($(OBJ_PATH)\$O\$(LINT_OUTPUT).$(LINT_EXT))
  5412. ! endif
  5413. ! else
  5414. ! if "$(LINT_TYPE)" == "lob"
  5415. ! ifndef LINT_CMD
  5416. LINT_CMD=$(LINT_APP) -u $(LINT_OPTS) $(LINT_INCLUDES) $(LINT_DEFINES) $(LINT_FORCEDINCS) -i$(LINT_PATH)\ std.lnt +os($(OBJ_PATH)\$O\$(LINT_OUTPUT).$(LINT_EXT)) -oo($@)
  5417. ! endif
  5418. ! ifndef LINT_CMD2
  5419. LINT_CMD2=$(LINT_APP) $(LINT_OPTS) -i$(LINT_PATH)\ std.lnt +os($(OBJ_PATH)\$O\$(LINT_OUTPUT).$(LINT_EXT)) $(OBJ_PATH)\$O\*.lob
  5420. ! endif
  5421. ! else
  5422. ! ifndef LINT_CMD
  5423. LINT_CMD=$(LINT_APP) $(LINT_OPTS) $(LINT_INCLUDES) $(LINT_DEFINES) $(LINT_FORCEDINCS) -i$(LINT_PATH)\ std.lnt +os($(OBJ_PATH)\$O\$(LINT_OUTPUT).$(LINT_EXT))
  5424. ! endif
  5425. ! endif
  5426. ! endif
  5427. !else
  5428. LINT_CMD2=
  5429. !endif
  5430.  
  5431. !ifndef LINT_CMD2
  5432. LINT_CMD2=
  5433. !endif
  5434.  
  5435. #
  5436. # Standard inference rules for C files that produce object files.
  5437. #
  5438.  
  5439. .SUFFIXES:
  5440. .SUFFIXES: .asm .asmx .c .class .cs .cpp .cxx .exe .f .java .obj .odl .p .rc .rcpp .res .resx .resz .resources .s .sdl .tdl .thk .txt .vb
  5441.  
  5442. #
  5443. # Processor specific control and options.
  5444. #
  5445.  
  5446. #
  5447. # cl.exe now defaults to /GS, so BO_FLAGS must explicitly default to /GS-
  5448. #
  5449. BO_FLAGS=/GS-
  5450.  
  5451. DRIVER_ENTRY=DriverEntry
  5452. GDI_DRIVER_ENTRY=DrvEnableDriver
  5453.  
  5454. !if defined(KMDF_VERSION_MAJOR)
  5455. BUFFER_OVERFLOW_CHECKS=1
  5456. !endif
  5457.  
  5458.  
  5459. !if ("$(TARGETPATH)" == "obj" \
  5460. || "$(TARGETPATH)" == "$(_OBJ_DIR)" \
  5461. || "$(TARGETPATH)" == "$(OBJ_PATH)\$(_OBJ_DIR)" \
  5462. ) \
  5463. && "$(TARGETTYPE)" != "LIBRARY" \
  5464. && "$(TARGETTYPE)" != "NOTARGET" \
  5465. && !defined(PASS1_PUBLISH) \
  5466. && !defined(PRECOMPILED_OPTION) \
  5467. && !defined(USE_PDB_TO_COMPILE) \
  5468. && "$(POGO_INSTRUMENT)" != "1"
  5469. USE_PDB_TO_COMPILE=1
  5470. !endif
  5471.  
  5472. !if defined(USE_PDB_TO_COMPILE) && "$(USE_PDB_TO_COMPILE)" != "0" && "$(USE_PDB_TO_COMPILE)" != "1"
  5473. ! error USE_PDB_TO_COMPILE must be 0 or 1 or not defined.
  5474. !endif
  5475.  
  5476. !endif # PASS_INDEPENDENT_TARGETS
  5477.  
  5478. !include $(NTMAKEENV)\$(TARGET_DIRECTORY)mk.inc
  5479.  
  5480. !ifndef PASS_INDEPENDENT_TARGETS
  5481.  
  5482. #
  5483. # Make nmake output much more readable.
  5484. # Convert runs of spaces to a single space and then spaces to space-newline-space.
  5485. # Build.exe needs a space after a tool name in its filtering.
  5486. #
  5487.  
  5488. MANAGED_CODE_BUILD_CMD2=$(MANAGED_CODE_BUILD_CMD2: = )
  5489. MANAGED_CODE_BUILD_CMD2=$(MANAGED_CODE_BUILD_CMD2: = )
  5490. MANAGED_CODE_BUILD_CMD2=$(MANAGED_CODE_BUILD_CMD2: = )
  5491. MANAGED_CODE_BUILD_CMD2=$(MANAGED_CODE_BUILD_CMD2: = ^
  5492. )
  5493. ECHO_PRECOMPILED_MSG1=$(ECHO_PRECOMPILED_MSG1: = )
  5494. ECHO_PRECOMPILED_MSG1=$(ECHO_PRECOMPILED_MSG1: = )
  5495. ECHO_PRECOMPILED_MSG1=$(ECHO_PRECOMPILED_MSG1: = )
  5496. ECHO_PRECOMPILED_MSG2=$(ECHO_PRECOMPILED_MSG2: = )
  5497. ECHO_PRECOMPILED_MSG2=$(ECHO_PRECOMPILED_MSG2: = )
  5498. ECHO_PRECOMPILED_MSG2=$(ECHO_PRECOMPILED_MSG2: = )
  5499. ECHO_CXX_MSG=$(ECHO_CXX_MSG: = )
  5500. ECHO_CXX_MSG=$(ECHO_CXX_MSG: = )
  5501. ECHO_CXX_MSG=$(ECHO_CXX_MSG: = )
  5502. ECHO_CXX_MSG=$(ECHO_CXX_MSG: = ^
  5503. )
  5504. ECHO_MSG=$(ECHO_MSG: = )
  5505. ECHO_MSG=$(ECHO_MSG: = )
  5506. ECHO_MSG=$(ECHO_MSG: = )
  5507. ECHO_MSG=$(ECHO_MSG: = ^
  5508. )
  5509.  
  5510. #
  5511. # This is a little inelegant but it saves us from having to duplicate logic over and over in *mk.inc.
  5512. # The one downside is that the user cannot write a pure function named _DllMainCRTStartupForGS
  5513. # and use that as the entry point.
  5514. #
  5515. # One advantage is that, for example, we don't have to be embedded in all the UMTYPE checking.
  5516. # We handle all UMTYPEs.
  5517. #
  5518. # TBD -- unfactor *mk.inc into common code in makefile.def.
  5519. #
  5520. ! ifdef MANAGED_CXX
  5521.  
  5522. ! ifdef MCPP_TYPE
  5523. ! undef BO_LIB
  5524. ! if "$(DLLENTRY)" == "-entry:_DllMainCRTStartupForGS" \
  5525. || "$(DLLENTRY)" == "/entry:_DllMainCRTStartupForGS" \
  5526. || "$(DLLENTRY)" == "-entry:_DllMainCRTStartupForGS@12" \
  5527. || "$(DLLENTRY)" == "/entry:_DllMainCRTStartupForGS@12" \
  5528. || "$(DLLENTRY)" == "/entry:_DllMainCRTStartup" \
  5529. || "$(DLLENTRY)" == "-entry:_DllMainCRTStartup" \
  5530. || "$(DLLENTRY)" == "/entry:_DllMainCRTStartup@12" \
  5531. || "$(DLLENTRY)" == "-entry:_DllMainCRTStartup@12"
  5532. DLLENTRY=/noentry
  5533. ! endif
  5534. ! endif # MCPP_TYPE
  5535.  
  5536. ! if "$(URT_VER)" < "2.0"
  5537. #
  5538. # linker warning -- "DLL containing objects compiled with /clr is not linked with /NOENTRY; image may not run correctly"
  5539. #
  5540. ! if "$(DLLENTRY)" == "-entry:_DllMainCRTStartupForGS@12" \
  5541. || "$(DLLENTRY)" == "/entry:_DllMainCRTStartupForGS@12"
  5542. DLLENTRY=/noentry
  5543. ! else
  5544. #
  5545. # TBD -- is there a better fix? Investigate Server SP1.
  5546. #
  5547. LINKER_FLAGS=$(LINKER_FLAGS) /ignore:4243
  5548. ! endif
  5549. USER_C_FLAGS=$(USER_C_FLAGS) /d1PrivateNativeTypes
  5550. ! endif # 1.1
  5551. ! endif # MANAGED_CXX
  5552.  
  5553.  
  5554. # SUBSTITUTE_CS_COMPILER_NAME is currently used by OACR via razzle.cmd
  5555. CS_COMPILER_NAME=\
  5556. !ifdef SUBSTITUTE_CS_COMPILER_NAME
  5557. $(SUBSTITUTE_CS_COMPILER_NAME) \
  5558. !else
  5559. csc.exe \
  5560. !endif
  5561. /nologo /nostdlib /r:$(CLR_REF_PATH)\mscorlib.dll
  5562.  
  5563. # provide for future use of an alternate VB compiler location
  5564. VB_NET_COMPILER_NAME=\
  5565. !ifdef SUBSTITUTE_VB_COMPILER_NAME
  5566. $(SUBSTITUTE_VB_COMPILER_NAME) \
  5567. !else
  5568. vbc.exe \
  5569. !endif
  5570. /nologo
  5571.  
  5572. # UNDONE -- need to see what mscorlib.dll vbc uses, probably the wrong one, and fix it
  5573.  
  5574. ! if "$(UNSAFE_CODE_SWITCH)" == ""
  5575. ! if defined(_VB)
  5576. UNSAFE_CODE_SWITCH=
  5577. ! else
  5578. ! if "$(UNSAFE_CODE)" == "1"
  5579. UNSAFE_CODE_SWITCH=/unsafe+
  5580. ! else
  5581. UNSAFE_CODE_SWITCH=/unsafe-
  5582. ! endif
  5583. ! endif
  5584. ! endif
  5585.  
  5586. MANAGED_STD_FLAGS = $(MANAGED_DBG_FLAGS) /warnaserror+ $(UNSAFE_CODE_SWITCH)
  5587.  
  5588. ! if defined(_VB)
  5589. MANAGED_STD_FLAGS = $(MANAGED_STD_FLAGS) $(USER_VB_NET_FLAGS)
  5590. ! else
  5591. MANAGED_STD_FLAGS = $(MANAGED_STD_FLAGS) $(USER_CS_FLAGS)
  5592. ! endif
  5593.  
  5594. ! ifdef PERF_INSTRUMENTATION
  5595. MANAGED_STD_FLAGS=$(MANAGED_STD_FLAGS) /define:PROFILE
  5596. ! endif
  5597.  
  5598.  
  5599. ! ifndef LINKER_STACKSIZE
  5600. ! ifdef LINKER_STACKCOMMITSIZE
  5601. LINKER_STACKSIZE = /STACK:$(DEFAULT_STACKRESERVE),$(LINKER_STACKCOMMITSIZE)
  5602. ! else
  5603. LINKER_STACKSIZE = /STACK:$(DEFAULT_STACKRESERVE),$(DEFAULT_STACKCOMMIT)
  5604. ! endif
  5605. ! endif
  5606.  
  5607. ! if defined(KMDF_VERSION_MAJOR)
  5608. DRIVER_ENTRY=FxDriverEntry
  5609. ! endif
  5610.  
  5611.  
  5612. LINKER_STACKSIZE_DLL=/STACK:0x40000,0x1000
  5613.  
  5614.  
  5615. LIBRARY_OBJS=$(IMPLIB_OBJS) $(MFC_STATIC_LIB) \
  5616. !if $(USE_DLLDEF_OBJECTS)
  5617. $(DLLDEF_OBJECTS) \
  5618. !else
  5619. $(LINKLIBS) \
  5620. !endif
  5621. $(OBJECTS)
  5622.  
  5623. ! if "$(TARGETTYPE)" != "DRIVER" && \
  5624. "$(TARGETTYPE)" != "EXPORT_DRIVER" && \
  5625. "$(TARGETTYPE)" != "MINIPORT" && \
  5626. "$(TARGETTYPE)" != "GDI_DRIVER" && \
  5627. !defined(NO_RDATA_MERGE)
  5628. LINKER_FLAGS = $(LINKER_FLAGS) /merge:.rdata=.text
  5629. ! endif
  5630.  
  5631. LINKER_FLAGS=$(LINKER_FLAGS) /pdbcompress
  5632.  
  5633. !if "$(DELAYLOAD)" != ""
  5634.  
  5635. #
  5636. # Temporary change to remap API sets that they can be delay loaded using a friendly name.
  5637. #
  5638.  
  5639. DELAYLOAD=$(DELAYLOAD:L=l)
  5640. DELAYLOAD=$(DELAYLOAD:S=s)
  5641. DELAYLOAD=$(DELAYLOAD:A=a)
  5642. DELAYLOAD=$(DELAYLOAD:O=o)
  5643. DELAYLOAD=$(DELAYLOAD:K=k)
  5644. DELAYLOAD=$(DELAYLOAD:U=u)
  5645. DELAYLOAD=$(DELAYLOAD:P=p)
  5646.  
  5647. DELAYLOAD=$(DELAYLOAD:D=d)
  5648. DELAYLOAD=$(DELAYLOAD:B=b)
  5649. DELAYLOAD=$(DELAYLOAD:E=e)
  5650.  
  5651. DELAYLOAD=$(DELAYLOAD:W=w)
  5652. DELAYLOAD=$(DELAYLOAD:I=i)
  5653. DELAYLOAD=$(DELAYLOAD:N=n)
  5654. DELAYLOAD=$(DELAYLOAD:V=v)
  5655. DELAYLOAD=$(DELAYLOAD:C=c)
  5656.  
  5657. DELAYLOAD=$(DELAYLOAD:G=g)
  5658. DELAYLOAD=$(DELAYLOAD:M=m)
  5659. DELAYLOAD=$(DELAYLOAD:R=r)
  5660. DELAYLOAD=$(DELAYLOAD:T=t)
  5661. DELAYLOAD=$(DELAYLOAD:Y=y)
  5662.  
  5663. ! if ("$(DELAYLOAD:lsalookup=)" != "$(DELAYLOAD)") \
  5664. || ("$(DELAYLOAD:sddlbase=)" != "$(DELAYLOAD)") \
  5665. || ("$(DELAYLOAD:api-ms-win-service-winsvc=)" != "$(DELAYLOAD)") \
  5666. || ("$(DELAYLOAD:api-ms-win-service-core=)" != "$(DELAYLOAD)") \
  5667. || ("$(DELAYLOAD:api-ms-win-service-management=)" != "$(DELAYLOAD)") \
  5668.  
  5669. DELAYLOAD=$(DELAYLOAD:lsalookup=api-ms-win-security-lsalookup-l1-1-0)
  5670. DELAYLOAD=$(DELAYLOAD:sddlbase=api-ms-win-security-sddl-l1-1-0)
  5671. DELAYLOAD=$(DELAYLOAD:api-ms-win-service-core-l1.=api-ms-win-service-core-l1-1-0.)
  5672. DELAYLOAD=$(DELAYLOAD:api-ms-win-service-management-l1.=api-ms-win-service-management-l1-1-0.)
  5673. DELAYLOAD=$(DELAYLOAD:api-ms-win-service-management-l2.=api-ms-win-service-management-l2-1-0.)
  5674. DELAYLOAD=$(DELAYLOAD:api-ms-win-service-winsvc-l1.=api-ms-win-service-winsvc-l1-1-0.)
  5675.  
  5676. ! endif
  5677. !endif
  5678.  
  5679. ! if "$(DELAYLOAD)" != ""
  5680. ! if "$(DLOAD_ERROR_HANDLER)" != ""
  5681. ! if "$(DLOAD_ERROR_HANDLER)" == "kernelbase" || \
  5682. "$(DLOAD_ERROR_HANDLER)" == "kernelbase.dll" || \
  5683. "$(DLOAD_ERROR_HANDLER)" == "kernel32" || \
  5684. "$(DLOAD_ERROR_HANDLER)" == "kernel32.dll" || \
  5685. "$(DLOAD_ERROR_HANDLER)" == "kernel32pub"
  5686. CRTLIBS=$(CRTLIBS) $(MINWIN_PRIV_SDK_LIB_PATH)\kernelbasedloadhandler.lib
  5687. ! if "$(DLOAD_ERROR_HANDLER)" == "kernelbase" || \
  5688. "$(DLOAD_ERROR_HANDLER)" == "kernelbase.dll"
  5689. TARGETLIBS = $(TARGETLIBS) $(MINWIN_PRIV_SDK_LIB_PATH)\api-ms-win-core-delayload-l1.lib
  5690. ! elseif "$(DLOAD_ERROR_HANDLER)" == "kernel32pub"
  5691. TARGETLIBS = $(TARGETLIBS) $(SDK_LIB_PATH)\kernel32.lib
  5692. ! else
  5693. TARGETLIBS = $(TARGETLIBS) $(SDK_LIB_PATH)\kernl32p.lib
  5694. ! endif
  5695. ! if "$(BUILD_MINWIN)" == "1"
  5696. _CHECK_DELAYLOAD_COMMAND=-check_delayload $@ minwin
  5697. ! else
  5698. _CHECK_DELAYLOAD_COMMAND=-check_delayload $@
  5699. ! endif
  5700. ! else
  5701. CRTLIBS=$(CRTLIBS) $(CRT_LIB_PATH)\delayimp.lib
  5702. ! if "$(DLOAD_FORCE_ERROR_CHECK)" != ""
  5703. _CHECK_DELAYLOAD_COMMAND=-check_delayload $@
  5704. ! endif
  5705. ! endif
  5706. ! if "$(_BUILDOPT)" == "no opt"
  5707. _CHECK_DELAYLOAD_COMMAND=@echo skipping check_delayload $(@F) due to no_opt.
  5708. ! endif
  5709. ! else
  5710. ! message BUILDMSG: Warning: DLOAD_ERROR_HANDLER not specified in $(MAKEDIR)
  5711. ! endif
  5712. DELAYLOAD = $(DELAYLOAD: =)
  5713. DELAYLOAD_FLAGS = /delayload:$(DELAYLOAD:;= /delayload:)
  5714. ! ifdef DELAYLOAD_UNLOAD_SUPPORT
  5715. DELAYLOAD_FLAGS = $(DELAYLOAD_FLAGS) /delay:unload
  5716. ! endif
  5717. LINKER_FLAGS = $(LINKER_FLAGS) $(DELAYLOAD_FLAGS)
  5718. ! endif
  5719.  
  5720. #
  5721. # Clear the suffixes list so we can ensure only pass zero stuff will be built
  5722. #
  5723. ! IFDEF PASS0ONLY
  5724. .SUFFIXES:
  5725. ! ENDIF
  5726.  
  5727.  
  5728. DRIVER_SWITCH = /driver
  5729.  
  5730. ! if "$(DRIVERTYPE)" == "wdm" || "$(DRIVERTYPE)" == "WDM"
  5731. DRIVER_SWITCH = $(DRIVER_SWITCH) /driver:wdm
  5732. ! else if "$(DRIVERTYPE)" == "VXD"
  5733. DRIVER_SWITCH = /vxd $(SDK_LIB_DEST)\i386\vxdwraps.clb
  5734. ! endif
  5735.  
  5736. ! ifdef BINARY_PUBLISH_DIR
  5737. ! ifndef BINARY_PUBLISH_FILES
  5738. ! error Must define BINARY_PUBLISH_FILES if defining BINARY_PUBLISH_DIR
  5739. ! endif
  5740. BINARY_PUBLISH_ROOT=$(BASEDIR)\$(_PROJECT_)\$(PROJECT_BINDROP_DIR)
  5741. BINARY_PUBLISH_ROOT=$(BINARY_PUBLISH_ROOT)\$(BINARY_PUBLISH_DIR)
  5742. BINARY_PUBLISH_ROOT=$(BINARY_PUBLISH_ROOT)\$(TARGET_DIRECTORY)\$(BUILD_TYPE)
  5743. ! endif
  5744.  
  5745. !endif # PASS_INDEPENDENT_TARGETS
  5746.  
  5747. !if defined(BINARY_PUBLISH) || defined(BINARY_PUBLISH_DIR) || !defined(_NTTREE)
  5748.  
  5749. #
  5750. # since we're generating binary drops of this source there's no need to
  5751. # binplace the files. The files should be binplaced from the binary_release
  5752. # directory.
  5753. #
  5754.  
  5755. NO_BINPLACE=1
  5756.  
  5757. !endif
  5758.  
  5759. !ifdef NO_BINPLACE
  5760.  
  5761. BINPLACE_CMD=@echo Skip Binplace:
  5762. BINPLACE_TOOL=$(BINPLACE_CMD)
  5763. BINPLACE_FLAGS=
  5764.  
  5765. !else
  5766.  
  5767.  
  5768. ! ifndef BINPLACE_PLACEFILE
  5769. ! ifdef BINPLACE_GENERATE_PLACEFILE
  5770. BINPLACE_PLACEFILE = $(OBJ_PATH)\$O\placefil.txt
  5771. ! elseif "$(BUILD_PRODUCT)" == "IE"
  5772. BINPLACE_PLACEFILE = $(BINPLACE_PLACEFILE_DIR)\ieplace.txt
  5773. ! endif
  5774. ! endif
  5775.  
  5776. #
  5777. # Sidebyside binplacing can be made simpler.
  5778. # In particular, move the code into build.exe and have it output what is necessary to _objects.mac.
  5779. # Idtool.exe may also suffice.
  5780. # No generated placefile is necessary.
  5781. # When this was originally written, /:DEST was not known and modifying build.exe was avoided.
  5782. #
  5783. ! ifdef BINPLACE_GENERATE_PLACEFILE
  5784. MAKE_PLACEFILE_CMD=for %i in ($(SXS_MISCFILES) $(TARGET)) do echo %~nxi $(BINPLACE_DESTINATIONS) >> $(BINPLACE_PLACEFILE)
  5785. ! if defined(SXS_LOG_PASS) && defined(SXS_ASSEMBLY_NAME) && "$(TARGETTYPE)" != "NOTARGET"
  5786. MAKE_PLACEFILE_CMD=( $(MAKE_PLACEFILE_CMD) ) && ( for /f "delims=:" %i in ('echo $(BINPLACE_DESTINATIONS_NORETAIL)') do for %j in ($(TARGET)) do echo %i\%~nxj | $(APPEND_TOOL) -file $(BINPLACE_LOG)\..\symbolcd_cablists_asms_$(COMPUTERNAME).lst - )
  5787. ! endif
  5788. ! ifdef BINPLACE_ADDITIONAL_PLACEFILES
  5789. #
  5790. # BINPLACE_ADDITIONAL_PLACEFILES is a semicolon delimited list of additional placefiles.
  5791. # The last parameter is the output (which we also use as an input, so we repeat it).
  5792. #
  5793. MAKE_PLACEFILE_CMD=( $(MAKE_PLACEFILE_CMD) ) && ( merge_placefiles.exe $(BINPLACE_ADDITIONAL_PLACEFILES:;= ) $(BINPLACE_PLACEFILE) $(BINPLACE_PLACEFILE) )
  5794. ! endif
  5795. ! endif
  5796.  
  5797. BINPLACE_FLAGS = /:NOCV $(BINPLACE_FLAGS) $(SXS_BINPLACE_FLAGS)
  5798.  
  5799. !ifdef BINPLACE_PLACEFILE
  5800. BINPLACE_FLAGS = /P $(BINPLACE_PLACEFILE) $(BINPLACE_FLAGS)
  5801. !endif
  5802.  
  5803. !ifdef BUILD_NO_SYMCHK
  5804. # BUILD_NO_SYMCHK is the older version of BINPLACE_NO_SYMCHK.
  5805. # Do a mapping of the old to the new until all of the SOURCES
  5806. # files are converted.
  5807. BINPLACE_NO_SYMCHK=1
  5808. !endif
  5809.  
  5810. !ifndef BINPLACE_NO_SYMCHK
  5811. ! ifndef BINPLACE_ALLOW_DBG
  5812. BINPLACE_FLAGS = /:DBG $(BINPLACE_FLAGS)
  5813. ! endif
  5814. BINPLACE_FLAGS = /j $(BINPLACE_FLAGS)
  5815. !else
  5816. # BINPLACE_NO_SYMCHK implies BINPLACE_ALLOW_DBG. This shouldn't really
  5817. # be needed, but guard against future changes which may explicitly check
  5818. # for BINPLACE_ALLOW_DBG.
  5819. BINPLACE_ALLOW_DBG=1
  5820. !endif
  5821.  
  5822. # If NTDBGFILES is defined then use binplace to split the symbols.
  5823. # Define BINPLACE flags as needed if separate .DBG file requested.
  5824.  
  5825. ! IFDEF NTDBGFILES
  5826. ! ifdef NTDBGFILES_PRIVATE
  5827. BINPLACE_DBGFLAGS_NT = $(BINPLACE_DBGFLAGS_NT) /s $(_NTTREE)\Symbols.pri\$(ALT_PROJECT_TARGET)
  5828. ! endif
  5829. ! else
  5830. BINPLACE_DBGFLAGS_NT=
  5831. ! ENDIF
  5832.  
  5833. ! if "$(VERIFY_LC)" == "1"
  5834. ! ifndef LC_PATH
  5835. LC_PATH=.
  5836. ! endif
  5837. BINPLACE_LC_FLAGS = /G $(LC_PATH)\$(@F).lc
  5838. BINPLACE_LC_MISCFLAGS = /G $(LC_PATH)\$(**F).lc
  5839. ! else
  5840. BINPLACE_LC_FLAGS=
  5841. BINPLACE_LC_MISCFLAGS=
  5842. ! endif
  5843.  
  5844. BINPLACE_FLAGS=/R $(_NTTREE)\$(ALT_PROJECT_TARGET) $(BINPLACE_DBGFLAGS_NT) $(BINPLACE_FLAGS)
  5845.  
  5846. ! ifdef LANGUAGE_NEUTRAL_STS
  5847. ! if "$(LANGUAGE_NEUTRAL_STS)" == "LGNSTS_MUIOFF"
  5848. LANGUAGE_NEUTRAL_STATUS_CMD=\
  5849. if not exist [email protected] ( \
  5850. if not exist [email protected] ( \
  5851. echo Build_Status LN_MUI_STS: $(LANGUAGE_NEUTRAL_STS) $(@F) && \
  5852. echo Build_Status MUI_COMMENT: $(MUI_COMMENT) $(@F) \
  5853. ) \
  5854. )
  5855. ! else
  5856. LANGUAGE_NEUTRAL_STATUS_CMD=\
  5857. if not exist [email protected] ( \
  5858. if not exist [email protected] ( \
  5859. echo Build_Status LN_MUI_STS: $(LANGUAGE_NEUTRAL_STS) $(@F) \
  5860. ) \
  5861. )
  5862. ! endif
  5863. ! else
  5864. LANGUAGE_NEUTRAL_STATUS_CMD=
  5865. ! endif
  5866.  
  5867. BINPLACE_TOOL=$(NOECHO)binplace
  5868.  
  5869. BINPLACE_CMD = $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_FLAGS) $@
  5870.  
  5871. ! if "$(LOCALIZE_BASE_FILE)" == "1" || "$(LOCALIZE_NO_MUI_MULTI)" == "1"
  5872. _BINPLACE_FLAGS_LOCALIZE = /R $(_NTTREE)\$(LOC_MULTI)
  5873. ! elseif "$(LOCALIZE_NO_MUI)" == "1"
  5874. _BINPLACE_FLAGS_LOCALIZE = /R $(_NTTREE)\$(LOC_BIN)
  5875. ! else
  5876. _BINPLACE_FLAGS_LOCALIZE =
  5877. ! endif
  5878.  
  5879. !if defined(_BINPLACE_LINK_RESULT)
  5880. _BINPLACE_TARGET_COMMAND = \
  5881. $(BINPLACE_TOOL) \
  5882. $(BINPLACE_FLAGS) \
  5883. $(BINPLACE_TARGET_FLAGS) \
  5884. $(BINPLACE_LC_FLAGS) \
  5885. $(_BINPLACE_FLAGS_LOCALIZE) \
  5886. $(_BINPLACE_LINK_RESULT) \
  5887. !endif
  5888.  
  5889. _BBT_BINPLACE_COMMAND = \
  5890. $(BINPLACE_TOOL) \
  5891. $(BINPLACE_FLAGS) \
  5892. $(BINPLACE_TARGET_FLAGS) \
  5893. $(BINPLACE_LC_FLAGS) \
  5894. $(_BINPLACE_FLAGS_LOCALIZE) \
  5895. $@ \
  5896.  
  5897. _BBINSTR_BINPLACE_COMMAND = \
  5898. $(BINPLACE_TOOL) \
  5899. $(BINPLACE_FLAGS) \
  5900. $(BINPLACE_TARGET_FLAGS) \
  5901. $(BINPLACE_LC_FLAGS) \
  5902. $(_BINPLACE_FLAGS_LOCALIZE) \
  5903. $(_BINPLACE_BBT_INSTR) \
  5904.  
  5905. _BINPLACE_COVERAGE_COMMAND = \
  5906. $(BINPLACE_TOOL) \
  5907. $(BINPLACE_FLAGS) \
  5908. $(BINPLACE_TARGET_FLAGS) \
  5909. $(BINPLACE_LC_FLAGS) \
  5910. $(_BINPLACE_FLAGS_LOCALIZE) \
  5911.  
  5912. ! if "$(INSTRUMENT_FOR_COVERAGE)" == "1"
  5913.  
  5914. _COVERAGE_RESPONSE_FILE_CONTENTS=$(_COVERAGE_RESPONSE_FILE_CONTENTS)^
  5915. /BinplaceCommand $(_BINPLACE_COVERAGE_COMMAND)^
  5916. /BinplaceFlagsLocalize $(_BINPLACE_FLAGS_LOCALIZE)
  5917.  
  5918. ! endif
  5919.  
  5920. !endif # NO_BINPLACE
  5921.  
  5922. BINPLACE_CMD_NO_BBT=$(BINPLACE_CMD)
  5923. BINPLACE_CMD_NT=$(BINPLACE_CMD)
  5924.  
  5925.  
  5926. !if 1 # PASS_INDEPENDENT_TARGETS
  5927.  
  5928. !ifdef NTDUMPAMAP
  5929. MAPDUMP_CMD = link /dump /map $@ | sort /R /+62 > $(_NTDUMPAMAP)\$(@B).srt
  5930. !else
  5931. MAPDUMP_CMD =
  5932. !endif
  5933.  
  5934.  
  5935. # Define this macro so including make files can supply a yes prompt
  5936. # as appropriate. Put the "yes." file in a visible place for OEM's
  5937. # so they can make too.
  5938.  
  5939. !IFNDEF NOPASS0
  5940.  
  5941. # Pass Zero Inference Rules: IDL files (MIDL) and MC files
  5942.  
  5943. .SUFFIXES: .h .idl .mc .odl .tdl .asn .thk .mof
  5944.  
  5945. PASS0_OBJECTS=
  5946. ! IF $(386)
  5947. PASS0_OBJECTS=$(PASS0_OBJECTS) $(PASS0_386_OBJECTS)
  5948. ! ENDIF
  5949. ! IF $(IA64)
  5950. PASS0_OBJECTS=$(PASS0_OBJECTS) $(PASS0_IA64_OBJECTS)
  5951. ! ENDIF
  5952. ! IF $(AMD64)
  5953. PASS0_OBJECTS=$(PASS0_OBJECTS) $(PASS0_AMD64_OBJECTS)
  5954. ! ENDIF
  5955. ! IF $(ARM)
  5956. PASS0_OBJECTS=$(PASS0_OBJECTS) $(PASS0_ARM_OBJECTS)
  5957. ! ENDIF
  5958. !ENDIF
  5959.  
  5960. !ifndef MIDL
  5961. MIDL = midl
  5962. !endif
  5963.  
  5964. MIDL = $(_CONCURRENT_MIDL_RUN) $(MIDL)
  5965.  
  5966. # Disable midl timestamps wherever possible
  5967. MIDL_FLAGS=$(MIDL_FLAGS) /no_stamp /nologo $(MIDL_WX_SWITCH)
  5968.  
  5969. !IFDEF USE_OLE_MC
  5970. MC = mc -o
  5971. !ELSE
  5972. MC = mc
  5973. !ENDIF
  5974.  
  5975. !IF "$(IDL_TYPE)" == "ole" || "$(IDL_TYPE)" == ""
  5976. IDL_TYPE=OLE
  5977. !ELSEIF "$(IDL_TYPE)" == "rpc"
  5978. IDL_TYPE=RPC
  5979. !ELSEIF "$(IDL_TYPE)" == "bem"
  5980. IDL_TYPE=BEM
  5981. !ENDIF
  5982.  
  5983. !IFNDEF PASS0_HEADERDIR
  5984. ! if $(USE_OBJECT_ROOT)
  5985. PASS0_HEADERDIR=$(OBJ_PATH)\$(O)
  5986. ! elseif "$(BUILD_PRODUCT)" == "NT"
  5987. PASS0_HEADERDIR=$(O)
  5988. ! else
  5989. PASS0_HEADERDIR=.
  5990. ! endif
  5991. !ENDIF
  5992.  
  5993. MIDL_TARGET_NT40 = NT40
  5994. MIDL_TARGET_WIN2K = NT50
  5995. MIDL_TARGET_WINXP = NT51
  5996. MIDL_TARGET_VISTA = NT60
  5997. MIDL_TARGET_WIN7 = NT61
  5998.  
  5999.  
  6000. !IFNDEF MIDL_TARGET
  6001.  
  6002. ! IF $(WIN32_WINNT_VERSION) == 0x0601
  6003. # Continue to default to Vista due to extra requirement to link to ole32.dll in Win7 stubs
  6004. MIDL_TARGET=$(MIDL_TARGET_VISTA)
  6005. ! ELSEIF $(WIN32_WINNT_VERSION) == 0x0600
  6006. MIDL_TARGET=$(MIDL_TARGET_VISTA)
  6007. ! ELSEIF $(WIN32_WINNT_VERSION) == 0x0502
  6008. MIDL_TARGET=$(MIDL_TARGET_WINXP)
  6009. ! ELSEIF $(WIN32_WINNT_VERSION) == 0x0501
  6010. MIDL_TARGET=$(MIDL_TARGET_WIN2K)
  6011. ! ELSEIF $(WIN32_WINNT_VERSION) == 0x0500
  6012. MIDL_TARGET=$(MIDL_TARGET_WIN2K)
  6013. ! ELSE
  6014. ! if !$(WIN64)
  6015. MIDL_NO_ROBUST=1
  6016. ! else
  6017. MIDL_TARGET=$(MIDL_TARGET_WIN2K)
  6018. ! endif
  6019. ! ENDIF
  6020.  
  6021. !ELSE
  6022.  
  6023. # Don't build MIDL stubs that are too new for the OS being targeted
  6024.  
  6025. ! IF "$(MIDL_TARGET)" == "$(MIDL_TARGET_WIN7)"
  6026.  
  6027. ! IF "$(SUBSYSTEM_WINVER)" < "$(SUBSYSTEM_601)"
  6028. ! ERROR MIDL_TARGET=$(MIDL_TARGET) mismatch with SUBSYSTEM_VERSION=$(SUBSYSTEM_WINVER). MIDL_TARGET must not be newer.
  6029. ! ENDIF
  6030.  
  6031. ! ELSEIF "$(MIDL_TARGET)" == "$(MIDL_TARGET_VISTA)"
  6032.  
  6033. ! IF "$(SUBSYSTEM_WINVER)" < "$(SUBSYSTEM_600)"
  6034. ! ERROR MIDL_TARGET=$(MIDL_TARGET) mismatch with SUBSYSTEM_VERSION=$(SUBSYSTEM_WINVER). MIDL_TARGET must not be newer.
  6035. ! ENDIF
  6036.  
  6037. ! ELSEIF "$(MIDL_TARGET)" == "$(MIDL_TARGET_WINXP)"
  6038.  
  6039. ! IF "$(SUBSYSTEM_WINVER)" < "$(SUBSYSTEM_501)"
  6040. ! ERROR MIDL_TARGET=$(MIDL_TARGET) mismatch with SUBSYSTEM_VERSION=$(SUBSYSTEM_WINVER). MIDL_TARGET must not be newer.
  6041. ! ENDIF
  6042.  
  6043. ! ELSEIF "$(MIDL_TARGET)" == "$(MIDL_TARGET_WIN2K)"
  6044.  
  6045. ! IF "$(SUBSYSTEM_WINVER)" < "$(SUBSYSTEM_500)"
  6046. ! ERROR MIDL_TARGET=$(MIDL_TARGET) mismatch with SUBSYSTEM_VERSION=$(SUBSYSTEM_WINVER). MIDL_TARGET must not be newer.
  6047. ! ENDIF
  6048.  
  6049. # else MIDL_TARGET is set old enough it'll run on anything.
  6050.  
  6051. ! ENDIF
  6052.  
  6053. !ENDIF
  6054.  
  6055. !IF defined(MIDL_NO_ROBUST)
  6056. !if !$(WIN64) || ("$(MIDL_PROTOCOL)" == "dce" && defined(RPC_TEST_OS64))
  6057. !undef MIDL_TARGET
  6058. !else
  6059. MIDL_TARGET=NT50
  6060. !undef MIDL_NO_ROBUST
  6061. !endif
  6062. !ENDIF
  6063.  
  6064. !IF "$(IDL_TYPE)" == "BEM"
  6065. !undef MIDL_TARGET
  6066. !IFDEF MIDL_EXPORT
  6067. !ERROR Export Files not supported for BEM interfaces.
  6068. !ENDIF
  6069. !ENDIF
  6070.  
  6071.  
  6072. MIDL_OPTIMIZATION=$(MIDL_OPTIMIZATION) -sal $(MIDL_PLATFORM_FLAG)
  6073.  
  6074. !IFDEF MIDL_TARGET
  6075. MIDL_OPTIMIZATION=$(MIDL_OPTIMIZATION) -target $(MIDL_TARGET)
  6076. !ENDIF
  6077.  
  6078. !IFDEF MIDL_PROTOCOL
  6079. MIDL_OPTIMIZATION=$(MIDL_OPTIMIZATION) -protocol $(MIDL_PROTOCOL)
  6080. !ENDIF
  6081.  
  6082. !IFDEF MIDL_NO_ROBUST
  6083. MIDL_OPTIMIZATION=$(MIDL_OPTIMIZATION) -no_robust
  6084. !ENDIF
  6085.  
  6086. !IFDEF MIDL_EXPORT
  6087. !IF !defined(MIDL_EXPORTDIR)
  6088. MIDL_EXPORTDIR=$(PASS0_HEADERDIR)
  6089. !ENDIF
  6090. MIDL_OPTIMIZATION=$(MIDL_OPTIMIZATION) -export -export_file $(MIDL_EXPORTDIR)\$(<F:.idl=_export.mef)
  6091. !ENDIF
  6092.  
  6093.  
  6094. #
  6095. # Default MIDL_TLBDIR, and don't need to check if it exists in the default case.
  6096. #
  6097. ! if !defined(MIDL_TLBDIR) && $(USE_OBJECT_ROOT)
  6098.  
  6099. MIDL_TLBDIR=$(OBJ_PATH)\$(O)
  6100. !if !defined(MIDL_TLBNAME)
  6101. MIDL_TLBNAME=$(<B)
  6102. !endif
  6103. MIDL_TLBSWITCH=/tlb $(OBJ_PATH)\$(O)\$(MIDL_TLBNAME).tlb
  6104.  
  6105. ! else
  6106.  
  6107. ! ifdef MIDL_TLBDIR
  6108. ! if !exist($(MIDL_TLBDIR))
  6109. ! if [mkdir $(MIDL_TLBDIR)]
  6110. ! endif
  6111. ! endif
  6112. MIDL_TLBSWITCH=/tlb $(MIDL_TLBDIR)\$(<F:.idl=.tlb)
  6113. ! else
  6114. MIDL_TLBSWITCH=
  6115. ! endif
  6116. ! endif
  6117.  
  6118. !ifndef PACKING
  6119. PACKING= /Zp8
  6120. !endif
  6121.  
  6122. !IF "$(IDL_TYPE)" == "OLE"
  6123.  
  6124. #! IF DEFINED(PASS0_CLIENTDIR) || DEFINED(PASS0_SERVERDIR)
  6125. #! ERROR PASS0_CLIENTDIR and PASS0_SERVERDIR can only be used with IDL_TYPE=RPC!
  6126. #! ENDIF
  6127.  
  6128. ! IFNDEF PASS0_SOURCEDIR
  6129. ! if $(USE_OBJECT_ROOT)
  6130. PASS0_SOURCEDIR=$(OBJ_PATH)\$(O)
  6131. ! elseif "$(BUILD_PRODUCT)" == "NT"
  6132. PASS0_SOURCEDIR=$(O)
  6133. ! else
  6134. PASS0_SOURCEDIR=.
  6135. ! endif
  6136. ! ENDIF
  6137.  
  6138. ! IFNDEF MIDL_UUIDDIR
  6139. MIDL_UUIDDIR=$(PASS0_SOURCEDIR)
  6140. ! ENDIF
  6141.  
  6142. ! ifndef PASS0_UUIDDIR
  6143. PASS0_UUIDDIR=$(MIDL_UUIDDIR)
  6144. ! endif
  6145.  
  6146. !ifdef USE_IDLBASED_DLLDATA
  6147. DLLDATA_NAME=$(<F:.idl=_dlldata.c)
  6148. !else
  6149. DLLDATA_NAME=dlldata.c
  6150. !endif
  6151.  
  6152. ! IFNDEF NO_PASS0_RULES
  6153.  
  6154. !if !exist($(PASS0_SOURCEDIR))
  6155. !if [mkdir $(PASS0_SOURCEDIR)]
  6156. !endif
  6157. !endif
  6158.  
  6159. !if !exist($(MIDL_UUIDDIR))
  6160. !if [mkdir $(MIDL_UUIDDIR)]
  6161. !endif
  6162. !endif
  6163.  
  6164. .idl{$(PASS0_HEADERDIR)}.h:
  6165. $(MIDL) \
  6166. $(PACKING) \
  6167. $(INCPATH0) \
  6168. /char unsigned \
  6169. /ms_ext \
  6170. /c_ext \
  6171. /proxy $(PASS0_SOURCEDIR)\$(<F:.idl=_p.c) \
  6172. /dlldata $(PASS0_SOURCEDIR)\$(DLLDATA_NAME) \
  6173. /iid $(MIDL_UUIDDIR)\$(<F:.idl=_i.c) \
  6174. $(MIDL_TLBSWITCH) \
  6175. /header $@ \
  6176. /cpp_cmd $(MIDL_CPP) \
  6177. $(C_DEFINES) \
  6178. $(MIDL_FLAGS) \
  6179. $(MIDL_OPTIMIZATION) \
  6180. $<
  6181.  
  6182. {..}.idl{$(PASS0_HEADERDIR)}.h:
  6183. $(MIDL) \
  6184. $(PACKING) \
  6185. $(INCPATH0) \
  6186. /char unsigned \
  6187. /ms_ext \
  6188. /c_ext \
  6189. /proxy $(PASS0_SOURCEDIR)\$(<F:.idl=_p.c) \
  6190. /dlldata $(PASS0_SOURCEDIR)\$(DLLDATA_NAME) \
  6191. /iid $(MIDL_UUIDDIR)\$(<F:.idl=_i.c) \
  6192. $(MIDL_TLBSWITCH) \
  6193. /header $@ \
  6194. /cpp_cmd $(MIDL_CPP) \
  6195. $(C_DEFINES) \
  6196. $(MIDL_FLAGS) \
  6197. $(MIDL_OPTIMIZATION) \
  6198. $<
  6199.  
  6200. {$O}.idl{$(PASS0_HEADERDIR)}.h:
  6201. $(MIDL) \
  6202. $(PACKING) \
  6203. $(INCPATH0) \
  6204. /char unsigned \
  6205. /ms_ext \
  6206. /c_ext \
  6207. /proxy $(PASS0_SOURCEDIR)\$(<F:.idl=_p.c) \
  6208. /dlldata $(PASS0_SOURCEDIR)\$(DLLDATA_NAME) \
  6209. /iid $(MIDL_UUIDDIR)\$(<F:.idl=_i.c) \
  6210. $(MIDL_TLBSWITCH) \
  6211. /header $@ \
  6212. /cpp_cmd $(MIDL_CPP) \
  6213. $(C_DEFINES) \
  6214. $(MIDL_FLAGS) \
  6215. $(MIDL_OPTIMIZATION) \
  6216. $<
  6217.  
  6218. {$(OBJ_PATH)\$O}.idl{$(PASS0_HEADERDIR)}.h:
  6219. $(MIDL) \
  6220. $(PACKING) \
  6221. $(INCPATH0) \
  6222. /char unsigned \
  6223. /ms_ext \
  6224. /c_ext \
  6225. /proxy $(PASS0_SOURCEDIR)\$(<F:.idl=_p.c) \
  6226. /dlldata $(PASS0_SOURCEDIR)\$(DLLDATA_NAME) \
  6227. /iid $(MIDL_UUIDDIR)\$(<F:.idl=_i.c) \
  6228. $(MIDL_TLBSWITCH) \
  6229. /header $@ \
  6230. /cpp_cmd $(MIDL_CPP) \
  6231. $(C_DEFINES) \
  6232. $(MIDL_FLAGS) \
  6233. $(MIDL_OPTIMIZATION) \
  6234. $<
  6235.  
  6236. ! ENDIF
  6237.  
  6238. !ELSEIF "$(IDL_TYPE)" == "RPC"
  6239.  
  6240. ! IFNDEF PASS0_CLIENTDIR
  6241. ! if $(USE_OBJECT_ROOT)
  6242. PASS0_CLIENTDIR=$(OBJ_PATH)\$(O)
  6243. ! elseif "$(BUILD_PRODUCT)" == "NT"
  6244. PASS0_CLIENTDIR=$(O)
  6245. ! else
  6246. PASS0_CLIENTDIR=$(TARGETPATH)
  6247. ! endif
  6248. ! ENDIF
  6249.  
  6250. ! IFNDEF PASS0_SERVERDIR
  6251. ! if $(USE_OBJECT_ROOT)
  6252. PASS0_SERVERDIR=$(OBJ_PATH)\$(O)
  6253. ! elseif "$(BUILD_PRODUCT)" == "NT"
  6254. PASS0_SERVERDIR=$(O)
  6255. ! else
  6256. PASS0_SERVERDIR=$(PASS0_CLIENTDIR)
  6257. ! endif
  6258. ! ENDIF
  6259.  
  6260. ! IFNDEF NO_PASS0_RULES
  6261.  
  6262. !if !exist($(PASS0_CLIENTDIR))
  6263. !if [mkdir $(PASS0_CLIENTDIR)]
  6264. !endif
  6265. !endif
  6266. !if !exist($(PASS0_SERVERDIR))
  6267. !if [mkdir $(PASS0_SERVERDIR)]
  6268. !endif
  6269. !endif
  6270.  
  6271. .idl{$(PASS0_HEADERDIR)}.h:
  6272. $(MIDL) \
  6273. $(PACKING) \
  6274. $(INCPATH0) \
  6275. /char unsigned \
  6276. /ms_ext \
  6277. /c_ext \
  6278. /cstub $(PASS0_CLIENTDIR)\$(<F:.idl=_c.c) \
  6279. /sstub $(PASS0_SERVERDIR)\$(<F:.idl=_s.c) \
  6280. $(MIDL_TLBSWITCH) \
  6281. /header $@ \
  6282. /cpp_cmd $(MIDL_CPP) \
  6283. $(C_DEFINES) \
  6284. $(MIDL_FLAGS) \
  6285. $(MIDL_OPTIMIZATION) \
  6286. $<
  6287.  
  6288. {..}.idl{$(PASS0_HEADERDIR)}.h:
  6289. $(MIDL) \
  6290. $(PACKING) \
  6291. $(INCPATH0) \
  6292. /char unsigned \
  6293. /ms_ext \
  6294. /c_ext \
  6295. /cstub $(PASS0_CLIENTDIR)\$(<F:.idl=_c.c) \
  6296. /sstub $(PASS0_SERVERDIR)\$(<F:.idl=_s.c) \
  6297. $(MIDL_TLBSWITCH) \
  6298. /header $@ \
  6299. /cpp_cmd $(MIDL_CPP) \
  6300. $(C_DEFINES) \
  6301. $(MIDL_FLAGS) \
  6302. $(MIDL_OPTIMIZATION) \
  6303. $<
  6304.  
  6305. {$O}.idl{$(PASS0_HEADERDIR)}.h:
  6306. $(MIDL) \
  6307. $(PACKING) \
  6308. $(INCPATH0) \
  6309. /char unsigned \
  6310. /ms_ext \
  6311. /c_ext \
  6312. /cstub $(PASS0_CLIENTDIR)\$(<F:.idl=_c.c) \
  6313. /sstub $(PASS0_SERVERDIR)\$(<F:.idl=_s.c) \
  6314. $(MIDL_TLBSWITCH) \
  6315. /header $@ \
  6316. /cpp_cmd $(MIDL_CPP) \
  6317. $(C_DEFINES) \
  6318. $(MIDL_FLAGS) \
  6319. $(MIDL_OPTIMIZATION) \
  6320. $<
  6321.  
  6322. {$(OBJ_PATH)\$O}.idl{$(PASS0_HEADERDIR)}.h:
  6323. $(MIDL) \
  6324. $(PACKING) \
  6325. $(INCPATH0) \
  6326. /char unsigned \
  6327. /ms_ext \
  6328. /c_ext \
  6329. /cstub $(PASS0_CLIENTDIR)\$(<F:.idl=_c.c) \
  6330. /sstub $(PASS0_SERVERDIR)\$(<F:.idl=_s.c) \
  6331. $(MIDL_TLBSWITCH) \
  6332. /header $@ \
  6333. /cpp_cmd $(MIDL_CPP) \
  6334. $(C_DEFINES) \
  6335. $(MIDL_FLAGS) \
  6336. $(MIDL_OPTIMIZATION) \
  6337. $<
  6338.  
  6339. ! ENDIF
  6340.  
  6341. !ELSEIF "$(IDL_TYPE)" == "BEM"
  6342.  
  6343. ! IFNDEF PASS0_CLIENTDIR
  6344. ! if $(USE_OBJECT_ROOT)
  6345. PASS0_CLIENTDIR=$(OBJ_PATH)\$(O)
  6346. ! elseif "$(BUILD_PRODUCT)" == "NT"
  6347. PASS0_CLIENTDIR=$(O)
  6348. ! else
  6349. PASS0_CLIENTDIR=$(TARGETPATH)
  6350. ! endif
  6351. ! ENDIF
  6352.  
  6353. ! IFNDEF PASS0_SERVERDIR
  6354. ! if $(USE_OBJECT_ROOT)
  6355. PASS0_SERVERDIR=$(OBJ_PATH)\$(O)
  6356. ! elseif "$(BUILD_PRODUCT)" == "NT"
  6357. PASS0_SERVERDIR=$(O)
  6358. ! else
  6359. PASS0_SERVERDIR=$(PASS0_CLIENTDIR)
  6360. ! endif
  6361. ! ENDIF
  6362.  
  6363. ! IFNDEF MIDL_UUIDDIR
  6364. MIDL_UUIDDIR=$(PASS0_HEADERDIR)
  6365. ! ENDIF
  6366.  
  6367. ! ifndef PASS0_UUIDDIR
  6368. PASS0_UUIDDIR=$(MIDL_UUIDDIR)
  6369. ! endif
  6370.  
  6371. !ifdef USE_IDLBASED_CONTRACTDATA
  6372. CONTRACTDATA_NAME=$(<F:.idl=_contractdata.c)
  6373. !else
  6374. CONTRACTDATA_NAME=contractdata.c
  6375. !endif
  6376.  
  6377. ! IFNDEF NO_PASS0_RULES
  6378.  
  6379. !if !exist($(PASS0_CLIENTDIR))
  6380. !if [mkdir $(PASS0_CLIENTDIR)]
  6381. !endif
  6382. !endif
  6383. !if !exist($(PASS0_SERVERDIR))
  6384. !if [mkdir $(PASS0_SERVERDIR)]
  6385. !endif
  6386. !endif
  6387. !if !exist($(PASS0_UUIDDIR))
  6388. !if [mkdir $(PASS0_UUIDDIR)]
  6389. !endif
  6390. !endif
  6391.  
  6392.  
  6393. .idl{$(PASS0_HEADERDIR)}.h:
  6394. $(MIDL) \
  6395. $(PACKING) \
  6396. $(INCPATH0) \
  6397. /char unsigned \
  6398. /ms_ext \
  6399. /c_ext \
  6400. /emhostfile $(PASS0_CLIENTDIR)\$(<F:.idl=_host.cpp) \
  6401. /emextfile $(PASS0_SERVERDIR)\$(<F:.idl=_ext.cpp) \
  6402. /contractdata $(PASS0_SERVERDIR)\$(CONTRACTDATA_NAME) \
  6403. /iid $(PASS0_UUIDDIR)\$(<F:.idl=_i.c) \
  6404. /minWin \
  6405. /header $@ \
  6406. /cpp_cmd $(MIDL_CPP) \
  6407. $(C_DEFINES) \
  6408. $(MIDL_FLAGS) \
  6409. $(MIDL_OPTIMIZATION) \
  6410. $<
  6411.  
  6412. {..}.idl{$(PASS0_HEADERDIR)}.h:
  6413. $(MIDL) \
  6414. $(PACKING) \
  6415. $(INCPATH0) \
  6416. /char unsigned \
  6417. /ms_ext \
  6418. /c_ext \
  6419. /emhostfile $(PASS0_CLIENTDIR)\$(<F:.idl=_host.cpp) \
  6420. /emextfile $(PASS0_SERVERDIR)\$(<F:.idl=_ext.cpp) \
  6421. /contractdata $(PASS0_SERVERDIR)\$(CONTRACTDATA_NAME) \
  6422. /iid $(PASS0_UUIDDIR)\$(<F:.idl=_i.c) \
  6423. /minWin \
  6424. /header $@ \
  6425. /cpp_cmd $(MIDL_CPP) \
  6426. $(C_DEFINES) \
  6427. $(MIDL_FLAGS) \
  6428. $(MIDL_OPTIMIZATION) \
  6429. $<
  6430.  
  6431. {$O}.idl{$(PASS0_HEADERDIR)}.h:
  6432. $(MIDL) \
  6433. $(PACKING) \
  6434. $(INCPATH0) \
  6435. /char unsigned \
  6436. /ms_ext \
  6437. /c_ext \
  6438. /emhostfile $(PASS0_CLIENTDIR)\$(<F:.idl=_host.cpp) \
  6439. /emextfile $(PASS0_SERVERDIR)\$(<F:.idl=_ext.cpp) \
  6440. /contractdata $(PASS0_SERVERDIR)\$(CONTRACTDATA_NAME) \
  6441. /iid $(PASS0_UUIDDIR)\$(<F:.idl=_i.c) \
  6442. /minWin \
  6443. /header $@ \
  6444. /cpp_cmd $(MIDL_CPP) \
  6445. $(C_DEFINES) \
  6446. $(MIDL_FLAGS) \
  6447. $(MIDL_OPTIMIZATION) \
  6448. $<
  6449.  
  6450. {$(OBJ_PATH)\$O}.idl{$(PASS0_HEADERDIR)}.h:
  6451. $(MIDL) \
  6452. $(PACKING) \
  6453. $(INCPATH0) \
  6454. /char unsigned \
  6455. /ms_ext \
  6456. /c_ext \
  6457. /emhostfile $(PASS0_CLIENTDIR)\$(<F:.idl=_host.cpp) \
  6458. /emextfile $(PASS0_SERVERDIR)\$(<F:.idl=_ext.cpp) \
  6459. /contractdata $(PASS0_SERVERDIR)\$(CONTRACTDATA_NAME) \
  6460. /iid $(PASS0_UUIDDIR)\$(<F:.idl=_i.c) \
  6461. /minWin \
  6462. /header $@ \
  6463. /cpp_cmd $(MIDL_CPP) \
  6464. $(C_DEFINES) \
  6465. $(MIDL_FLAGS) \
  6466. $(MIDL_OPTIMIZATION) \
  6467. $<
  6468.  
  6469. ! ENDIF
  6470.  
  6471. !ELSE
  6472.  
  6473. ! ERROR Invalid IDL_TYPE value. Supported values: OLE, BEM, and RPC.
  6474.  
  6475. !ENDIF # IDL_TYPE
  6476.  
  6477. CPPXX = $(C_PREPROCESSOR_FLAGS:/Tc=)
  6478. CPPXX = $(CPPXX:-Tc=)
  6479.  
  6480. !IFNDEF NO_PASS0_RULES
  6481.  
  6482. ! IFNDEF MC_SOURCEDIR
  6483. ! IFDEF PASS0_SOURCEDIR
  6484. MC_SOURCEDIR=$(PASS0_SOURCEDIR)
  6485. ! ELSE
  6486. MC_SOURCEDIR=$(PASS0_CLIENTDIR)
  6487. ! ENDIF
  6488. ! ENDIF
  6489.  
  6490. !if defined(MC_WINMETAPATH)
  6491. ! error You may not define MC_WINMETAPATH.
  6492. !endif
  6493.  
  6494. MC_WINMETAPATH=$(SDK_INC_PATH)\winmeta.xml
  6495.  
  6496. !if defined(MC_EVENTMANPATH)
  6497. ! error You may not define MC_EVENTMANPATH.
  6498. !endif
  6499.  
  6500. MC_EVENTMANPATH=$(SDK_INC_PATH)\eventman.xsd
  6501.  
  6502. .mc{$(PASS0_HEADERDIR)}.h:
  6503. $(MC) /h $(PASS0_HEADERDIR) /r $(MC_SOURCEDIR) $(MC_FLAGS) $<
  6504. if not exist $@ echo error : $@ not produced
  6505.  
  6506. .mc{$(MC_SOURCEDIR)}.rc:
  6507. $(MC) /h $(PASS0_HEADERDIR) /r $(MC_SOURCEDIR) $(MC_FLAGS) $<
  6508. if not exist $@ echo error : $@ not produced
  6509.  
  6510. {..}.mc{$(PASS0_HEADERDIR)}.h:
  6511. $(MC) /h $(PASS0_HEADERDIR) /r $(MC_SOURCEDIR) $(MC_FLAGS) $<
  6512. if not exist $@ echo error : $@ not produced
  6513.  
  6514. {..}.mc{$(MC_SOURCEDIR)}.rc:
  6515. $(MC) /h $(PASS0_HEADERDIR) /r $(MC_SOURCEDIR) $(MC_FLAGS) $<
  6516. if not exist $@ echo error : $@ not produced
  6517.  
  6518. {$O}.mc{$(PASS0_HEADERDIR)}.h:
  6519. $(MC) /h $(PASS0_HEADERDIR) /r $(MC_SOURCEDIR) $(MC_FLAGS) $<
  6520. if not exist $@ echo error : $@ not produced
  6521.  
  6522. {$O}.mc{$(MC_SOURCEDIR)}.rc:
  6523. $(MC) /h $(PASS0_HEADERDIR) /r $(MC_SOURCEDIR) $(MC_FLAGS) $<
  6524. if not exist $@ echo error : $@ not produced
  6525.  
  6526. {$(OBJ_PATH)\$O}.mc{$(PASS0_HEADERDIR)}.h:
  6527. $(MC) /h $(PASS0_HEADERDIR) /r $(MC_SOURCEDIR) $(MC_FLAGS) $<
  6528. if not exist $@ echo error : $@ not produced
  6529.  
  6530. {$(OBJ_PATH)\$O}.mc{$(MC_SOURCEDIR)}.rc:
  6531. $(MC) /h $(PASS0_HEADERDIR) /r $(MC_SOURCEDIR) $(MC_FLAGS) $<
  6532. if not exist $@ echo error : $@ not produced
  6533.  
  6534. !if "$(MC_SOURCEDIR)" != "$(OBJ_PATH)\$O"
  6535.  
  6536. {$(OBJ_PATH)\$O}.mc{$(OBJ_PATH)\$O}.h:
  6537. $(MC) /h $(PASS0_HEADERDIR) /r $(MC_SOURCEDIR) $(MC_FLAGS) $<
  6538. if not exist $@ echo error : $@ not produced
  6539.  
  6540. {$(OBJ_PATH)\$O}.mc{$(OBJ_PATH)\$O}.rc:
  6541. $(MC) /h $(PASS0_HEADERDIR) /r $(MC_SOURCEDIR) $(MC_FLAGS) $<
  6542. if not exist $@ echo error : $@ not produced
  6543.  
  6544. !endif
  6545.  
  6546. #
  6547. # ManagedObjectFormat files
  6548. # First preprocess MOF via the C pre processor
  6549. # Next separate MOF into MOF and MFL, then concatenate them and
  6550. # finally compile into binary form
  6551. #
  6552.  
  6553. !if "$O" != "."
  6554.  
  6555. {..\}.mof{$O}.mof:
  6556. @$(_TYPE) <<$(ECHO_RSP)
  6557. $(ECHO_MSG) /EP $<
  6558. <<$(BUILD_NOKEEP)
  6559. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  6560. $(CPPXX: =
  6561. )
  6562. <<$(BUILD_NOKEEP)
  6563.  
  6564. !endif
  6565.  
  6566. {}.mof{$O}.mof:
  6567. @$(_TYPE) <<$(ECHO_RSP)
  6568. $(ECHO_MSG) /EP $<
  6569. <<$(BUILD_NOKEEP)
  6570. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  6571. $(CPPXX: =
  6572. )
  6573. <<$(BUILD_NOKEEP)
  6574.  
  6575. {$O}.mof{$O}.bmf:
  6576. !ifdef MOFCOMP_NO_DEFAULT_NAMESPACE
  6577. mofcomp -Amendment:ms_409 -MFL:$O\MFL.MFL -MOF:$O\MOF.MOF $<
  6578. !else
  6579. mofcomp -N:root\wmi -Amendment:ms_409 -MFL:$O\MFL.MFL -MOF:$O\MOF.MOF $<
  6580. !endif
  6581. wmimofck -y$O\MOF.MOF -z$O\MFL.MFL $O\MOFMFL.MOF
  6582. mofcomp -WMI -B:$@ $O\MOFMFL.MOF
  6583.  
  6584. {..}.mof{$(OBJ_PATH)\$O}.mof:
  6585. @$(_TYPE) <<$(ECHO_RSP)
  6586. $(ECHO_MSG) /EP $<
  6587. <<$(BUILD_NOKEEP)
  6588. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  6589. $(CPPXX: =
  6590. )
  6591. <<$(BUILD_NOKEEP)
  6592.  
  6593. {}.mof{$(OBJ_PATH)\$O}.mof:
  6594. @$(_TYPE) <<$(ECHO_RSP)
  6595. $(ECHO_MSG) /EP $<
  6596. <<$(BUILD_NOKEEP)
  6597. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  6598. $(CPPXX: =
  6599. )
  6600. <<$(BUILD_NOKEEP)
  6601.  
  6602. {$(OBJ_PATH)\$O}.mof{$(OBJ_PATH)\$O}.bmf:
  6603. cd $(OBJ_PATH)
  6604. !ifdef MOFCOMP_NO_DEFAULT_NAMESPACE
  6605. mofcomp -Amendment:ms_409 -MFL:$O\MFL.MFL -MOF:$O\MOF.MOF $O\$(<F)
  6606. !else
  6607. mofcomp -N:root\wmi -Amendment:ms_409 -MFL:$O\MFL.MFL -MOF:$O\MOF.MOF $O\$(<F)
  6608. !endif
  6609. cd $(MAKEDIR)
  6610. wmimofck -y$(OBJ_PATH)\$O\MOF.MOF -z$(OBJ_PATH)\$O\MFL.MFL $(OBJ_PATH)\$O\MOFMFL.MOF
  6611. mofcomp -WMI -B:$@ $(OBJ_PATH)\$O\MOFMFL.MOF
  6612.  
  6613.  
  6614. !ifdef USE_MIDL_FOR_MKTYPLIB
  6615.  
  6616. MIDL_MKTYPLIB_FLAGS=$(MKTYPLIB_FLAGS:-h =/header )
  6617. MIDL_MKTYPLIB_FLAGS=$(MIDL_MKTYPLIB_FLAGS:/h =/header )
  6618.  
  6619. MIDL_MKTYPLIB_FLAGS = \
  6620. $(PACKING) \
  6621. $(INCPATH0) \
  6622. /char unsigned \
  6623. /ms_ext \
  6624. /c_ext \
  6625. $(C_DEFINES) /D__MKTYPLIB__ \
  6626. $(MIDL_FLAGS) \
  6627. $(MIDL_OPTIMIZATION) \
  6628. $(MIDL_MKTYPLIB_FLAGS) \
  6629. /tlb $@ \
  6630. /cpp_cmd $(MIDL_CPP) \
  6631. /mktyplib203
  6632.  
  6633. .odl{$O}.tlb:
  6634. $(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
  6635.  
  6636. .odl{$(OBJ_PATH)\$O}.tlb:
  6637. $(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
  6638.  
  6639. {..\}.odl{$O}.tlb:
  6640. $(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
  6641.  
  6642. {..}.odl{$(OBJ_PATH)\$O}.tlb:
  6643. $(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
  6644.  
  6645. .tdl{$O}.tlb:
  6646. $(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
  6647.  
  6648. .tdl{$(OBJ_PATH)\$O}.tlb:
  6649. $(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
  6650.  
  6651. {..\}.tdl{$O}.tlb:
  6652. $(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
  6653.  
  6654. {..}.tdl{$(OBJ_PATH)\$O}.tlb:
  6655. $(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
  6656.  
  6657. !else
  6658.  
  6659. .odl{$O}.tlb:
  6660. @echo mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
  6661. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $O\MyTypLib.TMP
  6662. $(CPPXX: =
  6663. )
  6664. /D__MKTYPLIB__
  6665. <<$(BUILD_NOKEEP)
  6666. @mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $O\MyTypLib.TMP
  6667.  
  6668. .odl{$(OBJ_PATH)\$O}.tlb:
  6669. @echo mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
  6670. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $(OBJ_PATH)\$O\MyTypLib.TMP
  6671. $(CPPXX: =
  6672. )
  6673. /D__MKTYPLIB__
  6674. <<$(BUILD_NOKEEP)
  6675. @mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $(OBJ_PATH)\$O\MyTypLib.TMP
  6676.  
  6677. {..}.odl{$O}.tlb:
  6678. @echo mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
  6679. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $O\MyTypLib.TMP
  6680. $(CPPXX: =
  6681. )
  6682. /D__MKTYPLIB__
  6683. <<$(BUILD_NOKEEP)
  6684. @mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $O\MyTypLib.TMP
  6685.  
  6686. {..}.odl{$(OBJ_PATH)\$O}.tlb:
  6687. @echo mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
  6688. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $(OBJ_PATH)\$O\MyTypLib.TMP
  6689. $(CPPXX: =
  6690. )
  6691. /D__MKTYPLIB__
  6692. <<$(BUILD_NOKEEP)
  6693. @mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $(OBJ_PATH)\$O\MyTypLib.TMP
  6694.  
  6695. .tdl{$O}.tlb:
  6696. @echo mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
  6697. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $O\MyTypLib.TMP
  6698. $(CPPXX: =
  6699. )
  6700. /D__MKTYPLIB__
  6701. <<$(BUILD_NOKEEP)
  6702. @mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $O\MyTypLib.TMP
  6703.  
  6704. .tdl{$(OBJ_PATH)\$O}.tlb:
  6705. @echo mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
  6706. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $(OBJ_PATH)\$O\MyTypLib.TMP
  6707. $(CPPXX: =
  6708. )
  6709. /D__MKTYPLIB__
  6710. <<$(BUILD_NOKEEP)
  6711. @mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $(OBJ_PATH)\$O\MyTypLib.TMP
  6712.  
  6713. {..}.tdl{$O}.tlb:
  6714. @echo mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
  6715. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $O\MyTypLib.TMP
  6716. $(CPPXX: =
  6717. )
  6718. /D__MKTYPLIB__
  6719. <<$(BUILD_NOKEEP)
  6720. @mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $O\MyTypLib.TMP
  6721.  
  6722. {..}.tdl{$(OBJ_PATH)\$O}.tlb:
  6723. @echo mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
  6724. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $(OBJ_PATH)\$O\MyTypLib.TMP
  6725. $(CPPXX: =
  6726. )
  6727. /D__MKTYPLIB__
  6728. <<$(BUILD_NOKEEP)
  6729. @mktyplib /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $(OBJ_PATH)\$O\MyTypLib.TMP
  6730.  
  6731. !endif
  6732.  
  6733. #
  6734. # UA file inference rules
  6735. #
  6736. .SUFFIXES: .h1c .h1s
  6737.  
  6738. !if $(USE_OBJECT_ROOT)
  6739. .h1c{$(OBJ_PATH)\$O}.h1s:
  6740. !else
  6741. .h1c{$O}.h1s:
  6742. !endif
  6743. set BUILDMSG=Compiling UA file $<
  6744. apcompnt -p $< -o $@
  6745. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) $@
  6746.  
  6747.  
  6748.  
  6749. # OSSINFO must be set in the *environment* for the ASN compiler to find its
  6750. # configuration file, $(OSSINFO)\ossinfo.
  6751.  
  6752. ! ifndef OSSINFO
  6753. OSSINFO=$(SDK_LIB_DEST)
  6754. ! endif
  6755.  
  6756. ! ifndef ASNDEFAULTFILE
  6757. ASNDEFAULTFILE=$(OSSINFO)\asn1dflt.z4
  6758. ! endif
  6759.  
  6760. ! ifndef ASNSYNTAX
  6761. ASNSYNTAX=-1990
  6762. ! endif
  6763.  
  6764. ASNFLAGS=$(ASNDEFAULTFILE) $(ASNSYNTAX) $(ASNFLAGS)
  6765.  
  6766. # if ASNDBG is explicitly set, let that control whether the voluminous ASN
  6767. # symbols are suppressed. Otherwise, suppress the symbols for free builds.
  6768.  
  6769. ! ifdef ASNDBG
  6770. ! if $(ASNDBG) == 0
  6771. ASNFLAGS=-minimize $(ASNFLAGS)
  6772. ! endif
  6773. ! elseif $(FREEBUILD)
  6774. ASNFLAGS=-minimize $(ASNFLAGS)
  6775. ! endif
  6776.  
  6777. {}.asn{$(PASS0_HEADERDIR)}.h:
  6778. asn1 $(ASNFLAGS) -out $(PASS0_HEADERDIR)\$(@B) $<
  6779.  
  6780. !ENDIF
  6781.  
  6782. #
  6783. # Default language ID to US English (0x0409)
  6784. #
  6785.  
  6786. !IFDEF RCCODEPAGE
  6787. RCOPTIONS=$(RCOPTIONS) -c $(RCCODEPAGE)
  6788. !ENDIF
  6789.  
  6790. !IFNDEF RCNOFONTMAP
  6791. RCOPTIONS=-z "MS Sans Serif,Helv/MS Shell Dlg" $(RCOPTIONS)
  6792. !ENDIF
  6793.  
  6794. SXS_RC_MANIFEST_DEFINES=$(SXS_MANIFEST_DEFINES)
  6795. SXS_RC_MANIFEST_DEFINES=$(SXS_RC_MANIFEST_DEFINES:"\"=""")
  6796. SXS_RC_MANIFEST_DEFINES=$(SXS_RC_MANIFEST_DEFINES:\""=""")
  6797. RCOPTIONS=$(SXS_RC_MANIFEST_DEFINES) $(RCOPTIONS)
  6798. !ifdef RCLANGUAGE
  6799. RCOPTIONS=-l $(RCLANGUAGE) $(RCOPTIONS)
  6800. !else
  6801. RCOPTIONS=-l 409 $(RCOPTIONS)
  6802. !endif
  6803.  
  6804. !ifdef DO_LANGUAGE_NEUTRAL
  6805. RCOPTIONS=$(RCOPTIONS) $(LANGUAGE_NEUTRAL_RESOURCE) -fm $*.muires
  6806. !ENDIF
  6807.  
  6808.  
  6809. !if "$(BUILD_LCE_FILE)" == "1"
  6810. RCOPTIONS=$(RCOPTIONS) -ta -tn $(LCE_FILE)
  6811. !endif
  6812.  
  6813.  
  6814. RC_COMPILER=rc.exe $(RCOPTIONS)
  6815.  
  6816. INCPATHRC = $(INCPATH0: =)
  6817. INCPATHRC = $(INCPATHRC:-I=;)
  6818. INCPATHRC = $(INCPATHRC:/I=;)
  6819.  
  6820. CDEFINERC = $(CDEFINES: = )
  6821. CDEFINERC = $(CDEFINERC: = )
  6822.  
  6823. !ifdef RC_FORCE_INCLUDE_FILES
  6824. # Concatenate the FORCE_INCLUDES files in front of the .rc file.
  6825. # We put nul in front because there is an extra leading semicolon which produces
  6826. # an extra leading plus sign.
  6827. RC_TEMP1=$(@R).rc_temp1
  6828. RC_FORCE_INCLUDE_FILES_CMD=$(_COPYFILE) nul$(RC_FORCE_INCLUDE_FILES:;=+)+$< $(RC_TEMP1)
  6829. INCPATHRC=$(INCPATHRC);..
  6830. !else
  6831. RC_TEMP1=$<
  6832. RC_FORCE_INCLUDE_FILES_CMD=
  6833. !endif
  6834.  
  6835. !ifdef RC_FORCE_INCLUDE_STRING
  6836. RC_TEMP2=$(@R).rc_temp2
  6837. INCPATHRC=$(INCPATHRC);..
  6838. !else
  6839. RC_TEMP2=$(RC_TEMP1)
  6840. !endif
  6841.  
  6842. RC_TEMP=$(RC_TEMP2)
  6843.  
  6844. !ifdef SXS_MANIFEST_IN_RESOURCES
  6845. MAKE_MANIFEST_CMD=nmake.exe /nologo /f $(NTMAKEENV)\makefile.def $(SXS_MANIFEST_OBJ1)
  6846. !else
  6847. MAKE_MANIFEST_CMD=
  6848. !endif
  6849.  
  6850. {$O}.rc{$O}.res:
  6851. $(TYPE) <<$(ECHO_RSP)
  6852. $(RC_COMPILER) /r /fo $@ $(CDEFINES) $(INCPATH0) $<
  6853. <<$(BUILD_NOKEEP)
  6854. $(NOECHO)$(MAKE_MANIFEST_CMD)
  6855. $(NOECHO)$(RC_FORCE_INCLUDE_FILES_CMD)
  6856. ! ifdef RC_FORCE_INCLUDE_STRING
  6857. $(NOECHO)copy << + $(RC_TEMP1) $(RC_TEMP2)
  6858. $(RC_FORCE_INCLUDE_STRING)
  6859. <<$(BUILD_NOKEEP)
  6860. ! endif
  6861. $(NOECHO)set include=$(INCPATHRC);$(INCLUDE)
  6862. $(NOECHO)$(RC_COMPILER) /r /fo $@ $(CDEFINERC) $(RC_TEMP)
  6863. $(NOECHO)set include=$(INCLUDE)
  6864.  
  6865. {$O}.rc{$(OBJ_PATH)\$O}.res:
  6866. $(TYPE) <<$(ECHO_RSP)
  6867. $(RC_COMPILER) /r /fo $@ $(CDEFINES) $(INCPATH0) $<
  6868. <<$(BUILD_NOKEEP)
  6869. $(NOECHO)$(MAKE_MANIFEST_CMD)
  6870. $(NOECHO)$(RC_FORCE_INCLUDE_FILES_CMD)
  6871. ! ifdef RC_FORCE_INCLUDE_STRING
  6872. $(NOECHO)copy << + $(RC_TEMP1) $(RC_TEMP2)
  6873. $(RC_FORCE_INCLUDE_STRING)
  6874. <<$(BUILD_NOKEEP)
  6875. ! endif
  6876. $(NOECHO)set include=$(INCPATHRC);$(INCLUDE)
  6877. $(NOECHO)$(RC_COMPILER) /r /fo $@ $(CDEFINERC) $(RC_TEMP)
  6878. $(NOECHO)set include=$(INCLUDE)
  6879.  
  6880. {$(OBJ_PATH)\$O}.rc{$(OBJ_PATH)\$O}.res:
  6881. $(TYPE) <<$(ECHO_RSP)
  6882. $(RC_COMPILER) /r /fo $@ $(CDEFINES) $(INCPATH0) $<
  6883. <<$(BUILD_NOKEEP)
  6884. $(NOECHO)$(MAKE_MANIFEST_CMD)
  6885. $(NOECHO)$(RC_FORCE_INCLUDE_FILES_CMD)
  6886. ! ifdef RC_FORCE_INCLUDE_STRING
  6887. $(NOECHO)copy << + $(RC_TEMP1) $(RC_TEMP2)
  6888. $(RC_FORCE_INCLUDE_STRING)
  6889. <<$(BUILD_NOKEEP)
  6890. ! endif
  6891. $(NOECHO)set include=$(INCPATHRC);$(INCLUDE)
  6892. $(NOECHO)$(RC_COMPILER) /r /fo $@ $(CDEFINERC) $(RC_TEMP)
  6893. $(NOECHO)set include=$(INCLUDE)
  6894.  
  6895. {..\}.rc{$O}.res:
  6896. $(TYPE) <<$(ECHO_RSP)
  6897. $(RC_COMPILER) /r /fo $@ $(CDEFINES) $(INCPATH0) $<
  6898. <<$(BUILD_NOKEEP)
  6899. $(NOECHO)$(MAKE_MANIFEST_CMD)
  6900. $(NOECHO)$(RC_FORCE_INCLUDE_FILES_CMD)
  6901. ! ifdef RC_FORCE_INCLUDE_STRING
  6902. $(NOECHO)copy << + $(RC_TEMP1) $(RC_TEMP2)
  6903. $(RC_FORCE_INCLUDE_STRING)
  6904. <<$(BUILD_NOKEEP)
  6905. ! endif
  6906. $(NOECHO)set include=$(INCPATHRC);$(INCLUDE)
  6907. $(NOECHO)$(RC_COMPILER) /r /fo $@ $(CDEFINERC) $(RC_TEMP)
  6908. $(NOECHO)set include=$(INCLUDE)
  6909.  
  6910. {..\}.rc{$(OBJ_PATH)\$O}.res:
  6911. $(TYPE) <<$(ECHO_RSP)
  6912. $(RC_COMPILER) /r /fo $@ $(CDEFINES) $(INCPATH0) $<
  6913. <<$(BUILD_NOKEEP)
  6914. $(NOECHO)$(MAKE_MANIFEST_CMD)
  6915. $(NOECHO)$(RC_FORCE_INCLUDE_FILES_CMD)
  6916. ! ifdef RC_FORCE_INCLUDE_STRING
  6917. $(NOECHO)copy << + $(RC_TEMP1) $(RC_TEMP2)
  6918. $(RC_FORCE_INCLUDE_STRING)
  6919. <<$(BUILD_NOKEEP)
  6920. ! endif
  6921. $(NOECHO)set include=$(INCPATHRC);$(INCLUDE)
  6922. $(NOECHO)$(RC_COMPILER) /r /fo $@ $(CDEFINERC) $(RC_TEMP)
  6923. $(NOECHO)set include=$(INCLUDE)
  6924.  
  6925. {}.rc{$O}.res:
  6926. $(TYPE) <<$(ECHO_RSP)
  6927. $(RC_COMPILER) /r /fo $@ $(CDEFINES) $(INCPATH0) $<
  6928. <<$(BUILD_NOKEEP)
  6929. $(NOECHO)$(MAKE_MANIFEST_CMD)
  6930. $(NOECHO)$(RC_FORCE_INCLUDE_FILES_CMD)
  6931. ! ifdef RC_FORCE_INCLUDE_STRING
  6932. $(NOECHO)copy << + $(RC_TEMP1) $(RC_TEMP2)
  6933. $(RC_FORCE_INCLUDE_STRING)
  6934. <<$(BUILD_NOKEEP)
  6935. ! endif
  6936. $(NOECHO)set include=$(INCPATHRC);$(INCLUDE)
  6937. $(NOECHO)$(RC_COMPILER) /r /fo $@ $(CDEFINERC) $(RC_TEMP)
  6938. $(NOECHO)set include=$(INCLUDE)
  6939.  
  6940. {}.rc{$(OBJ_PATH)\$O}.res:
  6941. $(TYPE) <<$(ECHO_RSP)
  6942. $(RC_COMPILER) /r /fo $@ $(CDEFINES) $(INCPATH0) $<
  6943. <<$(BUILD_NOKEEP)
  6944. $(NOECHO)$(MAKE_MANIFEST_CMD)
  6945. $(NOECHO)$(RC_FORCE_INCLUDE_FILES_CMD)
  6946. ! ifdef RC_FORCE_INCLUDE_STRING
  6947. $(NOECHO)copy << + $(RC_TEMP1) $(RC_TEMP2)
  6948. $(RC_FORCE_INCLUDE_STRING)
  6949. <<$(BUILD_NOKEEP)
  6950. ! endif
  6951. $(NOECHO)set include=$(INCPATHRC);$(INCLUDE)
  6952. $(NOECHO)$(RC_COMPILER) /r /fo $@ $(CDEFINERC) $(RC_TEMP)
  6953. $(NOECHO)set include=$(INCLUDE)
  6954.  
  6955. {..\}.rc.rcpp:
  6956. set include=$(INCPATHRC);$(INCLUDE)
  6957. $(RC_COMPILER) /r /p /fo $(@R).tmp $(CDEFINERC) $<
  6958. @set include=$(INCLUDE)
  6959.  
  6960. {}.rc.rcpp:
  6961. set include=$(INCPATHRC);$(INCLUDE)
  6962. $(RC_COMPILER) /r /p /fo $(@R).tmp $(CDEFINERC) $<
  6963. @set include=$(INCLUDE)
  6964.  
  6965. .thk{$(OBJ_PATH)\$O}.asm:
  6966. thunk /o $@ $<
  6967.  
  6968. JVC = jvc /nologo
  6969.  
  6970. !ifndef JAVA_DEBUG_FLAGS
  6971. !if $(FREEBUILD)
  6972. JAVA_DEBUG_FLAGS = /O
  6973. !else
  6974. JAVA_DEBUG_FLAGS = /g
  6975. !endif
  6976. !endif
  6977.  
  6978. !ifndef JAVA_WARNING_FLAGS
  6979. JAVA_WARNING_FLAGS = /w4
  6980. !endif
  6981.  
  6982. JAVA_BASE_CLASS = \
  6983. $(SDK_PATH)\classes\afc.zip; \
  6984. $(SDK_PATH)\classes\classes.zip
  6985.  
  6986. JAVA_CLASS_PATH = $(JAVA_BASE_CLASS); $(MAKEDIR); $(USER_CLASS_PATH)
  6987. JAVA_CLASS_PATH = $(JAVA_CLASS_PATH: =)
  6988.  
  6989. JVC_FLAGS = /cp $(JAVA_CLASS_PATH) $(JAVA_DEBUG_FLAGS) $(JAVA_WARNING_FLAGS) /d $(OBJ_PATH)\$O
  6990.  
  6991. {$(MAKEDIR)}.java{$(OBJ_PATH)\$O}.class:
  6992. $(JVC) $(JVC_FLAGS) $<
  6993.  
  6994. #
  6995. # The point of these constant response file names is primarly to provide stability
  6996. # so that logs can be diffed to verify that changes cause no "real" change.
  6997. #
  6998. # These file names should be kept short to avoid path length bugs in nmake/cmd.
  6999. # In particular, constructs such as [email protected] have been seen to exceed nmake/cmd's limited capacity.
  7000. #
  7001. # These names also provide some additional debuggability in the face of BUILD_DEBUG's switching
  7002. # of NoKeep to Keep. You do not then have to discover the response file name to open and view it.
  7003. # However that debuggability is reduced by occasional response file reuse, which can be fixed if desired.
  7004. #
  7005. ECHO_RSP = $(OBJ_PATH)\$O\echo.msg
  7006. CL_RSP = $(OBJ_PATH)\$O\cl.rsp
  7007. CLCOD_RSP = $(OBJ_PATH)\$O\clcod.rsp
  7008. LINK_RSP = $(OBJ_PATH)\$O\lnk.rsp
  7009. BINPLACE_RESPONSE_FILE = $(OBJ_PATH)\$O\binp.rsp
  7010. BINPLACE_RESPONSE_FILE_IND = $(OBJ_PATH)\$O\binp.ind.rsp
  7011. LIB_RESPONSE_FILE = $(OBJ_PATH)\$O\lib.rsp
  7012. PUBLISH_RESPONSE_FILE = $(OBJ_PATH)\$O\pub.rsp
  7013. PERL_RESPONSE_FILE = $(OBJ_PATH)\$O\perl.rsp
  7014. MANAGED_CODE_BUILD_TOOL_RESPONSE_FILE=$(OBJ_PATH)\$O\mgd.rsp
  7015. TYPE_RESPONSE_FILE=$(OBJ_PATH)\$O\type.rsp
  7016. BINDROP_RESPONSE_FILE=$(OBJ_PATH)\$O\bindrop.rsp
  7017.  
  7018. #
  7019. # Expand spaces to newlines, replace double # signs with spaces.
  7020. #
  7021. EX_CXX_COMPILER_FLAGS=$(CXX_COMPILER_FLAGS: =^
  7022. )
  7023. EX_CXX_COMPILER_FLAGS=$(EX_CXX_COMPILER_FLAGS:^#^#= )
  7024.  
  7025. EX_C_COMPILER_FLAGS=$(C_COMPILER_FLAGS: =^
  7026. )
  7027. EX_C_COMPILER_FLAGS=$(EX_C_COMPILER_FLAGS:^#^#= )
  7028.  
  7029. EX_CXX_COMPILER_FLAGS_NOPCH=$(CXX_COMPILER_FLAGS_NOPCH: =^
  7030. )
  7031. EX_CXX_COMPILER_FLAGS_NOPCH=$(EX_CXX_COMPILER_FLAGS_NOPCH:^#^#= )
  7032.  
  7033. EX_C_COMPILER_FLAGS_NOPCH=$(C_COMPILER_FLAGS_NOPCH: =^
  7034. )
  7035. EX_C_COMPILER_FLAGS_NOPCH=$(EX_C_COMPILER_FLAGS_NOPCH:^#^#= )
  7036.  
  7037. EX_C_COMPILER_FLAGS_COD=$(EX_C_COMPILER_FLAGS)
  7038. EX_C_COMPILER_FLAGS_COD=$(EX_C_COMPILER_FLAGS_COD:/GL=/wd4652)
  7039. # replace runs of newlines with single newlines
  7040. EX_C_COMPILER_FLAGS_COD=$(EX_C_COMPILER_FLAGS_COD:^
  7041. ^
  7042. =^
  7043. )
  7044. EX_C_COMPILER_FLAGS_COD=$(EX_C_COMPILER_FLAGS_COD:^
  7045. ^
  7046. =^
  7047. )
  7048.  
  7049. EX_CXX_COMPILER_FLAGS_COD=$(EX_CXX_COMPILER_FLAGS)
  7050. EX_CXX_COMPILER_FLAGS_COD=$(EX_CXX_COMPILER_FLAGS_COD:/GL=/wd4652)
  7051. EX_CXX_COMPILER_FLAGS_COD=$(EX_CXX_COMPILER_FLAGS_COD:^
  7052. ^
  7053. =^
  7054. )
  7055. EX_CXX_COMPILER_FLAGS_COD=$(EX_CXX_COMPILER_FLAGS_COD:^
  7056. ^
  7057. =^
  7058. )
  7059.  
  7060. EX_C_COMPILER_FLAGS_PP=$(EX_C_COMPILER_FLAGS)
  7061. EX_C_COMPILER_FLAGS_PP=$(EX_C_COMPILER_FLAGS_PP:/d1PrivateNativeTypes=)
  7062. EX_C_COMPILER_FLAGS_PP=$(EX_C_COMPILER_FLAGS_PP:^
  7063. ^
  7064. =^
  7065. )
  7066. EX_C_COMPILER_FLAGS_PP=$(EX_C_COMPILER_FLAGS_PP:^
  7067. ^
  7068. =^
  7069. )
  7070.  
  7071. EX_CXX_COMPILER_FLAGS_PP=$(EX_CXX_COMPILER_FLAGS)
  7072. EX_CXX_COMPILER_FLAGS_PP=$(EX_CXX_COMPILER_FLAGS_PP:/d1PrivateNativeTypes=)
  7073. EX_CXX_COMPILER_FLAGS_PP=$(EX_CXX_COMPILER_FLAGS_PP:^
  7074. ^
  7075. =^
  7076. )
  7077. EX_CXX_COMPILER_FLAGS_PP=$(EX_CXX_COMPILER_FLAGS_PP:^
  7078. ^
  7079. =^
  7080. )
  7081.  
  7082. !ifdef USECXX_FLAG
  7083. #
  7084. # This ought to go elsewhere
  7085. #
  7086. !if "$(URT_VER)" >= "2"
  7087. C_COMPILER_FLAGS_NOPCH=$(C_COMPILER_FLAGS_NOPCH) $(MANAGED_CXX_FLAGS)
  7088. !endif
  7089. !endif
  7090.  
  7091. !if !$(USE_OBJECT_ROOT)
  7092.  
  7093. {$O}.cxx{$O}.obj::
  7094. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7095. /Fo"$(MAKEDIR)\$O/"
  7096. /FC
  7097. $(EX_CXX_COMPILER_FLAGS: =
  7098. )
  7099. $<
  7100. <<$(BUILD_NOKEEP)
  7101.  
  7102. !endif
  7103.  
  7104. !if $(USE_OBJECT_ROOT)
  7105.  
  7106. {$(OBJ_PATH)\$O}.cxx{$(OBJ_PATH)\$O}.obj::
  7107. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7108. /Fo"$(OBJ_PATH)\$O/"
  7109. /FC
  7110. $(EX_CXX_COMPILER_FLAGS: =
  7111. )
  7112. $<
  7113. <<$(BUILD_NOKEEP)
  7114.  
  7115. !endif
  7116.  
  7117. !if !$(USE_OBJECT_ROOT)
  7118.  
  7119. {..\}.cxx{$O}.obj::
  7120. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7121. /Fo"$(MAKEDIR)\$O/"
  7122. /FC
  7123. $(EX_CXX_COMPILER_FLAGS: =
  7124. )
  7125. $<
  7126. <<$(BUILD_NOKEEP)
  7127.  
  7128. !endif
  7129.  
  7130. !if $(USE_OBJECT_ROOT)
  7131.  
  7132. {..\}.cxx{$(OBJ_PATH)\$O}.obj::
  7133. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7134. /Fo"$(OBJ_PATH)\$O/"
  7135. /FC
  7136. $(EX_CXX_COMPILER_FLAGS: =
  7137. )
  7138. $<
  7139. <<$(BUILD_NOKEEP)
  7140.  
  7141. !endif
  7142.  
  7143. !if !$(USE_OBJECT_ROOT)
  7144.  
  7145. {..\$(TARGET_DIRECTORY)\}.cxx{$O}.obj::
  7146. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7147. /Fo"$(MAKEDIR)\$O/"
  7148. /FC
  7149. $(EX_CXX_COMPILER_FLAGS: =
  7150. )
  7151. $<
  7152. <<$(BUILD_NOKEEP)
  7153.  
  7154. !endif
  7155.  
  7156. !if $(USE_OBJECT_ROOT)
  7157.  
  7158. {..\$(TARGET_DIRECTORY)\}.cxx{$(OBJ_PATH)\$O}.obj::
  7159. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7160. /Fo"$(OBJ_PATH)\$O/"
  7161. /FC
  7162. $(EX_CXX_COMPILER_FLAGS: =
  7163. )
  7164. $<
  7165. <<$(BUILD_NOKEEP)
  7166.  
  7167. !endif
  7168.  
  7169. !if !$(USE_OBJECT_ROOT)
  7170.  
  7171. {$O}.cpp{$O}.obj::
  7172. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7173. /Fo"$(MAKEDIR)\$O/"
  7174. /FC
  7175. $(CXX_COMPILER_FLAGS: =
  7176. )
  7177. $<
  7178. <<$(BUILD_NOKEEP)
  7179.  
  7180. !endif
  7181.  
  7182. !if $(USE_OBJECT_ROOT)
  7183.  
  7184. {$(OBJ_PATH)\$O}.cpp{$(OBJ_PATH)\$O}.obj::
  7185. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7186. /Fo"$(OBJ_PATH)\$O/"
  7187. /FC
  7188. $(CXX_COMPILER_FLAGS: =
  7189. )
  7190. $<
  7191. <<$(BUILD_NOKEEP)
  7192.  
  7193. !endif
  7194.  
  7195. !if !$(USE_OBJECT_ROOT)
  7196.  
  7197. {..\}.cpp{$O}.obj::
  7198. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7199. /Fo"$(MAKEDIR)\$O/"
  7200. /FC
  7201. $(CXX_COMPILER_FLAGS: =
  7202. )
  7203. $<
  7204. <<$(BUILD_NOKEEP)
  7205.  
  7206. !endif
  7207.  
  7208. !if $(USE_OBJECT_ROOT)
  7209.  
  7210. {..\}.cpp{$(OBJ_PATH)\$O}.obj::
  7211. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7212. /Fo"$(OBJ_PATH)\$O/"
  7213. /FC
  7214. $(CXX_COMPILER_FLAGS: =
  7215. )
  7216. $<
  7217. <<$(BUILD_NOKEEP)
  7218.  
  7219. !endif
  7220.  
  7221. !if !$(USE_OBJECT_ROOT)
  7222.  
  7223. {..\$(TARGET_DIRECTORY)\}.cpp{$O}.obj::
  7224. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7225. /Fo"$(MAKEDIR)\$O/"
  7226. /FC
  7227. $(CXX_COMPILER_FLAGS: =
  7228. )
  7229. $<
  7230. <<$(BUILD_NOKEEP)
  7231.  
  7232. !endif
  7233.  
  7234. !if $(USE_OBJECT_ROOT)
  7235.  
  7236. {..\$(TARGET_DIRECTORY)\}.cpp{$(OBJ_PATH)\$O}.obj::
  7237. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7238. /Fo"$(OBJ_PATH)\$O/"
  7239. /FC
  7240. $(CXX_COMPILER_FLAGS: =
  7241. )
  7242. $<
  7243. <<$(BUILD_NOKEEP)
  7244.  
  7245. !endif
  7246.  
  7247. !if !$(USE_OBJECT_ROOT)
  7248.  
  7249. {}.cxx{$O}.obj::
  7250. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7251. /Fo"$(MAKEDIR)\$O/"
  7252. /FC
  7253. $(EX_CXX_COMPILER_FLAGS: =
  7254. )
  7255. $<
  7256. <<$(BUILD_NOKEEP)
  7257.  
  7258. !endif
  7259.  
  7260. !if $(USE_OBJECT_ROOT)
  7261.  
  7262. {}.cxx{$(OBJ_PATH)\$O}.obj::
  7263. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7264. /Fo"$(OBJ_PATH)\$O/"
  7265. /FC
  7266. $(EX_CXX_COMPILER_FLAGS: =
  7267. )
  7268. $<
  7269. <<$(BUILD_NOKEEP)
  7270.  
  7271. !endif
  7272.  
  7273. !if !$(USE_OBJECT_ROOT)
  7274.  
  7275. {$(TARGET_DIRECTORY)\}.cxx{$O}.obj::
  7276. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7277. /Fo"$(MAKEDIR)\$O/"
  7278. /FC
  7279. $(EX_CXX_COMPILER_FLAGS: =
  7280. )
  7281. $<
  7282. <<$(BUILD_NOKEEP)
  7283.  
  7284. !endif
  7285.  
  7286. !if $(USE_OBJECT_ROOT)
  7287.  
  7288. {$(TARGET_DIRECTORY)\}.cxx{$(OBJ_PATH)\$O}.obj::
  7289. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7290. /Fo"$(OBJ_PATH)\$O/"
  7291. /FC
  7292. $(EX_CXX_COMPILER_FLAGS: =
  7293. )
  7294. $<
  7295. <<$(BUILD_NOKEEP)
  7296.  
  7297. !endif
  7298.  
  7299. !if !$(USE_OBJECT_ROOT)
  7300.  
  7301. {}.cpp{$O}.obj::
  7302. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7303. /Fo"$(MAKEDIR)\$O/"
  7304. /FC
  7305. $(EX_CXX_COMPILER_FLAGS: =
  7306. )
  7307. $<
  7308. <<$(BUILD_NOKEEP)
  7309.  
  7310. !endif
  7311.  
  7312. !if $(USE_OBJECT_ROOT)
  7313.  
  7314. {}.cpp{$(OBJ_PATH)\$O}.obj::
  7315. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7316. /Fo"$(OBJ_PATH)\$O/"
  7317. /FC
  7318. $(EX_CXX_COMPILER_FLAGS: =
  7319. )
  7320. $<
  7321. <<$(BUILD_NOKEEP)
  7322.  
  7323. !endif
  7324.  
  7325. !if !$(USE_OBJECT_ROOT)
  7326.  
  7327. {$(TARGET_DIRECTORY)\}.cpp{$O}.obj::
  7328. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7329. /Fo"$(MAKEDIR)\$O/"
  7330. /FC
  7331. $(EX_CXX_COMPILER_FLAGS: =
  7332. )
  7333. $<
  7334. <<$(BUILD_NOKEEP)
  7335.  
  7336. !endif
  7337.  
  7338. !if $(USE_OBJECT_ROOT)
  7339.  
  7340. {$(TARGET_DIRECTORY)\}.cpp{$(OBJ_PATH)\$O}.obj::
  7341. $(CXX_COMPILER_NAME) @<<$(CL_RSP)
  7342. /Fo"$(OBJ_PATH)\$O/"
  7343. /FC
  7344. $(EX_CXX_COMPILER_FLAGS: =
  7345. )
  7346. $<
  7347. <<$(BUILD_NOKEEP)
  7348.  
  7349. !endif
  7350.  
  7351. {..\}.cxx{}.cod:
  7352. $(CXX_COMPILER_NAME) @<<$(CLCOD_RSP) /FAsc /FC
  7353. $(EX_CXX_COMPILER_FLAGS_COD)
  7354. $<
  7355. <<Keep
  7356.  
  7357. {..\}.cxx{}.pp:
  7358. $(CXX_COMPILER_NAME) @<<$(CL_RSP) /E /FC $< > $@
  7359. $(EX_CXX_COMPILER_FLAGS_PP)
  7360. <<Keep
  7361.  
  7362. {..\}.cpp{}.cod:
  7363. $(CXX_COMPILER_NAME) @<<$(CLCOD_RSP) /FAsc /FC
  7364. $(EX_CXX_COMPILER_FLAGS_COD)
  7365. $<
  7366. <<Keep
  7367.  
  7368. {..\}.cpp{}.pp:
  7369. $(CXX_COMPILER_NAME) @<<$(CL_RSP) /E /FC $< > $@
  7370. $(EX_CXX_COMPILER_FLAGS_PP)
  7371. <<Keep
  7372.  
  7373. {}.cxx{}.cod:
  7374. $(CXX_COMPILER_NAME) @<<$(CLCOD_RSP) /FAsc /FC $<
  7375. $(EX_CXX_COMPILER_FLAGS_COD)
  7376. <<Keep
  7377.  
  7378. {}.cxx{}.pp:
  7379. $(CXX_COMPILER_NAME) @<<$(CL_RSP) /E /FC $< > $@
  7380. $(EX_CXX_COMPILER_FLAGS_PP)
  7381. <<Keep
  7382.  
  7383. {}.cpp{}.cod:
  7384. $(CXX_COMPILER_NAME) @<<$(CLCOD_RSP) /FAsc /FC $<
  7385. $(EX_CXX_COMPILER_FLAGS_COD)
  7386. <<Keep
  7387.  
  7388. {}.cpp{}.pp:
  7389. $(CXX_COMPILER_NAME) @<<$(CL_RSP) /E /FC $< > $@
  7390. $(EX_CXX_COMPILER_FLAGS_PP)
  7391. <<Keep
  7392.  
  7393. !if !$(USE_OBJECT_ROOT)
  7394.  
  7395. {..\}.c{$O}.obj::
  7396. $(C_COMPILER_NAME) @<<$(CL_RSP)
  7397. /Fo"$(MAKEDIR)\$O/"
  7398. /FC
  7399. $(USECXX_FLAG)
  7400. $(EX_C_COMPILER_FLAGS)
  7401. $<
  7402. <<$(BUILD_NOKEEP)
  7403.  
  7404. !endif
  7405.  
  7406. !if $(USE_OBJECT_ROOT)
  7407.  
  7408. {..\}.c{$(OBJ_PATH)\$O}.obj::
  7409. $(C_COMPILER_NAME) @<<$(CL_RSP)
  7410. /Fo"$(OBJ_PATH)\$O/"
  7411. /FC
  7412. $(USECXX_FLAG)
  7413. $(EX_C_COMPILER_FLAGS)
  7414. $<
  7415. <<$(BUILD_NOKEEP)
  7416.  
  7417. !endif
  7418.  
  7419. !if !$(USE_OBJECT_ROOT)
  7420.  
  7421. {..\$(TARGET_DIRECTORY)\}.c{$O}.obj::
  7422. $(C_COMPILER_NAME) @<<$(CL_RSP)
  7423. /Fo"$(MAKEDIR)\$O/"
  7424. /FC
  7425. $(USECXX_FLAG)
  7426. $(EX_C_COMPILER_FLAGS)
  7427. $<
  7428. <<$(BUILD_NOKEEP)
  7429.  
  7430. !endif
  7431.  
  7432. !if $(USE_OBJECT_ROOT)
  7433.  
  7434. {..\$(TARGET_DIRECTORY)\}.c{$(OBJ_PATH)\$O}.obj::
  7435. $(C_COMPILER_NAME) @<<$(CL_RSP)
  7436. /Fo"$(OBJ_PATH)\$O/"
  7437. /FC
  7438. $(USECXX_FLAG)
  7439. $(EX_C_COMPILER_FLAGS)
  7440. $<
  7441. <<$(BUILD_NOKEEP)
  7442.  
  7443. !endif
  7444.  
  7445. !if !$(USE_OBJECT_ROOT)
  7446.  
  7447. {$O}.c{$O}.obj::
  7448. $(C_COMPILER_NAME) @<<$(CL_RSP)
  7449. /Fo"$(MAKEDIR)\$O/"
  7450. /FC
  7451. $(USECXX_FLAG)
  7452. $(EX_C_COMPILER_FLAGS)
  7453. $<
  7454. <<$(BUILD_NOKEEP)
  7455.  
  7456. !endif
  7457.  
  7458. !if $(USE_OBJECT_ROOT)
  7459.  
  7460. {$(OBJ_PATH)\$O}.c{$(OBJ_PATH)\$O}.obj::
  7461. $(C_COMPILER_NAME) @<<$(CL_RSP)
  7462. /Fo"$(OBJ_PATH)\$O/"
  7463. /FC
  7464. $(USECXX_FLAG)
  7465. $(EX_C_COMPILER_FLAGS)
  7466. $<
  7467. <<$(BUILD_NOKEEP)
  7468.  
  7469. !endif
  7470.  
  7471. !if !$(USE_OBJECT_ROOT)
  7472.  
  7473. {}.c{$O}.obj::
  7474. $(C_COMPILER_NAME) @<<$(CL_RSP)
  7475. /Fo"$(MAKEDIR)\$O/"
  7476. /FC
  7477. $(USECXX_FLAG)
  7478. $(EX_C_COMPILER_FLAGS)
  7479. $<
  7480. <<$(BUILD_NOKEEP)
  7481.  
  7482. !endif
  7483.  
  7484. !if $(USE_OBJECT_ROOT)
  7485.  
  7486. {}.c{$(OBJ_PATH)\$O}.obj::
  7487. $(C_COMPILER_NAME) @<<$(CL_RSP)
  7488. /Fo"$(OBJ_PATH)\$O/"
  7489. /FC
  7490. $(USECXX_FLAG)
  7491. $(EX_C_COMPILER_FLAGS)
  7492. $<
  7493. <<$(BUILD_NOKEEP)
  7494.  
  7495. !endif
  7496.  
  7497. !if !$(USE_OBJECT_ROOT)
  7498.  
  7499. {$(TARGET_DIRECTORY)\}.c{$O}.obj::
  7500. $(C_COMPILER_NAME) @<<$(CL_RSP)
  7501. /Fo"$(MAKEDIR)\$O/"
  7502. /FC
  7503. $(USECXX_FLAG)
  7504. $(EX_C_COMPILER_FLAGS)
  7505. $<
  7506. <<$(BUILD_NOKEEP)
  7507.  
  7508. !endif
  7509.  
  7510. !if $(USE_OBJECT_ROOT)
  7511.  
  7512. {$(TARGET_DIRECTORY)\}.c{$(OBJ_PATH)\$O}.obj::
  7513. $(C_COMPILER_NAME) @<<$(CL_RSP)
  7514. /Fo"$(OBJ_PATH)\$O/"
  7515. /FC
  7516. $(USECXX_FLAG)
  7517. $(EX_C_COMPILER_FLAGS)
  7518. $<
  7519. <<$(BUILD_NOKEEP)
  7520.  
  7521. !endif
  7522.  
  7523. {..\}.c{}.cod:
  7524. $(C_COMPILER_NAME) @<<$(CLCOD_RSP) /FAsc /FC $(USECXX_FLAG) $<
  7525. $(EX_C_COMPILER_FLAGS_COD)
  7526. <<Keep
  7527.  
  7528. !if !$(USE_OBJECT_ROOT)
  7529.  
  7530. {$O}.c{}.cod:
  7531. $(C_COMPILER_NAME) @<<$(CLCOD_RSP) /FAsc /FC $(USECXX_FLAG) $<
  7532. $(EX_C_COMPILER_FLAGS_COD)
  7533. <<Keep
  7534.  
  7535. !endif
  7536.  
  7537. {..\$(TARGET_DIRECTORY)\}.c{}.cod:
  7538. $(C_COMPILER_NAME) @<<$(CLCOD_RSP) /FAsc /FC $(USECXX_FLAG) $<
  7539. $(EX_C_COMPILER_FLAGS_COD)
  7540. <<Keep
  7541.  
  7542. !if !$(USE_OBJECT_ROOT)
  7543.  
  7544. {$O}.c{}.pp:
  7545. $(C_COMPILER_NAME) @<<$(CL_RSP) /E /FC $(USECXX_FLAG) $< > $@
  7546. $(EX_C_COMPILER_FLAGS_PP)
  7547. <<Keep
  7548.  
  7549. !endif
  7550.  
  7551. !if $(USE_OBJECT_ROOT)
  7552.  
  7553. {$(OBJ_PATH)\$O}.c{}.pp:
  7554. $(C_COMPILER_NAME) @<<$(CL_RSP) /E /FC $(USECXX_FLAG) $< > $@
  7555. $(EX_C_COMPILER_FLAGS_PP)
  7556. <<Keep
  7557.  
  7558. !endif
  7559.  
  7560. {..\}.c{}.pp:
  7561. $(C_COMPILER_NAME) @<<$(CL_RSP) /E /FC $(USECXX_FLAG) $< > $@
  7562. $(EX_C_COMPILER_FLAGS_PP)
  7563. <<Keep
  7564.  
  7565. {..\$(TARGET_DIRECTORY)\}.c{}.pp:
  7566. $(C_COMPILER_NAME) @<<$(CL_RSP) /E /FC $(USECXX_FLAG) $< > $@
  7567. $(EX_C_COMPILER_FLAGS)
  7568. <<Keep
  7569.  
  7570. {}.c{}.cod:
  7571. $(C_COMPILER_NAME) @<<$(CLCOD_RSP) /FAsc /FC $(USECXX_FLAG) $<
  7572. $(EX_C_COMPILER_FLAGS_COD)
  7573. <<Keep
  7574.  
  7575. {$(TARGET_DIRECTORY)\}.c{}.cod:
  7576. $(C_COMPILER_NAME) @<<$(CLCOD_RSP) /FAsc /FC $(USECXX_FLAG) $<
  7577. <<Keep
  7578.  
  7579. {}.c{}.pp:
  7580. $(C_COMPILER_NAME) @<<$(CL_RSP) /E /FC $(USECXX_FLAG) $< > $@
  7581. $(EX_C_COMPILER_FLAGS_PP)
  7582. <<Keep
  7583.  
  7584. {$(TARGET_DIRECTORY)\}.c{}.pp:
  7585. $(C_COMPILER_NAME) @<<$(CL_RSP) /E /FC $(USECXX_FLAG) $< > $@
  7586. $(EX_C_COMPILER_FLAGS_PP)
  7587. <<Keep
  7588.  
  7589. {}.c{$(TARGET_DIRECTORY)\}.pp:
  7590. $(C_COMPILER_NAME) @<<$(CL_RSP) /E /FC $(USECXX_FLAG) $< > $@
  7591. $(EX_C_COMPILER_FLAGS_PP)
  7592. <<Keep
  7593.  
  7594. # } }
  7595.  
  7596. #
  7597. # C# compiler rules
  7598. #
  7599.  
  7600. EX_MANAGED_COMPILER_FLAGS=$(MANAGED_STD_FLAGS)
  7601.  
  7602. !if 0
  7603. !if $(USE_OBJECT_ROOT)
  7604.  
  7605. {..}.cs{$(OBJ_PATH)\$O}.dll::
  7606. @$(_TYPE) <<$(ECHO_RSP)
  7607. $(ECHO_MSG)
  7608. @$(CS_COMPILER_NAME) @<<$(CS_RSP)
  7609. $(EX_MANAGED_COMPILER_FLAGS)
  7610. $<
  7611. <<$(BUILD_NOKEEP)
  7612.  
  7613. !endif
  7614.  
  7615. !if $(USE_OBJECT_ROOT)
  7616.  
  7617. {..}.vb{$(OBJ_PATH)\$O}.dll::
  7618. @$(_TYPE) <<$(ECHO_RSP)
  7619. $(ECHO_MSG)
  7620. @$(VB_NET_COMPILER_NAME) @<<$(VB_RSP)
  7621. $(EX_MANAGED_COMPILER_FLAGS)
  7622. $<
  7623. <<$(BUILD_NOKEEP)
  7624.  
  7625. !endif
  7626. !endif
  7627.  
  7628. #
  7629. # resgen rules
  7630. #
  7631.  
  7632. !if !$(USE_OBJECT_ROOT)
  7633.  
  7634. .resz{$O}.resources:
  7635. resxgen $< $*.resx
  7636. resgen $*.resx $@
  7637.  
  7638. .resx{$O}.resources:
  7639. resgen $< $@
  7640.  
  7641. .txt{$O}.resources:
  7642. resgen $< $@
  7643.  
  7644. !endif
  7645.  
  7646. !if $(USE_OBJECT_ROOT)
  7647.  
  7648. .resz{$(OBJ_PATH)\$O}.resources:
  7649. resxgen $< $*.resx
  7650. resgen $*.resx $@
  7651.  
  7652. .resx{$(OBJ_PATH)\$O}.resources:
  7653. resgen $< $@
  7654.  
  7655. .txt{$(OBJ_PATH)\$O}.resources:
  7656. resgen $< $@
  7657.  
  7658. !endif
  7659.  
  7660. !if 0
  7661.  
  7662. #
  7663. # SDL proxy generation rules
  7664. #
  7665. .sdl.cs::
  7666. webserviceutil /c:proxy /path:$<
  7667.  
  7668. !endif
  7669.  
  7670. !if "$(NTNOFUZZYLOOKUP)" == "1"
  7671. LIBRARY_OBJS=
  7672. !else
  7673. LIBRARY_OBJS = $(LIBRARY_OBJS) $(HEADEROBJNAME)
  7674. !endif
  7675.  
  7676. !ifdef USE_INCREMENTAL_LINKING
  7677. IMPLIB_DEPEND =
  7678. !else
  7679. IMPLIB_DEPEND = $(LIBRARY_OBJS)
  7680. !endif
  7681.  
  7682. #
  7683. # inference rules for preprocessing manifests
  7684. # It would be nice to go from .manifest to .manifest.obj, but nmake doesn't work that way.
  7685. # There is some precedent for going from .src to .manifest, but I'd rather generated files
  7686. # end in obj. But we can't go from .manifest to .manifestobj either, because of the case
  7687. # of manifests not in resources.
  7688. #
  7689. # .man is for fitting in 8.3
  7690. #
  7691. .SUFFIXES: .manifest .man .o_manifest
  7692.  
  7693. # This string is needed in at least four places in the tree, so factor it to here.
  7694. SYSTEM_COMPATIBLE_ASSEMBLY_NAME=Microsoft.Windows.SystemCompatible
  7695. DEFINE_SYSTEM_COMPATIBLE_ASSEMBLY_NAME=\
  7696. -DSYSTEM_COMPATIBLE_ASSEMBLY_NAME="\"$(SYSTEM_COMPATIBLE_ASSEMBLY_NAME)\"" \
  7697. -DLSYSTEM_COMPATIBLE_ASSEMBLY_NAME=L"\"$(SYSTEM_COMPATIBLE_ASSEMBLY_NAME)\""
  7698.  
  7699. SYSTEM_COMPATIBLE_ASSEMBLY_VERSION=6.0
  7700. SYSTEM_COMPATIBLE_ASSEMBLY_VERSION_PART_3=$(VER_PRODUCTBUILD)
  7701. SYSTEM_COMPATIBLE_ASSEMBLY_VERSION_PART_4=$(VER_PRODUCTBUILD_QFE)
  7702.  
  7703. SXS_MANIFEST_DEFINES= \
  7704. -DSXS_PROCESSOR_ARCHITECTURE="\"$(SXS_PROCESSOR_ARCHITECTURE)\"" \
  7705. -DSXS_TARGET="\"$(TARGETNAME).$(TARGETEXT:lib=dll)\"" \
  7706. $(DEFINE_SYSTEM_COMPATIBLE_ASSEMBLY_NAME) \
  7707. $(SXS_MANIFEST_DEFINES)
  7708. !ifdef SXS_AUTO_VERSION
  7709. # Some assemblies shipped with policy versions unrelated to their manifest version --
  7710. # in the event that the policy is now at a higher version than the corresponding
  7711. # assembly, we won't override it using our default behavior of using a policy version
  7712. # equal to the current assembly version. In this case provide an override mechanism:
  7713. # in sources set SXS_OVERRIDE_POLICY_VERSION=(major).(minor) and also use
  7714. # SXS_OVERRIDE_POLICY_VERSION as the version in your manifest and we will take care
  7715. # of adding the third and fourth parts and making it a string.
  7716. SXS_MANIFEST_DEFINES=$(SXS_MANIFEST_DEFINES) -DSXS_MAJMIN_ASSEMBLY_VERSION=$(SXS_ASSEMBLY_VERSION) \
  7717. -DSXS_OVERRIDE_POLICY_VERSION_MAJMIN=$(SXS_OVERRIDE_POLICY_VERSION)
  7718. !else
  7719. SXS_MANIFEST_DEFINES=$(SXS_MANIFEST_DEFINES) -DSXS_ASSEMBLY_VERSION="\"$(SXS_ASSEMBLY_FULL_VERSION)\""
  7720. !endif
  7721.  
  7722. !if "$(SXS_ASSEMBLY_LANGUAGE)" != ""
  7723. SXS_MANIFEST_DEFINES=-DSXS_ASSEMBLY_LANGUAGE="\"$(SXS_ASSEMBLY_LANGUAGE)\"" $(SXS_MANIFEST_DEFINES)
  7724. SXS_MANIFEST_DEFINES=-DSXS_LANGUAGE="\"$(SXS_ASSEMBLY_LANGUAGE)\"" $(SXS_MANIFEST_DEFINES)
  7725. !endif
  7726.  
  7727. !if "$(SXS_ASSEMBLY_NAME)" != ""
  7728. SXS_MANIFEST_DEFINES=-DSXS_ASSEMBLY_NAME="\"$(SXS_ASSEMBLY_NAME)\"" $(SXS_MANIFEST_DEFINES)
  7729. !endif
  7730.  
  7731.  
  7732. #MANIFEST_PREPROCESSOR_NAME=$(C_PREPROCESSOR_NAME)
  7733. # $(TARGET_CPP) does not include /FIwarning.h.
  7734. # Otherwise we have to filter the data through, like Perl:
  7735. # while (<>) {
  7736. # if (!/^#pragma.+/ && !/^$/) {
  7737. # print;
  7738. # }
  7739. #}
  7740. !ifndef MANIFEST_PREPROCESSOR_NAME
  7741. !ifdef SXS_AUTO_VERSION
  7742. MANIFEST_PREPROCESSOR_NAME=$(C_PREPROCESSOR_NAME)
  7743. !else
  7744. MANIFEST_PREPROCESSOR_NAME=preprocessor
  7745. !endif
  7746. !endif
  7747.  
  7748. #
  7749. # Auto versioning can be made simpler.
  7750. # Perl and the C preprocessor can be removed.
  7751. # The original author did not seem to know about LINKER_FLAGS.
  7752. #
  7753. !ifdef SXS_AUTO_VERSION
  7754. MANIFEST_VERSION_HEADER=$(SDK_INC_PATH)\sxsmanifest.h
  7755. MANIFEST_PREPROCESSOR_FLAGS=$(MANIFEST_PREPROCESSOR_FLAGS) \
  7756. /EP /nologo /I$(SDK_INC_PATH)
  7757. MANIFEST_TRIMMER=$(_PERL) -ne "print if (!/^.pragma/ && /^.+/)"
  7758. MANIFEST_PREPROCESS=$(MANIFEST_PREPROCESSOR_NAME) \
  7759. $(MANIFEST_PREPROCESSOR_FLAGS) /FI$(MANIFEST_VERSION_HEADER) \
  7760. $(SXS_MANIFEST_DEFINES) $< | $(MANIFEST_TRIMMER) > [email protected]
  7761. !else
  7762. MANIFEST_PREPROCESS=$(MANIFEST_PREPROCESSOR_NAME) -o [email protected] -i $< $(SXS_MANIFEST_DEFINES)
  7763. !endif
  7764.  
  7765. #
  7766. # .manifest -> .man
  7767. #
  7768. {}.manifest{$(OBJ_PATH)\$O}.man:
  7769. -$(_DEL)
  7770. $(MANIFEST_PREPROCESS)
  7771. $(_MOVE)
  7772.  
  7773. {..}.manifest{$(OBJ_PATH)\$O}.man:
  7774. -$(_DEL)
  7775. $(MANIFEST_PREPROCESS)
  7776. $(_MOVE)
  7777.  
  7778. {..\..}.manifest{$(OBJ_PATH)\$O}.man:
  7779. -$(_DEL)
  7780. $(MANIFEST_PREPROCESS)
  7781. $(_MOVE)
  7782.  
  7783. {$(SXS_MANIFEST_SOURCE)}.manifest{$(OBJ_PATH)\$O}.man:
  7784. -$(_DEL)
  7785. $(MANIFEST_PREPROCESS)
  7786. $(_MOVE)
  7787.  
  7788. #
  7789. # .manifest -> .manifest
  7790. #
  7791. {}.manifest{$(OBJ_PATH)\$O}.manifest:
  7792. -$(_DEL)
  7793. $(MANIFEST_PREPROCESS)
  7794. $(_MOVE)
  7795.  
  7796. {..}.manifest{$(OBJ_PATH)\$O}.manifest:
  7797. -$(_DEL)
  7798. $(MANIFEST_PREPROCESS)
  7799. $(_MOVE)
  7800.  
  7801. {..\..}.manifest{$(OBJ_PATH)\$O}.manifest:
  7802. -$(_DEL)
  7803. $(MANIFEST_PREPROCESS)
  7804. $(_MOVE)
  7805.  
  7806. {$(SXS_MANIFEST_SOURCE)}.manifest{$(OBJ_PATH)\$O}.manifest:
  7807. -$(_DEL)
  7808. $(MANIFEST_PREPROCESS)
  7809. $(_MOVE)
  7810.  
  7811. #
  7812. # .manifest -> .o_manifest
  7813. #
  7814. {}.manifest{$(OBJ_PATH)\$O}.o_manifest:
  7815. -$(_DEL)
  7816. $(MANIFEST_PREPROCESS)
  7817. $(_MOVE)
  7818.  
  7819. {..}.manifest{$(OBJ_PATH)\$O}.o_manifest:
  7820. -$(_DEL)
  7821. $(MANIFEST_PREPROCESS)
  7822. $(_MOVE)
  7823.  
  7824. {..\..}.manifest{$(OBJ_PATH)\$O}.o_manifest:
  7825. -$(_DEL)
  7826. $(MANIFEST_PREPROCESS)
  7827. $(_MOVE)
  7828.  
  7829. {$(SXS_MANIFEST_SOURCE)}.manifest{$(OBJ_PATH)\$O}.o_manifest:
  7830. -$(_DEL)
  7831. $(MANIFEST_PREPROCESS)
  7832. $(_MOVE)
  7833.  
  7834. #
  7835. # Standard inference rule for generating machine specific def files.
  7836. #
  7837.  
  7838. .SUFFIXES: .def .src
  7839.  
  7840. !if !$(USE_OBJECT_ROOT)
  7841.  
  7842. {..\$(TARGET_DIRECTORY)\}.src{$O}.def:
  7843. @$(_TYPE) <<$(ECHO_RSP)
  7844. $(ECHO_MSG) /EP $<
  7845. <<$(BUILD_NOKEEP)
  7846. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7847. $(CPPXX: =
  7848. )
  7849. <<$(BUILD_NOKEEP)
  7850.  
  7851. !endif
  7852.  
  7853. !if $(USE_OBJECT_ROOT)
  7854.  
  7855. {..\$(TARGET_DIRECTORY)\}.src{$(OBJ_PATH)\$O}.def:
  7856. @$(_TYPE) <<$(ECHO_RSP)
  7857. $(ECHO_MSG) /EP $<
  7858. <<$(BUILD_NOKEEP)
  7859. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7860. $(CPPXX: =
  7861. )
  7862. <<$(BUILD_NOKEEP)
  7863.  
  7864. !endif
  7865.  
  7866. !if !$(USE_OBJECT_ROOT)
  7867.  
  7868. {..\}.src{$O}.def:
  7869. @$(_TYPE) <<$(ECHO_RSP)
  7870. $(ECHO_MSG) /EP $<
  7871. <<$(BUILD_NOKEEP)
  7872. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7873. $(CPPXX: =
  7874. )
  7875. <<$(BUILD_NOKEEP)
  7876.  
  7877. !endif
  7878.  
  7879. !if $(USE_OBJECT_ROOT)
  7880.  
  7881. {..\}.src{$(OBJ_PATH)\$O}.def:
  7882. @$(_TYPE) <<$(ECHO_RSP)
  7883. $(ECHO_MSG) /EP $<
  7884. <<$(BUILD_NOKEEP)
  7885. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7886. $(CPPXX: =
  7887. )
  7888. <<$(BUILD_NOKEEP)
  7889.  
  7890. !endif
  7891.  
  7892. !if !$(USE_OBJECT_ROOT)
  7893.  
  7894. {}.src{$O}.def:
  7895. @$(_TYPE) <<$(ECHO_RSP)
  7896. $(ECHO_MSG) /EP $<
  7897. <<$(BUILD_NOKEEP)
  7898. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7899. $(CPPXX: =
  7900. )
  7901. <<$(BUILD_NOKEEP)
  7902.  
  7903. !endif
  7904.  
  7905. !if $(USE_OBJECT_ROOT)
  7906.  
  7907. {}.src{$(OBJ_PATH)\$O}.def:
  7908. @$(_TYPE) <<$(ECHO_RSP)
  7909. $(ECHO_MSG) /EP $<
  7910. <<$(BUILD_NOKEEP)
  7911. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7912. $(CPPXX: =
  7913. )
  7914. <<$(BUILD_NOKEEP)
  7915.  
  7916. !endif
  7917.  
  7918. !if !$(USE_OBJECT_ROOT)
  7919.  
  7920. {..\}.def{$O}.def:
  7921. @$(_TYPE) <<$(ECHO_RSP)
  7922. $(ECHO_MSG) /EP $<
  7923. <<$(BUILD_NOKEEP)
  7924. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7925. $(CPPXX: =
  7926. )
  7927. <<$(BUILD_NOKEEP)
  7928.  
  7929. !endif
  7930.  
  7931. !if $(USE_OBJECT_ROOT)
  7932.  
  7933. {..\}.def{$(OBJ_PATH)\$O}.def:
  7934. @$(_TYPE) <<$(ECHO_RSP)
  7935. $(ECHO_MSG) /EP $<
  7936. <<$(BUILD_NOKEEP)
  7937. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7938. $(CPPXX: =
  7939. )
  7940. <<$(BUILD_NOKEEP)
  7941.  
  7942. !endif
  7943.  
  7944. !if !$(USE_OBJECT_ROOT)
  7945.  
  7946. {}.def{$O}.def:
  7947. @$(_TYPE) <<$(ECHO_RSP)
  7948. $(ECHO_MSG) /EP $<
  7949. <<$(BUILD_NOKEEP)
  7950. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7951. $(CPPXX: =
  7952. )
  7953. <<$(BUILD_NOKEEP)
  7954.  
  7955. !endif
  7956.  
  7957. !if $(USE_OBJECT_ROOT)
  7958.  
  7959. {}.def{$(OBJ_PATH)\$O}.def:
  7960. @$(_TYPE) <<$(ECHO_RSP)
  7961. $(ECHO_MSG) /EP $<
  7962. <<$(BUILD_NOKEEP)
  7963. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7964. $(CPPXX: =
  7965. )
  7966. <<$(BUILD_NOKEEP)
  7967.  
  7968. !endif
  7969.  
  7970. !if !$(USE_OBJECT_ROOT)
  7971.  
  7972. # one more level down for HALS
  7973. {..\..\}.src{$O}.def:
  7974. @$(_TYPE) <<$(ECHO_RSP)
  7975. $(ECHO_MSG) /EP $<
  7976. <<$(BUILD_NOKEEP)
  7977. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7978. $(CPPXX: =
  7979. )
  7980. <<$(BUILD_NOKEEP)
  7981.  
  7982. !endif
  7983.  
  7984. !if $(USE_OBJECT_ROOT)
  7985.  
  7986. {..\..\}.src{$(OBJ_PATH)\$O}.def:
  7987. @$(_TYPE) <<$(ECHO_RSP)
  7988. $(ECHO_MSG) /EP $<
  7989. <<$(BUILD_NOKEEP)
  7990. @$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $@
  7991. $(CPPXX: =
  7992. )
  7993. <<$(BUILD_NOKEEP)
  7994.  
  7995. !endif
  7996.  
  7997. !ifdef NO_BROWSER_FILE
  7998. BROWSERFILE=
  7999. !else
  8000. ! ifdef BROWSER_INFO
  8001. ! ifndef BROWSERFILE
  8002. ! if "$(TARGETNAME)" == ""
  8003. BROWSERFILE=
  8004. ! else
  8005. BROWSERFILE=$(TARGETPATH)\$(TARGET_DIRECTORY)\$(TARGETNAME).bsc
  8006. ! endif
  8007. ! endif
  8008. ! else
  8009. BROWSERFILE=
  8010. ! endif
  8011. !endif
  8012.  
  8013. !if defined (USE_LINT) && ("$(LINT_TYPE)" != "all")
  8014.  
  8015. !if $(USE_OBJECT_ROOT)
  8016.  
  8017. {}.cxx{$(OBJ_PATH)\$O}.lob:
  8018. ! if "$(LINT_TYPE)" != "lob"
  8019. @echo done >$@
  8020. ! endif
  8021. $(LINT_CMD) $<
  8022.  
  8023. {$(TARGET_DIRECTORY)}.cxx{$(OBJ_PATH)\$O}.lob:
  8024. ! if "$(LINT_TYPE)" != "lob"
  8025. @echo done >$@
  8026. ! endif
  8027. $(LINT_CMD) $<
  8028.  
  8029. {..}.cxx{$(OBJ_PATH)\$O}.lob:
  8030. ! if "$(LINT_TYPE)" != "lob"
  8031. @echo done >$@
  8032. ! endif
  8033. $(LINT_CMD) $<
  8034.  
  8035. {..\$(TARGET_DIRECTORY)}.cxx{$(OBJ_PATH)\$O}.lob:
  8036. ! if "$(LINT_TYPE)" != "lob"
  8037. @echo done >$@
  8038. ! endif
  8039. $(LINT_CMD) $<
  8040.  
  8041. {}.cpp{$(OBJ_PATH)\$O}.lob:
  8042. ! if "$(LINT_TYPE)" != "lob"
  8043. @echo done >$@
  8044. ! endif
  8045. $(LINT_CMD) $<
  8046.  
  8047. {$(TARGET_DIRECTORY)}.cpp{$(OBJ_PATH)\$O}.lob:
  8048. ! if "$(LINT_TYPE)" != "lob"
  8049. @echo done >$@
  8050. ! endif
  8051. $(LINT_CMD) $<
  8052.  
  8053. {..}.cpp{$(OBJ_PATH)\$O}.lob:
  8054. ! if "$(LINT_TYPE)" != "lob"
  8055. @echo done >$@
  8056. ! endif
  8057. $(LINT_CMD) $<
  8058.  
  8059. {..\$(TARGET_DIRECTORY)}.cpp{$(OBJ_PATH)\$O}.lob:
  8060. ! if "$(LINT_TYPE)" != "lob"
  8061. @echo done >$@
  8062. ! endif
  8063. $(LINT_CMD) $<
  8064.  
  8065. {}.c{$(OBJ_PATH)\$O}.lob:
  8066. ! if "$(LINT_TYPE)" != "lob"
  8067. @echo done >$@
  8068. ! endif
  8069. $(LINT_CMD) $<
  8070.  
  8071. {$(TARGET_DIRECTORY)}.c{$(OBJ_PATH)\$O}.lob:
  8072. ! if "$(LINT_TYPE)" != "lob"
  8073. @echo done >$@
  8074. ! endif
  8075. $(LINT_CMD) $<
  8076.  
  8077. {..}.c{$(OBJ_PATH)\$O}.lob:
  8078. ! if "$(LINT_TYPE)" != "lob"
  8079. @echo done >$@
  8080. ! endif
  8081. $(LINT_CMD) $<
  8082.  
  8083. {..\$(TARGET_DIRECTORY)}.c{$(OBJ_PATH)\$O}.lob:
  8084. ! if "$(LINT_TYPE)" != "lob"
  8085. @echo done >$@
  8086. !endif
  8087. $(LINT_CMD) $<
  8088.  
  8089. !endif
  8090. !endif
  8091.  
  8092.  
  8093. #
  8094. # Standard list of targets: all. all is the default target.
  8095. #
  8096.  
  8097. !IFNDEF PASS0ONLY
  8098. all: \
  8099. !if !defined(BUILD_PASS_INDEPENDENT)
  8100. PassIndependentTargets_Infs \
  8101. PassIndependentTargets_Binplace \
  8102. !endif
  8103. $(OBJ_PATH)\$O\_objects.mac \
  8104. $(OBJ_PATH)\$O\_objects.mac.verify.$(BUILD_PASS).mac \
  8105. ! ifdef DO_LANGUAGE_NEUTRAL
  8106. $(RC_CONFIG_OBJ1) \
  8107. ! ifdef DELTA_RC_CONFIG
  8108. $(RC_CONFIG_OBJ2) \
  8109. ! endif
  8110. ! endif
  8111. !ifdef _ASSEMBLY_IDENTITY
  8112. $(OBJ_PATH)\$O\_asmid.inc \
  8113. $(OBJ_PATH)\$O\_asmid.xml \
  8114. !endif
  8115. $(_O_BINARY_METADATA) \
  8116. $(NTTARGETFILE0) \
  8117. # Support to compile licensing manifest
  8118. !if defined(SLS_LICENSING_MANIFEST)
  8119. $(SLS_LICENSING_TARGETS) \
  8120. !endif
  8121. !if !defined(BUILD_PASS_INDEPENDENT)
  8122. PassIndependentTargets_Manifests \
  8123. !endif
  8124. $(WPP_TARGETS) \
  8125. $(PASS0_OBJECTS) \
  8126. !if defined(EVENTS_MANIFEST)
  8127. $(OBJ_PATH)\$O\_event_manifests \
  8128. !endif
  8129. _concurrent_midl_join \
  8130. PASS0_Pub \
  8131. PASS0_Binp \
  8132. $(PRECOMPILED_TARGET) \
  8133. $(HEADEROBJNAME) \
  8134. !if "$(XAML_COMPILATION)" == "1"
  8135. build_xaml \
  8136. !endif
  8137. !if defined(COMPILE_RESOURCES_IN_PASS1) \
  8138. || ("$(TARGETTYPE)" != "DYNLINK" \
  8139. && "$(TARGETTYPE)" != "EXPORT_DRIVER" \
  8140. && "$(TARGETTYPE)" != "PROGLIB")
  8141. $(_RES_FILE) \
  8142. !endif
  8143. build_objects \
  8144. $(SXS_MANIFEST_OBJ1) \
  8145. $(SXS_MANIFEST_OBJ2) \
  8146. $(SXS_PDB_NAMER) \
  8147. $(TARGETLOBFILES1) \
  8148. $(TARGETLIBFILES) \
  8149. $(NTTARGETFILE1) \
  8150. !if defined(DO_LANGUAGE_NEUTRAL) && !defined(NOLINK) && "$(MYMUILINK)" != "" && "$(TARGET)" != ""
  8151. $(TARGET).mui \
  8152. !endif
  8153. !if defined(DO_LSBUILD) && !defined(NOLINK) && "$(LCG_DEPEND)" != ""
  8154. $(LCG_TARGET) \
  8155. ! endif
  8156. $(TARGETEXEFILES) \
  8157. $(BROWSERFILE) \
  8158. $(TARGETLOBFILES2) \
  8159. PASS1_Pub \
  8160. PASS1_Binp \
  8161. build_umobjects \
  8162. !ifndef NOLINK
  8163. $(UMEXEFILES) \
  8164. !endif
  8165. $(NTTARGETFILES) \
  8166. !if "$(BUILD_PASS)" == "PASS2" || "$(BUILD_PASS)" == "PASSALL"
  8167. $(NTTARGETFILE2) \
  8168. !endif
  8169. !if !defined(NOLINK)
  8170. !endif
  8171. !if ("$(MAKEDLL)" != "" && !defined(NOLINK))
  8172. $(_O_ASMMETA) \
  8173. !else
  8174. ! if "$(ASMMETA_INPUT)" != "" && "$(TARGETTYPE)" == "NOTARGET"
  8175. ! if exist($(ASMMETA_INPUT))
  8176. $(_O_ASMMETA) \
  8177. ! endif
  8178. ! endif
  8179. !endif
  8180. PASS2_Binp \
  8181. $(SN_SIGN_SPEC) \
  8182. !if defined(BOOT_SIGN_SPEC)
  8183. ! if "$(BUILD_PASS)" == "PASS2"
  8184. $(BOOT_SIGN_SPEC) \
  8185. ! else
  8186. ! if defined(BOOT_LOADER_CRITICAL_MISC_FILES) && "$(BUILD_PASS)" == "PASS1"
  8187. $(BOOT_SIGN_SPEC) \
  8188. ! endif
  8189. ! endif
  8190. !endif
  8191. !if defined(WDK_MANIFEST_NAME)
  8192. ! if "$(BUILD_PASS)" == "PASS2"
  8193. $(WDK_MANIFEST_NAME) \
  8194. ! else if "$(TARGETTYPE)" == "NOTARGET" && (defined(WDKMSI) || defined(WDKFCI) || defined(WDKLCI) || defined(WDKFILES) || defined(WDKSXE) || defined(WDKBIND) || defined(WDKUI) || defined(WDKWIX) || defined(WDKUPDATE))
  8195. $(WDK_MANIFEST_NAME) \
  8196. ! else if ("$(TARGETTYPE)" == "LIBRARY" || ("$(TARGETTYPE)" == "DYNLINK" && "$(MANAGED_CODE)" == "1")) && "$(BUILD_PASS)" == "PASS1" && defined(WDKMSI) && !defined(PASS2_BINPLACE)
  8197. $(WDK_MANIFEST_NAME) \
  8198. ! endif
  8199. !endif
  8200. $(_OUTPUT_MANIFEST) \
  8201. # These are very special macros that are created based on the pass currently running
  8202. # and the content of the PASS# variants of each macro. The code block we run in each
  8203. # pass is identical and they never run at the same time, so this enables us to
  8204. # re-use as much of the infrastructure as possible.
  8205. $(LANG_MISCFILES_LOG) \
  8206. $(LOC_MISCFILES_LOG) \
  8207. $(LOC_MUI_MISCFILES_LOG) \
  8208. $(PRELOC_MISCFILES_LOG) \
  8209. $(PRELOC_MUI_MISCFILES_LOG) \
  8210. $(PRELOC_MUI_ONLY_MISCFILES_LOG) \
  8211. $(MULTI_MISCFILES_LOG) \
  8212. $(MULTI_MUI_MISCFILES_LOG) \
  8213. $(LOC_PLA_XML_FILES_LOG) \
  8214. !if "$(BUILD_PASS)" == "PASS1"
  8215. # Special target for binplacing Perf Counter files.
  8216. ! ifdef LOC_PERF_COUNTERS
  8217. binplace_loc_perf_counters \
  8218. ! endif
  8219. # Special target for binplacing MSC files.
  8220. ! ifdef LOC_MSC_FILES
  8221. binplace_loc_msc_files \
  8222. ! endif
  8223. !endif
  8224. !if !$(MISCFILES_DURING_LINK) || !defined(NOLINK)
  8225. ! if "$(MISCFILES: =)" != "" || defined(SXS_MISCFILES) || "$(_O_SXS_RESOURCES_MANIFEST)" != ""
  8226. $(MISCFILES) \
  8227. $(SXS_MISCFILES) \
  8228. $(_O_SXS_RESOURCES_MANIFEST) \
  8229. ! ifdef _NTTREE
  8230. binplace_miscfiles \
  8231. ! endif
  8232. ! endif
  8233. # Generate the files to binplace so that if they need to be built,
  8234. # nmake knows to build these files _before_ processing the macros.
  8235. $(LANG_MISCFILES) \
  8236. $(LOC_MISCFILES) \
  8237. $(LOC_MUI_MISCFILES) \
  8238. $(PRELOC_MISCFILES) \
  8239. $(PRELOC_MUI_MISCFILES) \
  8240. $(PRELOC_MUI_ONLY_MISCFILES) \
  8241. $(MULTI_MISCFILES) \
  8242. $(MULTI_MUI_MISCFILES) \
  8243. !endif
  8244. !ifdef _RUN_SXS_LOG_CMD
  8245. sxs_log_cmd \
  8246. !endif
  8247. BINARY_Pub \
  8248. !if defined(LANGUAGE_SPECIFIC_MANAGED_RESOURCES)
  8249. $(OBJ_PATH)\$O\_keyfile.al \
  8250. $(OBJ_PATH)\$O\$(TARGETNAME).resources.dll \
  8251. !endif
  8252.  
  8253.  
  8254. !if defined(_O_SXS_RESOURCES_MANIFEST)
  8255.  
  8256. $(_O_SXS_RESOURCES_MANIFEST):
  8257. set BUILDMSG=making $(@F)
  8258. -$(_DEL)
  8259. set createfile=<<[email protected]
  8260. <assembly
  8261. xmlns="urn:schemas-microsoft-com:asm.v1"
  8262. manifestVersion="1.0"
  8263. >
  8264. <assemblyIdentity
  8265. type="win32"
  8266. name="$(SXS_ASSEMBLY_NAME).Resources"
  8267. version="$(SXS_ASSEMBLY_FULL_VERSION)"
  8268. processorArchitecture="$(SXS_PROCESSOR_ARCHITECTURE)"
  8269. publicKeyToken="6595b64144ccf1df"
  8270. />
  8271. <file name="$(TARGETNAME).$(TARGETEXT).mui"/>
  8272. <memberships xmlns="urn:schemas-microsoft-com:asm.v3">
  8273. <categoryMembership>
  8274. <id
  8275. name="Microsoft.Windows.Fusion_Components_All"
  8276. version="$(VER_PRODUCTVERSION_STR)"
  8277. processorArchitecture="$(SXS_PROCESSOR_ARCHITECTURE)"
  8278. language="neutral"
  8279. buildType="$(MANIFEST_BUILD_TYPE)"
  8280. publicKeyToken="1122334455667788"
  8281. />
  8282. </categoryMembership>
  8283. </memberships>
  8284. </assembly>
  8285. <<Keep
  8286. $(_MOVE)
  8287.  
  8288. !endif
  8289.  
  8290. # make a target that always build
  8291. sxs_log_cmd:
  8292. $(SXS_LOG_CMD)
  8293.  
  8294.  
  8295.  
  8296. binplace_miscfiles: $(MISCFILES) $(SXS_MISCFILES) $(_O_SXS_RESOURCES_MANIFEST)
  8297. !ifndef NO_BINPLACE
  8298. @$(_TYPE) <<$(TYPE_RESPONSE_FILE)
  8299. $(MAKEDIR) BINPLACE_MISCFILES=$**
  8300. <<$(BUILD_NOKEEP)
  8301. $(MAKE_PLACEFILE_CMD)
  8302. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) @<<$(BINPLACE_RESPONSE_FILE)
  8303. $**
  8304. <<$(BUILD_NOKEEP)
  8305. !endif
  8306.  
  8307. # These are special in that we binplace the files specified to two destinations -
  8308. # one language neutral and one language specific. We also create LCG files for them
  8309. # so that the language specific files can be localized. This is all done to support
  8310. # the legacy performance counter infrastrusture where English is assumed to be the
  8311. # neutral/default stuff all rolled into one file.
  8312. binplace_loc_perf_counters: $(LOC_PERF_COUNTERS)
  8313. !ifndef NO_BINPLACE
  8314. @$(_TYPE) <<$(BINPLACE_RESPONSE_FILE)
  8315. $(MAKEDIR) BINPLACE_LOC_PERF_COUNTERS=$**
  8316. <<$(BUILD_NOKEEP)
  8317. $(_PERL) $(RAZZLETOOLPATH)\VerifyUnicode.pl -files:<<$(PERL_RESPONSE_FILE)
  8318. $**
  8319. <<$(BUILD_NOKEEP)
  8320. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST $(LOC_PERF_COUNTERS_TARGET_DESTINATION):$(PERF_COUNTERS_TARGET_DESTINATION) @<<$(BINPLACE_RESPONSE_FILE)
  8321. $**
  8322. <<$(BUILD_NOKEEP)
  8323. !endif
  8324. # LOC_PERF_COUNTERS always runs regardless of BUILD_LCG or it's cousins
  8325. !if "$(DO_LSBUILD)" == "1"
  8326. set BUILDMSG=making LOC_PERF_COUNTERS with CreateLCGFile.pl
  8327. set createfile=<<$(OBJ_PATH)\$O\loc_perf_counters.lcg.lst
  8328. $(**: =
  8329. )
  8330. <<Keep
  8331. ! ifndef NO_BINPLACE
  8332. set createfile=<<$(OBJ_PATH)\$O\loc_perf_counters.lcg.binplace.txt
  8333. $(BINPLACE_FLAGS) /:DEST $(LOC_PERF_COUNTERS_TARGET_DESTINATION)
  8334. <<Keep
  8335. ! endif # NO_BINPLACE
  8336. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  8337. /m:$(OBJ_PATH)\$O\loc_perf_counters.lcg.lst \
  8338. /t:$(OBJ_PATH)\$O \
  8339. $(LSBUILD_PARSER_ID_OPTION) \
  8340. $(ALT_LCI_DIR_OPTION) \
  8341. /l:$(LANGUAGE) \
  8342. /s:$(LSBUILD_PARSER_SETTINGS) \
  8343. /unicode \
  8344. ! ifndef NO_BINPLACE
  8345. /b:$(OBJ_PATH)\$O\loc_perf_counters.lcg.binplace.txt \
  8346. /r:$(LCG_BINPLACE_TARGET) \
  8347. ! endif # NO_BINPLACE
  8348. $(LSBUILD_LCE_OPTION)
  8349. !endif # DO_LSBUILD
  8350.  
  8351.  
  8352.  
  8353. # These are special in that we binplace the files specified to two destinations -
  8354. # one language neutral and one language specific. We also create LCG files for them
  8355. # so that the language specific files can be localized. This is all done to support
  8356. # the legacy MSC files we have to ship but cannot change the format of - and where English
  8357. # is assumed to be the neutral/default stuff all rolled into one file.
  8358. binplace_loc_msc_files: $(LOC_MSC_FILES)
  8359. !ifndef NO_BINPLACE
  8360. @$(_TYPE) <<$(TYPE_RESPONSE_FILE)
  8361. $(MAKEDIR) BINPLACE_LOC_MSC_FILES=$**
  8362. <<$(BUILD_NOKEEP)
  8363. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST $(LOC_MSC_FILES_TARGET_DESTINATION):$(MSC_FILES_TARGET_DESTINATION) @<<$(BINPLACE_RESPONSE_FILE)
  8364. $**
  8365. <<$(BUILD_NOKEEP)
  8366. !endif
  8367. # LOC_MSC_FILES always runs regardless of BUILD_LCG or it's cousins
  8368. !if "$(DO_LSBUILD)" == "1"
  8369. set BUILDMSG=making LOC_MSC_FILES with CreateLCGFile.pl
  8370. set createfile=<<$(OBJ_PATH)\$O\loc_msc_files.lcg.lst
  8371. $(**: =
  8372. )
  8373. <<Keep
  8374. ! ifndef NO_BINPLACE
  8375. set createfile=<<$(OBJ_PATH)\$O\loc_msc_files.lcg.binplace.txt
  8376. $(BINPLACE_FLAGS) /:DEST $(LOC_MSC_FILES_TARGET_DESTINATION)
  8377. <<Keep
  8378. ! endif # NO_BINPLACE
  8379. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  8380. /m:$(OBJ_PATH)\$O\loc_msc_files.lcg.lst \
  8381. /t:$(OBJ_PATH)\$O \
  8382. $(LSBUILD_PARSER_ID_OPTION) \
  8383. $(ALT_LCI_DIR_OPTION) \
  8384. /l:$(LANGUAGE) \
  8385. /s:$(LSBUILD_PARSER_SETTINGS) \
  8386. ! ifndef NO_BINPLACE
  8387. /b:$(OBJ_PATH)\$O\loc_msc_files.lcg.binplace.txt \
  8388. /r:$(LCG_BINPLACE_TARGET) \
  8389. ! endif # NO_BINPLACE
  8390. $(LSBUILD_LCE_OPTION)
  8391. !endif # DO_LSBUILD
  8392.  
  8393.  
  8394. # LOC_PLA_XML_FILES need to be binplaced and run through SplitStrings.js to create a
  8395. # language specific .plaxml file which also needs to be binplaced. We also need to
  8396. # create and binplace an LCG for the language specific .plaxml file we created.
  8397. # $? is the files with a later timestamp than $(LOC_PLA_XML_FILES_LOG)
  8398. # $(LOC_PLA_XML_FILES_LOG) is the list of files that were processed, binplaced,
  8399. # and had LCG files generated for them.
  8400. !if defined(LOC_PLA_XML_FILES_LOG)
  8401. $(LOC_PLA_XML_FILES_LOG): $(LOC_PLA_XML_FILES)
  8402. set createfile=<<$(LOC_PLA_XML_FILES_LOG)
  8403. $?
  8404. <<Keep
  8405. $(_PERL) $(RAZZLETOOLPATH)\SplitPlaXmlStrings.pl \
  8406. /i:$(LOC_PLA_XML_FILES_LOG) \
  8407. /o:$(LOC_PLA_XML_FILES_RESOURCE_LIST) \
  8408. /d:$(OBJ_PATH)\$O
  8409. ! ifndef NO_BINPLACE
  8410. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) @$(LOC_PLA_XML_FILES_LOG)
  8411. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) /R $(_NTTREE)\$(LOC_BIN) @$(LOC_PLA_XML_FILES_RESOURCE_LIST)
  8412. ! endif
  8413. # LOC_PLA_XML_FILES always runs regardless of BUILD_LCG or it's cousins
  8414. ! if "$(DO_LSBUILD)" == "1"
  8415. set BUILDMSG=making LOC_PLA_XML_FILES with CreateLCGFile.pl
  8416. set createfile=<<$(OBJ_PATH)\$O\loc_pla_xml_files.lcg.lst
  8417. $(?:.xml=.plaxml)
  8418. <<Keep
  8419. ! ifndef NO_BINPLACE
  8420. set createfile=<<$(LOC_PLA_XML_FILES_LCG_BINPLACE_TXT)
  8421. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  8422. <<Keep
  8423. ! endif # NO_BINPLACE
  8424. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  8425. /m:$(LOC_PLA_XML_FILES_RESOURCE_LIST) \
  8426. /t:$(OBJ_PATH)\$O \
  8427. $(LSBUILD_PARSER_ID_OPTION) \
  8428. $(ALT_LCI_DIR_OPTION) \
  8429. /l:$(LANGUAGE) \
  8430. /s:$(LSBUILD_PARSER_SETTINGS) \
  8431. ! ifndef NO_BINPLACE
  8432. /b:$(LOC_PLA_XML_FILES_LCG_BINPLACE_TXT) \
  8433. /r:$(LCG_BINPLACE_TARGET) \
  8434. ! endif # NO_BINPLACE
  8435. $(LSBUILD_LCE_OPTION)
  8436. ! endif # DO_LSBUILD
  8437. !endif # LOC_PLA_XML_FILES_LOG
  8438.  
  8439. build_objects: $(TARGETOBJFILES)
  8440.  
  8441. build_umobjects: $(UMOBJFILES)
  8442.  
  8443. !ELSE # PASS0ONLY
  8444.  
  8445. all: \
  8446. !if !defined(BUILD_PASS_INDEPENDENT)
  8447. PassIndependentTargets_Infs \
  8448. PassIndependentTargets_Binplace \
  8449. !endif
  8450. $(OBJ_PATH)\$O\_objects.mac.verify.$(BUILD_PASS).mac \
  8451. !ifdef _ASSEMBLY_IDENTITY
  8452. $(OBJ_PATH)\$O\_asmid.inc \
  8453. $(OBJ_PATH)\$O\_asmid.xml \
  8454. !endif
  8455. $(_O_BINARY_METADATA) \
  8456. $(NTTARGETFILE0) \
  8457. # Support to compile licensing manifest
  8458. !if defined(SLS_LICENSING_MANIFEST)
  8459. $(SLS_LICENSING_TARGETS) \
  8460. !endif
  8461. !if !defined(BUILD_PASS_INDEPENDENT)
  8462. $(SOURCE_MANIFEST) \
  8463. $(WOW64_SOURCE_MANIFEST) \
  8464. $(MULTI_SOURCE_MANIFEST) \
  8465. $(MULTI_WOW64_SOURCE_MANIFEST) \
  8466. $(PROD_SOURCE_MANIFEST) \
  8467. $(PROD_WOW64_SOURCE_MANIFEST) \
  8468. $(INTERNAL_SOURCE_MANIFEST) \
  8469. $(INTERNAL_WOW64_SOURCE_MANIFEST) \
  8470. $(EDITION_SOURCE_MANIFEST) \
  8471. $(WINPE_SOURCE_MANIFEST) \
  8472. !endif
  8473. $(WPP_TARGETS) \
  8474. $(PASS0_OBJECTS) \
  8475. !if defined(EVENTS_MANIFEST)
  8476. $(OBJ_PATH)\$O\_event_manifests \
  8477. !endif
  8478. !if defined(COUNTERS_MANIFEST)
  8479. BUILD_COUNTERS_MANIFEST \
  8480. !endif
  8481. !if defined(WSUTIL_METADATA)
  8482. WSUTIL \
  8483. !endif
  8484. ! ifdef DO_LANGUAGE_NEUTRAL
  8485. $(RC_CONFIG_OBJ1) \
  8486. ! ifdef DELTA_RC_CONFIG
  8487. $(RC_CONFIG_OBJ2) \
  8488. ! endif
  8489. ! endif
  8490. # These are very special macros that are created based on the pass currently running
  8491. # and the content of the PASS# variants of each macro. The code block we run in each
  8492. # pass is identical and they never run at the same time, so this enables us to
  8493. # re-use as much of the infrastructure as possible.
  8494. $(LANG_MISCFILES_LOG) \
  8495. $(LOC_MISCFILES_LOG) \
  8496. $(LOC_MUI_MISCFILES_LOG) \
  8497. $(PRELOC_MISCFILES_LOG) \
  8498. $(PRELOC_MUI_MISCFILES_LOG) \
  8499. $(PRELOC_MUI_ONLY_MISCFILES_LOG) \
  8500. $(MULTI_MISCFILES_LOG) \
  8501. $(MULTI_MUI_MISCFILES_LOG) \
  8502. _concurrent_midl_join \
  8503. PASS0_Pub \
  8504. PASS0_Binp \
  8505. !if "$(XAML_COMPILATION)" == "1"
  8506. build_xaml \
  8507. !endif
  8508. !if defined(RESGEN_SOURCES)
  8509. PASS0_Resgen \
  8510. !endif
  8511.  
  8512. !ENDIF # PASS0ONLY
  8513.  
  8514. _concurrent_midl_join:
  8515. !if defined(_CONCURRENT_MIDL_JOIN)
  8516. set BUILDMSG=waiting for asynchronous midl
  8517. $(_CONCURRENT_MIDL_JOIN)
  8518. !endif
  8519.  
  8520. #
  8521. # temporary to validate changes in build.exe
  8522. #
  8523. $(OBJ_PATH)\$O\_objects.mac.verify.$(BUILD_PASS).mac:
  8524. !if 0
  8525. if not exist $(OBJ_PATH)\$O\_objects.mac goto :eof
  8526. $(_COPYFILE) /y $(OBJ_PATH)\$O\_objects.mac $@
  8527. for %%a in ($(OBJ_PATH)\$O\_objects.mac.verify.*.mac) do (diff $(OBJ_PATH)\$O\_objects.mac %%a > [email protected] || $(_PERL) -pi -e "s/^(.)/$(@F) : error \1/g" < [email protected])
  8528. <<Keep
  8529. !endif
  8530.  
  8531. $(OBJ_PATH)\$O\_objects.mac: $(SOURCES_USED)
  8532. @echo Rebuilding $@ $(SOURCES_USED).
  8533. @build /O /Z /f /$(TARGET_DIRECTORY:i386=x86)
  8534. @if exist $@ @echo nmake : error: $@ was changed during the build process and the build results may not be valid. Please re-build this directory.
  8535. # The following line is intended to produce an error -- access denied.
  8536. @if exist $@ mkdir \ 2>nul
  8537.  
  8538.  
  8539. #
  8540. # LANG_MISCFILES support
  8541. #
  8542. # These are files that are "language specific but not localizable". They need
  8543. # to be in the language pack but do not need to be localized. We just binplace
  8544. # the files as-is. No MUI splitting needs needs to be done on these files.
  8545. #
  8546. !if defined(LANG_MISCFILES_LOG)
  8547. $(LANG_MISCFILES_LOG): $(LANG_MISCFILES)
  8548. # $? is the files with a later timestamp than $(LANG_MISCFILES_LOG)
  8549. # $(LANG_MISCFILES_LOG) is the list of files that were binplaced.
  8550. set createfile=<<$(LANG_MISCFILES_LOG)
  8551. $?
  8552. <<Keep
  8553. ! ifndef NO_BINPLACE
  8554. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) /R $(_NTTREE)\$(LOC_BIN) @$(LANG_MISCFILES_LOG)
  8555. ! endif
  8556. !endif # LANG_MISCFILES_LOG
  8557.  
  8558.  
  8559. #
  8560. # LOC_MISCFILES support
  8561. #
  8562. # These are files that need to be localized so we just need to create an LCG
  8563. # for them and then binplace the file and the LCG files. No MUI splitting needs
  8564. # needs to be done on these files. This is typically done on checked in files
  8565. # or on files generated by other directories where you are using the proper
  8566. # cross-directory syncronization to make this directory/operation happen last.
  8567. #
  8568. !if defined(LOC_MISCFILES_LOG)
  8569. $(LOC_MISCFILES_LOG): $(LOC_MISCFILES)
  8570. # $? is the files with a later timestamp than $(LOC_MISCFILES_LOG)
  8571. # $(LOC_MISCFILES_LOG) is the list of files that were split, binplaced,
  8572. # and had LCG files generated for them.
  8573. set createfile=<<$(LOC_MISCFILES_LOG)
  8574. $?
  8575. <<Keep
  8576. ! ifndef NO_BINPLACE
  8577. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) /R $(_NTTREE)\$(LOC_BIN) @$(LOC_MISCFILES_LOG)
  8578. ! endif
  8579. ! if "$(DO_LSBUILD)" == "1"
  8580. ! ifndef NO_BINPLACE
  8581. set BUILDMSG=making $(BUILD_PASS)_LOC_MISCFILES with CreateLCGFile.pl
  8582. set createfile=<<$(LOC_MISCFILES_LCG_BINPLACE_TXT)
  8583. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  8584. <<Keep
  8585. ! endif # NO_BINPLACE
  8586. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  8587. /m:$(LOC_MISCFILES_LOG) \
  8588. /t:$(OBJ_PATH)\$O \
  8589. $(LSBUILD_PARSER_ID_OPTION) \
  8590. $(ALT_LCI_DIR_OPTION) \
  8591. /l:$(LANGUAGE) \
  8592. /s:$(LSBUILD_PARSER_SETTINGS) \
  8593. ! ifndef NO_BINPLACE
  8594. /b:$(LOC_MISCFILES_LCG_BINPLACE_TXT) \
  8595. /r:$(LCG_BINPLACE_TARGET) \
  8596. ! endif # NO_BINPLACE
  8597. $(LSBUILD_LCE_OPTION)
  8598. ! endif # DO_LSBUILD
  8599. !endif # LOC_MISCFILES_LOG
  8600.  
  8601.  
  8602. #
  8603. # LOC_MUI_MISCFILES support
  8604. #
  8605. # These are similar to LOC_MISCFILES, but we need to do MUI splitting on these files
  8606. # first, then binplace both of the resulting files, and then create LCG files
  8607. # for each of the resulting MUI files. This is typically done on checked in files
  8608. # or on files generated by other directories where you are using the proper
  8609. # cross-directory syncronization to make this directory/operation happen last.
  8610. #
  8611. !if defined(LOC_MUI_MISCFILES_LOG)
  8612. $(LOC_MUI_MISCFILES_LOG): $(LOC_MUI_MISCFILES)
  8613. # $? is the files with a later timestamp than $(LOC_MUI_MISCFILES_LOG)
  8614. # $(LOC_MUI_MISCFILES_LOG) is the list of files that were split, binplaced,
  8615. # and had LCG files generated for them.
  8616. set createfile=<<$(LOC_MUI_MISCFILES_LOG)
  8617. $?
  8618. <<Keep
  8619. $(_PERL) $(RAZZLETOOLPATH)\SplitMiscFiles.pl \
  8620. !if defined(BINPLACE_NO_SYMCHK) || defined(NO_BINPLACE)
  8621. /nosym \
  8622. !endif
  8623. /i:$(LOC_MUI_MISCFILES_LOG) \
  8624. /n:$(LOC_MUI_MISCFILES_NEUTRAL_LIST) \
  8625. /r:$(LOC_MUI_MISCFILES_RESOURCE_LIST) \
  8626. /m:"$(LANGUAGE_NEUTRAL_RESOURCE_MUIRCT)" \
  8627. /t:$(OBJ_PATH)\$O
  8628. ! ifndef NO_BINPLACE
  8629. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) \
  8630. ! if "$(LOCALIZE_BASE_FILE)" == "1"
  8631. /R $(_NTTREE)\$(LOC_MULTI) \
  8632. ! endif # LOCALIZE_BASE_FILE
  8633. @$(LOC_MUI_MISCFILES_NEUTRAL_LIST)
  8634. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) \
  8635. -G5 $(LANGUAGE_NEUTRAL_RESDIR) @$(LOC_MUI_MISCFILES_RESOURCE_LIST)
  8636. ! endif # NO_BINPLACE
  8637. ! if "$(DO_LSBUILD)" == "1"
  8638. ! ifndef NO_BINPLACE
  8639. set BUILDMSG=making $(BUILD_PASS)_LOC_MUI_MISCFILES with CreateLCGFile.pl
  8640. set createfile=<<$(LOC_MUI_MISCFILES_LCG_BINPLACE_TXT)
  8641. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  8642. <<Keep
  8643. ! endif # NO_BINPLACE
  8644. ! if "$(LOCALIZE_BASE_FILE)" == "1"
  8645. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  8646. /m:$(LOC_MUI_MISCFILES_NEUTRAL_LIST) \
  8647. /t:$(OBJ_PATH)\$O \
  8648. $(LSBUILD_PARSER_ID_OPTION) \
  8649. $(ALT_LCI_DIR_OPTION) \
  8650. /l:$(LANGUAGE) \
  8651. /s:$(LSBUILD_PARSER_SETTINGS) \
  8652. ! ifndef NO_BINPLACE
  8653. /b:$(LOC_MUI_MISCFILES_LCG_BINPLACE_TXT) \
  8654. /r:$(LCG_BINPLACE_TARGET) \
  8655. ! endif # NO_BINPLACE
  8656. $(LSBUILD_LCE_OPTION)
  8657. ! endif # LOCALIZE_BASE_FILE
  8658. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  8659. /m:$(LOC_MUI_MISCFILES_RESOURCE_LIST) \
  8660. /t:$(OBJ_PATH)\$O \
  8661. $(LSBUILD_PARSER_ID_OPTION) \
  8662. $(ALT_LCI_DIR_OPTION) \
  8663. /l:$(LANGUAGE) \
  8664. /s:$(LSBUILD_PARSER_SETTINGS) \
  8665. ! ifndef NO_BINPLACE
  8666. /b:$(LOC_MUI_MISCFILES_LCG_BINPLACE_TXT) \
  8667. /r:$(LCG_BINPLACE_TARGET) \
  8668. ! endif # NO_BINPLACE
  8669. $(LSBUILD_LCE_OPTION)
  8670. ! endif # DO_LSBUILD
  8671. !endif # LOC_MUI_MISCFILES_LOG
  8672.  
  8673.  
  8674. #
  8675. # PRELOC_MISCFILES support
  8676. #
  8677. # These are similar to MISCFILES, except that they are pre-localized.
  8678. # This is typically done on checked in files that are already localized.
  8679. # We do not need to create an LCG file for these files.
  8680. #
  8681. !if defined(PRELOC_MISCFILES_LOG)
  8682. $(PRELOC_MISCFILES_LOG): $(PRELOC_MISCFILES)
  8683. # $? is the files with a later timestamp than $(PRELOC_MISCFILES_LOG)
  8684. set createfile=<<$(PRELOC_MISCFILES_LOG)
  8685. $?
  8686. <<Keep
  8687. ! ifndef NO_BINPLACE
  8688. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) /R $(_NTTREE)\$(PRELOC_BINPLACE_DIR) @$(PRELOC_MISCFILES_LOG)
  8689. ! endif
  8690. !endif # PRELOC_MISCFILES_LOG
  8691.  
  8692.  
  8693. #
  8694. # PRELOC_MUI_MISCFILES support
  8695. #
  8696. # These are similar to MISCFILES, except that they are pre-localized and
  8697. # that they need to be MUI split and the resulting file + MUI file
  8698. # binplaced. This is typically done on checked in files that are already
  8699. # localized. We do not need to create an LCG file for these files.
  8700. #
  8701. !if defined(PRELOC_MUI_MISCFILES_LOG)
  8702. $(PRELOC_MUI_MISCFILES_LOG): $(PRELOC_MUI_MISCFILES)
  8703. # $? is the files with a later timestamp than $(PRELOC_MUI_MISCFILES_LOG)
  8704. set createfile=<<$(PRELOC_MUI_MISCFILES_LOG)
  8705. $?
  8706. <<Keep
  8707. $(_PERL) $(RAZZLETOOLPATH)\SplitMiscFiles.pl \
  8708. !if defined(BINPLACE_NO_SYMCHK) || defined(NO_BINPLACE)
  8709. /nosym \
  8710. !endif
  8711. /i:$(PRELOC_MUI_MISCFILES_LOG) \
  8712. /n:$(PRELOC_MUI_MISCFILES_NEUTRAL_LIST) \
  8713. /r:$(PRELOC_MUI_MISCFILES_RESOURCE_LIST) \
  8714. /m:"$(LANGUAGE_NEUTRAL_RESOURCE_MUIRCT)" \
  8715. /t:$(OBJ_PATH)\$O
  8716. ! ifndef NO_BINPLACE
  8717. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) @$(PRELOC_MUI_MISCFILES_NEUTRAL_LIST) \
  8718. /R $(_NTTREE)\$(PRELOC_BINPLACE_DIR) @$(PRELOC_MUI_MISCFILES_RESOURCE_LIST)
  8719. ! endif
  8720. !endif # PRELOC_MUI_MISCFILES_LOG
  8721.  
  8722.  
  8723. #
  8724. # PRELOC_MUI_ONLY_MISCFILES support
  8725. #
  8726. # These are similar to MISCFILES, except that they are pre-localized and
  8727. # that they need to be MUI split - but only the resulting MUI file needs
  8728. # to be binplaced. This is typically done on checked in files that are
  8729. # already localized. We do not need to create an LCG file for these files.
  8730. #
  8731. !if defined(PRELOC_MUI_ONLY_MISCFILES_LOG)
  8732. $(PRELOC_MUI_ONLY_MISCFILES_LOG): $(PRELOC_MUI_ONLY_MISCFILES)
  8733. # $? is the files with a later timestamp than $(PRELOC_MUI_ONLY_MISCFILES_LOG)
  8734. set createfile=<<$(PRELOC_MUI_ONLY_MISCFILES_LOG)
  8735. $?
  8736. <<Keep
  8737. $(_PERL) $(RAZZLETOOLPATH)\SplitMiscFiles.pl \
  8738. !if defined(BINPLACE_NO_SYMCHK) || defined(NO_BINPLACE)
  8739. /nosym \
  8740. !endif
  8741. /i:$(PRELOC_MUI_ONLY_MISCFILES_LOG) \
  8742. /n:$(PRELOC_MUI_ONLY_MISCFILES_NEUTRAL_LIST) \
  8743. /r:$(PRELOC_MUI_ONLY_MISCFILES_RESOURCE_LIST) \
  8744. /m:"$(LANGUAGE_NEUTRAL_RESOURCE_MUIRCT)" \
  8745. /t:$(OBJ_PATH)\$O
  8746. ! ifndef NO_BINPLACE
  8747. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) /R $(_NTTREE)\$(PRELOC_BINPLACE_DIR) @$(PRELOC_MUI_ONLY_MISCFILES_RESOURCE_LIST)
  8748. ! endif
  8749. !endif # PRELOC_MUI_ONLY_MISCFILES_LOG
  8750.  
  8751.  
  8752. #
  8753. # Any localizable MISCFILES that need to go into the ML postbuild go into the
  8754. # MULTI_MISCFILES macro instead of the MISCFILES macro. Any files specified by
  8755. # MULTI_MISCFILES will have LCG files created for them by calling CreateLCGFile.pl
  8756. # for them, in addition to the binplacing of the files to %_NTTREE%\loc\src\multi.
  8757. # The resulting LCG file will be binplaced to %_NTTREE%\%LCG_BINPLACE_ROOT%, plus
  8758. # any additional relative destination path for the original file.
  8759. #
  8760. !if defined(MULTI_MISCFILES_LOG)
  8761. $(MULTI_MISCFILES_LOG): $(MULTI_MISCFILES)
  8762. # $? is the files with a later timestamp than $(MULTI_MISCFILES_LOG)
  8763. # $(MULTI_MISCFILES_LOG) is the list of files that were split, binplaced,
  8764. # and had LCG files generated for them.
  8765. set createfile=<<$(MULTI_MISCFILES_LOG)
  8766. $?
  8767. <<Keep
  8768. ! ifndef NO_BINPLACE
  8769. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) /R $(_NTTREE)\$(LOC_MULTI) @$(MULTI_MISCFILES_LOG)
  8770. ! endif # NO_BINPLACE
  8771. ! if "$(DO_LSBUILD)" == "1"
  8772. ! ifndef NO_BINPLACE
  8773. set BUILDMSG=making $(BUILD_PASS)_MULTI_MISCFILES with CreateLCGFile.pl
  8774. set createfile=<<$(MULTI_MISCFILES_LCG_BINPLACE_TXT)
  8775. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  8776. <<Keep
  8777. ! endif # NO_BINPLACE
  8778. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  8779. /m:$(MULTI_MISCFILES_LOG) \
  8780. /t:$(OBJ_PATH)\$O \
  8781. $(LSBUILD_PARSER_ID_OPTION) \
  8782. $(ALT_LCI_DIR_OPTION) \
  8783. /l:$(LANGUAGE) \
  8784. /s:$(LSBUILD_PARSER_SETTINGS) \
  8785. ! ifndef NO_BINPLACE
  8786. /b:$(MULTI_MISCFILES_LCG_BINPLACE_TXT) \
  8787. /r:$(LCG_BINPLACE_TARGET) \
  8788. ! endif # NO_BINPLACE
  8789. $(LSBUILD_LCE_OPTION)
  8790. ! endif # DO_LSBUILD
  8791. !endif # MULTI_MISCFILES_LOG
  8792.  
  8793.  
  8794. #
  8795. # MULTI_MUI_MISCFILES support
  8796. #
  8797. # These are similar to MULTI_MISCFILES, but we need to do MUI splitting on these files
  8798. # first, then binplace both of the resulting files, and then create LCG files
  8799. # for each of the resulting MUI files. This is typically done on checked in files
  8800. # or on files generated by other directories where you are using the proper
  8801. # cross-directory syncronization to make this directory/operation happen last.
  8802. #
  8803. !if defined(MULTI_MUI_MISCFILES_LOG)
  8804. $(MULTI_MUI_MISCFILES_LOG): $(MULTI_MUI_MISCFILES)
  8805. # $? is the files with a later timestamp than $(MULTI_MUI_MISCFILES_LOG)
  8806. # $(MULTI_MUI_MISCFILES_LOG) is the list of files that were split, binplaced,
  8807. # and had LCG files generated for them.
  8808. set createfile=<<$(MULTI_MUI_MISCFILES_LOG)
  8809. $?
  8810. <<Keep
  8811. $(_PERL) $(RAZZLETOOLPATH)\SplitMiscFiles.pl \
  8812. !if defined(BINPLACE_NO_SYMCHK) || defined(NO_BINPLACE)
  8813. /nosym \
  8814. !endif
  8815. /i:$(MULTI_MUI_MISCFILES_LOG) \
  8816. /n:$(MULTI_MUI_MISCFILES_NEUTRAL_LIST) \
  8817. /r:$(MULTI_MUI_MISCFILES_RESOURCE_LIST) \
  8818. /m:"$(LANGUAGE_NEUTRAL_RESOURCE_MUIRCT)" \
  8819. /t:$(OBJ_PATH)\$O
  8820. ! ifndef NO_BINPLACE
  8821. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(BINPLACE_LC_MISCFLAGS) @$(MULTI_MUI_MISCFILES_NEUTRAL_LIST) \
  8822. /R $(_NTTREE)\$(LOC_MULTI) @$(MULTI_MUI_MISCFILES_RESOURCE_LIST)
  8823. ! endif
  8824. ! if "$(DO_LSBUILD)" == "1"
  8825. ! ifndef NO_BINPLACE
  8826. set BUILDMSG=making $(BUILD_PASS)_MULTI_MUI_MISCFILES with CreateLCGFile.pl
  8827. set createfile=<<$(MULTI_MUI_MISCFILES_LCG_BINPLACE_TXT)
  8828. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  8829. <<Keep
  8830. ! endif # NO_BINPLACE
  8831. ! if "$(LOCALIZE_BASE_FILE)" == "1"
  8832. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  8833. /m:$(MULTI_MUI_MISCFILES_NEUTRAL_LIST) \
  8834. /t:$(OBJ_PATH)\$O \
  8835. $(LSBUILD_PARSER_ID_OPTION) \
  8836. $(ALT_LCI_DIR_OPTION) \
  8837. /l:$(LANGUAGE) \
  8838. /s:$(LSBUILD_PARSER_SETTINGS) \
  8839. ! ifndef NO_BINPLACE
  8840. /b:$(MULTI_MUI_MISCFILES_LCG_BINPLACE_TXT) \
  8841. /r:$(LCG_BINPLACE_TARGET) \
  8842. ! endif # NO_BINPLACE
  8843. $(LSBUILD_LCE_OPTION)
  8844. ! endif # LOCALIZE_BASE_FILE
  8845. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  8846. /m:$(MULTI_MUI_MISCFILES_RESOURCE_LIST) \
  8847. /t:$(OBJ_PATH)\$O \
  8848. $(LSBUILD_PARSER_ID_OPTION) \
  8849. $(ALT_LCI_DIR_OPTION) \
  8850. /l:$(LANGUAGE) \
  8851. /s:$(LSBUILD_PARSER_SETTINGS) \
  8852. ! ifndef NO_BINPLACE
  8853. /b:$(MULTI_MUI_MISCFILES_LCG_BINPLACE_TXT) \
  8854. /r:$(LCG_BINPLACE_TARGET) \
  8855. ! endif # NO_BINPLACE
  8856. $(LSBUILD_LCE_OPTION)
  8857. ! endif # DO_LSBUILD
  8858. !endif # MULTI_MUI_MISCFILES_LOG
  8859.  
  8860. !endif
  8861.  
  8862. !ifdef NO_BINPLACE
  8863. PassIndependentTargets_Binplace:
  8864.  
  8865. PASS0_BINP:
  8866.  
  8867. PASS1_BINP:
  8868.  
  8869. PASS2_BINP:
  8870.  
  8871. !else
  8872. #
  8873. # TBD clean this up the way I had MikeR clean up his stuff -- move the per-pass macros
  8874. # into pass agnostic macros and then write the code just once.
  8875. #
  8876. # Other cleanup is needed here too.
  8877. #
  8878. PassIndependentTargets_Binplace:
  8879. !if (defined(PASS_INDEPENDENT_BINPLACE) || defined(DL_MANIFESTS) || defined(REPL_MANIFESTS)) && "$(BUILD_PASS)" != "PASS1" && "$(BUILD_PASS)" != "PASS2"
  8880. ! if defined(BUILD_DEBUG)
  8881. @$(_TYPE) <<$(TYPE_RESPONSE_FILE)
  8882. $(MAKEDIR) PASS_INDEPENDENT_BINPLACE=$(PASS_INDEPENDENT_BINPLACE)
  8883. $(MAKEDIR) DL_MANIFESTS=$(DL_MANIFESTS)
  8884. $(MAKEDIR) MUI= $(MUI)
  8885. ! if "$(MUI)" == "0"
  8886. $(MAKEDIR) MUI_COMMENT= $(MUI_COMMENT)
  8887. ! endif
  8888. $(MAKEDIR) MISC_MUI_OFF= $(MISC_MUI_OFF)
  8889. <<$(BUILD_NOKEEP)
  8890. ! endif
  8891. @set createfile=<<$(OBJ_PATH)\$O\misc_mui_off
  8892. $(MISC_MUI_OFF)
  8893. <<$(BUILD_NOKEEP)
  8894. @set createfile=<<$(OBJ_PATH)\$O\pass_independent_binp_mui_exclude
  8895. <<$(BUILD_NOKEEP)
  8896. $(NOECHO)$(_PERL) -e "my $$muioff;open MISCMUIOFF,'$(OBJ_PATH)\$O\misc_mui_off';while (<MISCMUIOFF>){$$muioff .= $$_;}close MISCMUIOFF;open EXCLUDE, '>>$(OBJ_PATH)\$O\pass0_binp_mui_exclude';foreach $$i (split(';',$$muioff)){$$i=~ s/,.+$$//;$$i=~ s/^\s*//;$$i=~ s/\s*$$//;print EXCLUDE qq($$i\n);}close EXCLUDE;"
  8897. $(NOECHO)set LANGUAGE_NEUTRAL_EXCLUDE_FILE=$(OBJ_PATH)\$O\pass0_independent_binp_mui_exclude
  8898. $(BINPLACE_TOOL) @<<$(BINPLACE_RESPONSE_FILE_IND)
  8899. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  8900. ! if defined(PASS_INDEPENDENT_BINPLACE)
  8901. $(PASS_INDEPENDENT_BINPLACE)
  8902. ! endif
  8903. ! if defined(DL_MANIFESTS)
  8904. /:DEST Setup\Sources\dlmanifests
  8905. $(DL_MANIFESTS)
  8906. ! endif
  8907. ! if defined(REPL_MANIFESTS)
  8908. /:DEST Setup\Sources\ReplacementManifests
  8909. $(REPL_MANIFESTS)
  8910. ! endif
  8911. <<$(BUILD_NOKEEP)
  8912. $(NOECHO)set LANGUAGE_NEUTRAL_EXCLUDE_FILE=
  8913. !endif
  8914.  
  8915. PASS0_BINP:
  8916. !if defined(PASS0_BINPLACE) && "$(BUILD_PASS)" != "PASS1" && "$(BUILD_PASS)" != "PASS2"
  8917. !if defined(BUILD_DEBUG)
  8918. @$(_TYPE) <<$(TYPE_RESPONSE_FILE)
  8919. $(MAKEDIR) PASS0_BINPLACE=$(PASS0_BINPLACE)
  8920. $(MAKEDIR) MUI= $(MUI)
  8921. ! if "$(MUI)" == "0"
  8922. $(MAKEDIR) MUI_COMMENT= $(MUI_COMMENT)
  8923. ! endif
  8924. $(MAKEDIR) MISC_MUI_OFF= $(MISC_MUI_OFF)
  8925. <<$(BUILD_NOKEEP)
  8926. !endif
  8927. @set createfile=<<$(OBJ_PATH)\$O\misc_mui_off
  8928. $(MISC_MUI_OFF)
  8929. <<$(BUILD_NOKEEP)
  8930. @set createfile=<<$(OBJ_PATH)\$O\pass0_binp_mui_exclude
  8931. <<$(BUILD_NOKEEP)
  8932. $(NOECHO)$(_PERL) -e "my $$muioff;open MISCMUIOFF,'$(OBJ_PATH)\$O\misc_mui_off';while (<MISCMUIOFF>){$$muioff .= $$_;}close MISCMUIOFF;open EXCLUDE, '>>$(OBJ_PATH)\$O\pass0_binp_mui_exclude';foreach $$i (split(';',$$muioff)){$$i=~ s/,.+$$//;$$i=~ s/^\s*//;$$i=~ s/\s*$$//;print EXCLUDE qq($$i\n);}close EXCLUDE;"
  8933. $(NOECHO)set LANGUAGE_NEUTRAL_EXCLUDE_FILE=$(OBJ_PATH)\$O\pass0_binp_mui_exclude
  8934. $(BINPLACE_TOOL) @<<$(BINPLACE_RESPONSE_FILE)
  8935. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  8936. $(PASS0_BINPLACE)
  8937. <<$(BUILD_NOKEEP)
  8938. $(NOECHO)set LANGUAGE_NEUTRAL_EXCLUDE_FILE=
  8939. !endif
  8940.  
  8941. PASS1_BINP:
  8942. !if defined(PASS1_BINPLACE) && "$(BUILD_PASS)" != "PASS0" && "$(BUILD_PASS)" != "PASS2"
  8943. !if defined(BUILD_DEBUG)
  8944. @$(_TYPE) <<$(TYPE_RESPONSE_FILE)
  8945. $(MAKEDIR) PASS1_BINPLACE=$(PASS1_BINPLACE)
  8946. $(MAKEDIR) MUI= $(MUI)
  8947. ! if "$(MUI)" == "0"
  8948. $(MAKEDIR) MUI_COMMENT= $(MUI_COMMENT)
  8949. ! endif
  8950. $(MAKEDIR) MISC_MUI_OFF= $(MISC_MUI_OFF)
  8951. <<$(BUILD_NOKEEP)
  8952. !endif
  8953. @set createfile=<<$(OBJ_PATH)\$O\misc_mui_off
  8954. $(MISC_MUI_OFF)
  8955. <<$(BUILD_NOKEEP)
  8956. @set createfile=<<$(OBJ_PATH)\$O\pass1_binp_mui_exclude
  8957. <<$(BUILD_NOKEEP)
  8958. $(NOECHO)$(_PERL) -e "my $$muioff;open MISCMUIOFF,'$(OBJ_PATH)\$O\misc_mui_off';while (<MISCMUIOFF>){$$muioff .= $$_;}close MISCMUIOFF;open EXCLUDE, '>>$(OBJ_PATH)\$O\pass1_binp_mui_exclude';foreach $$i (split(';',$$muioff)){$$i=~ s/,.+$$//;$$i=~ s/^\s*//;$$i=~ s/\s*$$//;print EXCLUDE qq($$i\n);}close EXCLUDE;"
  8959. $(NOECHO)set LANGUAGE_NEUTRAL_EXCLUDE_FILE=$(OBJ_PATH)\$O\pass1_binp_mui_exclude
  8960. $(BINPLACE_TOOL) @<<$(BINPLACE_RESPONSE_FILE)
  8961. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  8962. $(PASS1_BINPLACE)
  8963. <<$(BUILD_NOKEEP)
  8964. $(NOECHO)set LANGUAGE_NEUTRAL_EXCLUDE_FILE=
  8965. !endif
  8966.  
  8967. PASS2_BINP:
  8968. !if defined(PASS2_BINPLACE) && "$(BUILD_PASS)" != "PASS0" && "$(BUILD_PASS)" != "PASS1"
  8969. !if defined(BUILD_DEBUG)
  8970. @$(_TYPE) <<$(TYPE_RESPONSE_FILE)
  8971. $(MAKEDIR) PASS2_BINPLACE=$(PASS2_BINPLACE)
  8972. $(MAKEDIR) MUI= $(MUI)
  8973. ! if "$(MUI)" == "0"
  8974. $(MAKEDIR) MUI_COMMENT= $(MUI_COMMENT)
  8975. ! endif
  8976. $(MAKEDIR) MISC_MUI_OFF= $(MISC_MUI_OFF)
  8977. <<$(BUILD_NOKEEP)
  8978. !endif
  8979. @set createfile=<<$(OBJ_PATH)\$O\misc_mui_off
  8980. $(MISC_MUI_OFF)
  8981. <<$(BUILD_NOKEEP)
  8982. @set createfile=<<$(OBJ_PATH)\$O\pass2_binp_mui_exclude
  8983. <<$(BUILD_NOKEEP)
  8984. $(NOECHO)$(_PERL) -e "my $$muioff;open MISCMUIOFF,'$(OBJ_PATH)\$O\misc_mui_off';while (<MISCMUIOFF>){$$muioff .= $$_;}close MISCMUIOFF;open EXCLUDE, '>>$(OBJ_PATH)\$O\pass2_binp_mui_exclude';foreach $$i (split(';',$$muioff)){$$i=~ s/,.+$$//;$$i=~ s/^\s*//;$$i=~ s/\s*$$//;print EXCLUDE qq($$i\n);}close EXCLUDE;"
  8985. $(NOECHO)set LANGUAGE_NEUTRAL_EXCLUDE_FILE=$(OBJ_PATH)\$O\pass2_binp_mui_exclude
  8986. $(BINPLACE_TOOL) @<<$(BINPLACE_RESPONSE_FILE)
  8987. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  8988. $(PASS2_BINPLACE)
  8989. <<$(BUILD_NOKEEP)
  8990. $(NOECHO)set LANGUAGE_NEUTRAL_EXCLUDE_FILE=
  8991. !endif
  8992. !endif
  8993.  
  8994. !ifndef PASS_INDEPENDENT_TARGETS # { {
  8995.  
  8996. !ifdef PASS0_PUBLISH
  8997. _PASS0_PUBLISH_LOWERCASE=$(PASS0_PUBLISH)
  8998. _PASS0_PUBLISH_LOWERCASE=$(_PASS0_PUBLISH_LOWERCASE:A=a)
  8999. _PASS0_PUBLISH_LOWERCASE=$(_PASS0_PUBLISH_LOWERCASE:D=d)
  9000. _PASS0_PUBLISH_LOWERCASE=$(_PASS0_PUBLISH_LOWERCASE:E=e)
  9001. _PASS0_PUBLISH_LOWERCASE=$(_PASS0_PUBLISH_LOWERCASE:M=m)
  9002. _PASS0_PUBLISH_LOWERCASE=$(_PASS0_PUBLISH_LOWERCASE:L=l)
  9003. _PASS0_PUBLISH_LOWERCASE=$(_PASS0_PUBLISH_LOWERCASE:T=t)
  9004. _PASS0_PUBLISH_LOWERCASE=$(_PASS0_PUBLISH_LOWERCASE:X=x)
  9005.  
  9006. # Remove spaces, tabs, and carriage returns, so that when
  9007. # we search for ".dll}", etc. below it will effectively
  9008. # check if the destination filename ends with ".dll".
  9009. _PASS0_PUBLISH_LOWERCASE=$(_PASS0_PUBLISH_LOWERCASE: =)
  9010. _PASS0_PUBLISH_LOWERCASE=$(_PASS0_PUBLISH_LOWERCASE: =)
  9011. _PASS0_PUBLISH_LOWERCASE=$(_PASS0_PUBLISH_LOWERCASE:^
  9012. =)
  9013. !endif
  9014.  
  9015. !ifdef PASS1_PUBLISH
  9016. _PASS1_PUBLISH_LOWERCASE=$(PASS1_PUBLISH)
  9017. _PASS1_PUBLISH_LOWERCASE=$(_PASS1_PUBLISH_LOWERCASE:A=a)
  9018. _PASS1_PUBLISH_LOWERCASE=$(_PASS1_PUBLISH_LOWERCASE:D=d)
  9019. _PASS1_PUBLISH_LOWERCASE=$(_PASS1_PUBLISH_LOWERCASE:E=e)
  9020. _PASS1_PUBLISH_LOWERCASE=$(_PASS1_PUBLISH_LOWERCASE:M=m)
  9021. _PASS1_PUBLISH_LOWERCASE=$(_PASS1_PUBLISH_LOWERCASE:L=l)
  9022. _PASS1_PUBLISH_LOWERCASE=$(_PASS1_PUBLISH_LOWERCASE:S=s)
  9023. _PASS1_PUBLISH_LOWERCASE=$(_PASS1_PUBLISH_LOWERCASE:T=t)
  9024. _PASS1_PUBLISH_LOWERCASE=$(_PASS1_PUBLISH_LOWERCASE:X=x)
  9025.  
  9026. # Remove spaces, tabs, and carriage returns, so that when
  9027. # we search for ".dll}", etc. below it will effectively
  9028. # check if the destination filename ends with ".dll".
  9029. _PASS1_PUBLISH_LOWERCASE=$(_PASS1_PUBLISH_LOWERCASE: =)
  9030. _PASS1_PUBLISH_LOWERCASE=$(_PASS1_PUBLISH_LOWERCASE: =)
  9031. _PASS1_PUBLISH_LOWERCASE=$(_PASS1_PUBLISH_LOWERCASE:^
  9032. =)
  9033.  
  9034. !if "$(_PASS1_PUBLISH_LOWERCASE:.asmmeta}=)" != "$(_PASS1_PUBLISH_LOWERCASE)"
  9035. ! error : Publish .asmmeta files in pass 0, not pass 1.
  9036. !endif
  9037.  
  9038. !endif
  9039.  
  9040. !if "$(_PASS0_PUBLISH_LOWERCASE:.dll}=)" != "$(_PASS0_PUBLISH_LOWERCASE)" \
  9041. || "$(_PASS0_PUBLISH_LOWERCASE:.exe}=)" != "$(_PASS0_PUBLISH_LOWERCASE)" \
  9042. || "$(_PASS0_PUBLISH_LOWERCASE:.metadata_dll}=)" != "$(_PASS0_PUBLISH_LOWERCASE)" \
  9043. || "$(_PASS0_PUBLISH_LOWERCASE:.metadata_exe}=)" != "$(_PASS0_PUBLISH_LOWERCASE)" \
  9044.  
  9045. #
  9046. # only redist drops from devdiv should publish .metadata_dll, .metadata_exe, exe, .dll
  9047. #
  9048. !if ("$(MAKEDIR_LOWERCASE)" == "$(BASEDIR)\com\netfx\binary_release") \
  9049. || ("$(MAKEDIR_LOWERCASE)" == "$(BASEDIR)\com\netfx\1.1") \
  9050. || ("$(MAKEDIR_LOWERCASE)" == "$(BASEDIR)\intl\en-us\src\redist\mspartners\winfx.35") \
  9051. || ("$(MAKEDIR_LOWERCASE)" == "$(BASEDIR)\intl\en-us\src\redist\mspartners\winfx.30\wpf\binary_release") \
  9052. || ("$(MAKEDIR_LOWERCASE)" == "$(BASEDIR)\intl\en-us\src\redist\mspartners\winfx.30\wcf\binary_release") \
  9053. || ("$(MAKEDIR_LOWERCASE)" == "$(BASEDIR)\intl\en-us\src\redist\mspartners\winfx.30\wwf\binary_release") \
  9054. || ("$(MAKEDIR_LOWERCASE)" == "$(BASEDIR)\redist\mspartners\netfx35\cdf\binary_release") \
  9055. || ("$(MAKEDIR_LOWERCASE)" == "$(BASEDIR)\redist\mspartners\netfx35\linq\binary_release")
  9056.  
  9057. !else
  9058.  
  9059. ! error Do not publish .exes or .dlls or .metadata_dll or .metadata_exe files.
  9060. !ifdef _PROJECT_BUILDS_MANAGED_CODE
  9061. ! error Just publish .asmmeta files.
  9062. !endif # } }
  9063.  
  9064.  
  9065. #
  9066. # Check pass1_publish only during pass 1 because it can contain $(TARGET) that is .lib in pass 1
  9067. # but .dll in pass 2.
  9068. #
  9069. !if defined(PASS1_PUBLISH) && "$(BUILD_PASS)" != "PASS0" && "$(BUILD_PASS)" != "PASS2" && !defined(PASS1_NOLIB) # { {
  9070. !if "$(_PASS1_PUBLISH_LOWERCASE:.dll}=)" != "$(_PASS1_PUBLISH_LOWERCASE)" \
  9071. || "$(_PASS1_PUBLISH_LOWERCASE:.exe}=)" != "$(_PASS1_PUBLISH_LOWERCASE)" \
  9072. || "$(_PASS1_PUBLISH_LOWERCASE:.metadata_dll}=)" != "$(_PASS1_PUBLISH_LOWERCASE)" \
  9073. || "$(_PASS1_PUBLISH_LOWERCASE:.metadata_exe}=)" != "$(_PASS1_PUBLISH_LOWERCASE)" # { {
  9074. ! error Do not publish .exes or .dlls or .metadata_dll or .metadata_exe files.
  9075. !ifdef _PROJECT_BUILDS_MANAGED_CODE # { {
  9076. ! error Just publish .asmmeta files.
  9077. !endif # } }
  9078. !endif # } }
  9079. !endif # } }
  9080. !endif # } }
  9081. !endif # } }
  9082.  
  9083. # { {
  9084.  
  9085. PASS0_Pub: $(PASS0_OBJECTS) $(NTTARGETFILE0) _concurrent_midl_join
  9086. !if defined(PASS0_PUBLISH) && "$(BUILD_PASS)" != "PASS1" && "$(BUILD_PASS)" != "PASS2"
  9087. set BUILDMSG=$(@F)
  9088. $(PUBLISH_CMD) /O_BINARY_METADATA:$(_O_BINARY_METADATA) -F <<$(PUBLISH_RESPONSE_FILE).pass0
  9089. $(PASS0_PUBLISH:}=}
  9090. )
  9091. <<$(BUILD_NOKEEP)
  9092. set BUILDMSG=$(@F) done
  9093. !endif
  9094.  
  9095. # { {
  9096.  
  9097. PASS1_Pub: $(NTTARGETFILE1)
  9098. !if defined(PASS1_PUBLISH) && "$(BUILD_PASS)" != "PASS0" && "$(BUILD_PASS)" != "PASS2" && !defined(PASS1_NOLIB)
  9099. set BUILDMSG=$(@F)
  9100. $(PUBLISH_CMD) -F <<$(PUBLISH_RESPONSE_FILE).pass1
  9101. $(PASS1_PUBLISH:}=}
  9102. )
  9103. <<$(BUILD_NOKEEP)
  9104. set BUILDMSG=$(@F) done
  9105. !endif
  9106.  
  9107. #
  9108. # Binary drop runs only during the link phase
  9109. #
  9110.  
  9111. # { {
  9112.  
  9113. BINARY_Pub:
  9114. !ifdef BINARY_PUBLISH
  9115. ! if "$(BINPUBLISH)" == "1"
  9116. $(BINDROP_CMD) -F <<$(BINDROP_RESPONSE_FILE)
  9117. $(BINARY_PUBLISH:}=}
  9118. )
  9119. <<$(BUILD_NOKEEP)
  9120. ! else
  9121. @echo BINARY_PUBLISH_PROJECTS in environment doesn't contain $(_PROJECT_) -
  9122. @echo binaries will not be published.
  9123. ! endif
  9124. !else if defined(BINARY_PUBLISH_FILES)
  9125. ! if "$(BINPUBLISH)" == "1"
  9126. @cmd /v:on /c make_publish_spec $(BINARY_PUBLISH_ROOT) $(OBJ_PATH)\$O $(BINARY_PUBLISH_FILES) | $(BINDROP_CMD) -I
  9127. ! else
  9128. @echo BINARY_PUBLISH_PROJECTS in environment doesn't contain $(_PROJECT_) -
  9129. @echo binaries will not be published.
  9130. ! endif
  9131. !endif
  9132.  
  9133. !endif
  9134.  
  9135.  
  9136. # Support to compile licensing manifest
  9137. !if defined(SLS_LICENSING_MANIFEST)
  9138. ! include $(RAZZLETOOLPATH)\licensing.inc
  9139. !endif
  9140.  
  9141. ! if $(FREEBUILD) || defined(BUILD_CHECKED_KERNEL)
  9142. MANIFEST_BUILD_TYPE=release
  9143. ! else
  9144. MANIFEST_BUILD_TYPE=debug
  9145. ! endif
  9146.  
  9147.  
  9148. # Support to compile CMI manifests
  9149. !if defined(SOURCE_MANIFEST) \
  9150. || defined(WOW64_SOURCE_MANIFEST) \
  9151. || defined(MULTI_SOURCE_MANIFEST) \
  9152. || defined(MULTI_WOW64_SOURCE_MANIFEST) \
  9153. || defined(PROD_SOURCE_MANIFEST) \
  9154. || defined(PROD_WOW64_SOURCE_MANIFEST) \
  9155. || defined(EVENTS_MANIFEST) \
  9156. || defined(SLS_LICENSING_MANIFEST) \
  9157. || defined(EDITION_SOURCE_MANIFEST) \
  9158. || defined(WINPE_SOURCE_MANIFEST)
  9159.  
  9160. ! ifndef MANIFEST_COMPILER_ARGUMENTS
  9161.  
  9162. MANIFEST_HASH_ALGORITHM=SHA1
  9163.  
  9164. MANIFEST_VERSION=$(VER_PRODUCTVERSION_STR)
  9165.  
  9166.  
  9167. # We don't do the language replacements unless someone tells us to.
  9168. # Everything in the product should have these handled during postbuild.
  9169. !ifndef CMI_MANIFEST_REPLACE_LANGUAGES
  9170. CMI_MANIFEST_REPLACE_LANGUAGES=0
  9171. !endif
  9172.  
  9173. !if defined(CMI_MANIFEST_REPLACE_LANGUAGES)
  9174. ! if "$(CMI_MANIFEST_REPLACE_LANGUAGES)" != "1" && "$(CMI_MANIFEST_REPLACE_LANGUAGES)" != "0"
  9175. ! error CMI_MANIFEST_REPLACE_LANGUAGES must 0, 1, or not defined.
  9176. ! endif
  9177. !endif
  9178.  
  9179. !if "$(CMI_MANIFEST_REPLACE_LANGUAGES)" == "1"
  9180.  
  9181. #
  9182. # People who specify their CMI manifest language
  9183. #
  9184. ! ifdef CMI_MANIFEST_LANGUAGE
  9185. MANIFEST_LANGUAGE=$(CMI_MANIFEST_LANGUAGE)
  9186. ! else
  9187. MANIFEST_LANGUAGE=neutral
  9188. ! endif
  9189.  
  9190. #
  9191. # MUI related substitutions
  9192. #
  9193. ! ifdef CMI_MANIFEST_CULTURE_NAME_STRING
  9194. MANIFEST_CULTURE_NAME_STRING=$(CMI_MANIFEST_CULTURE_NAME_STRING)
  9195. ! else
  9196. MANIFEST_CULTURE_NAME_STRING=en-US
  9197. ! endif
  9198.  
  9199. ! ifdef CMI_MANIFEST_CULTURE_NEUTRAL_NAME_STRING
  9200. MANIFEST_CULTURE_NEUTRAL_NAME_STRING=$(CMI_MANIFEST_CULTURE_NEUTRAL_NAME_STRING)
  9201. ! else
  9202. MANIFEST_CULTURE_NEUTRAL_NAME_STRING=en
  9203. ! endif
  9204.  
  9205. ! ifdef CMI_MANIFEST_CULTURE_SPECIFIC_NAME_STRING
  9206. MANIFEST_CULTURE_SPECIFIC_NAME_STRING=$(CMI_MANIFEST_CULTURE_SPECIFIC_NAME_STRING)
  9207. ! else
  9208. MANIFEST_CULTURE_SPECIFIC_NAME_STRING=en-US
  9209. ! endif
  9210.  
  9211. ! ifdef CMI_MANIFEST_CULTURE_LANG_ID_HEX
  9212. MANIFEST_CULTURE_LANG_ID_HEX=$(CMI_MANIFEST_CULTURE_LANG_ID_HEX)
  9213. ! else
  9214. MANIFEST_CULTURE_LANG_ID_HEX=0409
  9215. ! endif
  9216.  
  9217. ! ifdef CMI_MANIFEST_CULTURE_PRIMARY_LANG_ID_HEX
  9218. MANIFEST_CULTURE_PRIMARY_LANG_ID_HEX=$(CMI_MANIFEST_CULTURE_PRIMARY_LANG_ID_HEX)
  9219. ! else
  9220. MANIFEST_CULTURE_PRIMARY_LANG_ID_HEX=0009
  9221. ! endif
  9222.  
  9223. ! ifdef CMI_MANIFEST_CULTURE_FULL_LANG_ID_HEX
  9224. MANIFEST_CULTURE_FULL_LANG_ID_HEX=$(CMI_MANIFEST_CULTURE_FULL_LANG_ID_HEX)
  9225. ! else
  9226. MANIFEST_CULTURE_FULL_LANG_ID_HEX=0409
  9227. ! endif
  9228.  
  9229. !endif #!if $(CMI_MANIFEST_REPLACE_LANGUAGES) == "1"
  9230.  
  9231.  
  9232.  
  9233. #
  9234. # URT related substitutions
  9235. #
  9236.  
  9237. #
  9238. # MANIFEST_CLR_VERSION_STR is expected to have this format: v(\d+)\.(\d+)\.(\d+)
  9239. # for example v1.0.3705
  9240. #
  9241.  
  9242. !if 0 # FUTURE This will take a bit more work to jive with the
  9243. # various manifest content around the tree.
  9244. # People hardcode various values and some people use the bogus 1.0.0 value.
  9245.  
  9246. !if defined(URT_VER)
  9247. !include $(NTMAKEENV)\clr_versions.inc
  9248. ! if "$(URT_VER)" == "1.1"
  9249. MANIFEST_CLR_VERSION_STR=$(URT_VER_1_1)
  9250. ! elseif "$(URT_VER)" == "2.0"
  9251. MANIFEST_CLR_VERSION_STR=$(URT_VER_2_0)
  9252. ! else
  9253. ! error Unknown URT_VER.
  9254. ! endif
  9255. MANIFEST_CLR_PATH=$$(runtime.windows)\Microsoft.NET\Framework\$(MANIFEST_CLR_VERSION_STR)
  9256. !endif
  9257.  
  9258. !else
  9259.  
  9260. ! if (!defined(URT_VER) || "$(URT_VER)" == "1.2") && defined(URT_VER_1_2)
  9261. MANIFEST_CLR_VERSION_STR=$(URT_VER_1_2)
  9262. ! endif
  9263. ! if "$(URT_VER)" == "1.1" && defined(URT_VER_1_2)
  9264. MANIFEST_CLR_VERSION_STR=$(URT_VER_1_1)
  9265. ! endif
  9266. ! if "$(URT_VER)" == "1.0" && defined(URT_VER_1_2)
  9267. MANIFEST_CLR_VERSION_STR=$(URT_VER_1_0)
  9268. ! endif
  9269.  
  9270. #
  9271. # in case nothing is defined
  9272. #
  9273. ! ifndef MANIFEST_CLR_VERSION_STR
  9274. MANIFEST_CLR_VERSION_STR=v1.0.0
  9275. !endif
  9276.  
  9277. MANIFEST_CLR_PATH=$$(runtime.windows)\Microsoft.NET\Framework\$(MANIFEST_CLR_VERSION_STR)
  9278.  
  9279. !endif
  9280.  
  9281. #
  9282. # temporary public key token until the fusion manifest compilation support
  9283. # gets checked in
  9284. #
  9285. ! ifndef MANIFEST_PUBLIC_KEY_TOKEN
  9286. MANIFEST_PUBLIC_KEY_TOKEN=1122334455667788
  9287. ! endif
  9288.  
  9289. #
  9290. # file containing security descriptor definitions for WRP objects
  9291. #
  9292. ! ifndef MANIFEST_SDDL_FILE
  9293. MANIFEST_SDDL_FILE=@$(NTMAKEENV)\manifest_sddl.txt
  9294. ! endif
  9295.  
  9296. #
  9297. # build platform, for x86/wow64 it is win32, for 64-bit builds it is win64
  9298. #
  9299. !ifndef BUILD_WIN_PLATFORM
  9300. !if $(386)
  9301. BUILD_WIN_PLATFORM=win32
  9302. !else
  9303. BUILD_WIN_PLATFORM=win64
  9304. !endif
  9305. !endif
  9306.  
  9307. #
  9308. # all the $(build.xyz) keys are case insensitive, but values are case sensitive
  9309. #
  9310. MANIFEST_COMPILER_BASE_ARGUMENTS=\
  9311. $$(build.version) $(MANIFEST_VERSION) \
  9312. !if "$(TARGETTYPE)" != "NOTARGET"
  9313. # This is for if the manifests live with the code.
  9314. # It doesn't yet work, but only one directory could even use it: \nt\ds\security\services\ca\certmmc.
  9315. # $$(build.assemblyVersion) $(ASSEMBLY_IDENTITY_VERSION) \
  9316. !endif
  9317. # This is a compromise for manifests that don't live with the code.
  9318. $$(build.WindowsManagedAssemblyVersion) $(WINDOWS_ASSEMBLY_VERSION) \
  9319. $$(build.MediaCenterManagedVersion) $(M_C_MANAGED_VERSION) \
  9320. $$(build.majorVersion),$$(build.minorVersion),$$(build.buildNumber),$$(build.revision):(\d+)\.(\d+)\.(\d+)\.(\d+) $(MANIFEST_VERSION) \
  9321. $$(build.majorMinor) $(VER_PRODUCTVERSION_STRING) \
  9322. $$(build.majorMinorZeroZero) $(VER_PRODUCTVERSION_STRING).0.0 \
  9323. $$(build.majorMinorStarStar) $(VER_PRODUCTVERSION_STRING).*.* \
  9324. $$build.version $(MANIFEST_VERSION) \
  9325. $$(build.language) $(MANIFEST_LANGUAGE) \
  9326. $$build.language $(MANIFEST_LANGUAGE) \
  9327. $$(build.buildType) $(MANIFEST_BUILD_TYPE) \
  9328. $$build.buildType $(MANIFEST_BUILD_TYPE) \
  9329. $$(build.processorArchitecture) $(SXS_PROCESSOR_ARCHITECTURE) \
  9330. $$(build.hashAlgorithmType) $(MANIFEST_HASH_ALGORITHM) \
  9331. $$build.processor $(SXS_PROCESSOR_ARCHITECTURE) \
  9332. $$(build.winPlatform) $(BUILD_WIN_PLATFORM) \
  9333. !if "$(PROCESSOR_ARCHITECTURE_LOWERCASE)" == "$(_BUILDARCH)"
  9334. $$(build.hostarch) $(PROCESSOR_ARCHITECTURE) \
  9335. !else
  9336. $$(build.hostarch) x86 \
  9337. !endif
  9338. !if "$(CMI_MANIFEST_REPLACE_LANGUAGES)" == "1"
  9339. $$(build.cultureNameString) $(MANIFEST_CULTURE_NAME_STRING) \
  9340. $$(build.cultureNeutralNameString) $(MANIFEST_CULTURE_NEUTRAL_NAME_STRING) \
  9341. $$(build.cultureSpecificNameString) $(MANIFEST_CULTURE_SPECIFIC_NAME_STRING) \
  9342. $$(build.cultureLangIdHex) $(MANIFEST_CULTURE_LANG_ID_HEX) \
  9343. $$(build.culturePrimaryLangIdHex) $(MANIFEST_CULTURE_PRIMARY_LANG_ID_HEX) \
  9344. $$(build.cultureFullLangIdHex) $(MANIFEST_CULTURE_FULL_LANG_ID_HEX) \
  9345. !endif
  9346. !if defined(MANIFEST_CLR_VERSION_STR)
  9347. $$(build.clrVersionStr) $(MANIFEST_CLR_VERSION_STR) \
  9348. !endif
  9349. !if defined(MANIFEST_CLR_PATH)
  9350. $$(build.clrPath) $(MANIFEST_CLR_PATH) \
  9351. !endif
  9352. $$(build.windowsPublicKeyToken) $(WINDOWS_PUBLIC_KEY_TOKEN) \
  9353. $$(build.publicKeyToken) $(MANIFEST_PUBLIC_KEY_TOKEN) \
  9354. !if defined(MANIFEST_CLR_VERSION_STR)
  9355. $$(build.clrVersion):v(.+) $(MANIFEST_CLR_VERSION_STR) \
  9356. !endif
  9357. -SDDL_CONFIG_FILE $(MANIFEST_SDDL_FILE)
  9358. ! endif
  9359.  
  9360. #
  9361. # CMI_MANIFEST_COMPILER_EXTRA_ARGUMENTS must be a list of name-value pairs.
  9362. #
  9363. # 1. The name must either of format $(build.*) or $build.*
  9364. # 2. The value must not be spaces or empty.
  9365. # 3. If name or value contains space, it must be quoted.
  9366. # 4. name and value must be delimited by a space
  9367. # 5. each pair must be delimited by a space
  9368. # 6. a name specified here can NOT override any default name specified in
  9369. # this makefile.def
  9370. #
  9371. # N.B. name is case-censitive.
  9372. #
  9373. # e.g.
  9374. #
  9375. # CMI_MANIFEST_COMPILER_EXTRA_ARGUMENTS=\
  9376. # $$(build.myTargetName) $(TARGETNAME) \
  9377. # $$(build.myTargetPath) $(TARGETPATH)
  9378. #
  9379. ! ifdef CMI_MANIFEST_COMPILER_EXTRA_ARGUMENTS
  9380. MANIFEST_COMPILER_ARGUMENTS=$(CMI_MANIFEST_COMPILER_EXTRA_ARGUMENTS) $(MANIFEST_COMPILER_BASE_ARGUMENTS)
  9381. !else
  9382. MANIFEST_COMPILER_ARGUMENTS=$(MANIFEST_COMPILER_BASE_ARGUMENTS)
  9383. ! endif
  9384.  
  9385. ! ifdef CMI_MANIFEST_BINPLACE
  9386. MANIFEST_DIRECTORY=$(CMI_MANIFEST_BINPLACE)
  9387. !undef MANIFEST_DIRECTORY2
  9388. ! else
  9389. MANIFEST_DIRECTORY=cmicomponents
  9390. MANIFEST_DIRECTORY2=cmiconverted
  9391. !undef MANIFEST_DIRECTORY2
  9392. ! endif
  9393.  
  9394. ! ifdef CMI_MANIFEST_LANGUAGE
  9395. MANIFEST_DIRECTORY=$(MANIFEST_DIRECTORY)\$(LANGUAGE)
  9396. ! ifdef MANIFEST_DIRECTORY2
  9397. MANIFEST_DIRECTORY2=$(MANIFEST_DIRECTORY2)\$(LANGUAGE)
  9398. ! endif
  9399. ! endif
  9400.  
  9401. ! ifndef CMI_BINPLACE_OVERRIDE
  9402. CMI_RES_BINPLACE=$(LOC_BIN)\cmicomponents.raw
  9403. ! else
  9404. CMI_RES_BINPLACE=$(CMI_BINPLACE_OVERRIDE)
  9405. ! endif
  9406.  
  9407. ! ifndef CMI_MULTI_BINPLACE_OVERRIDE
  9408. CMI_MULTI_BINPLACE=$(LOC_MULTI)\cmicomponents.raw
  9409. ! else
  9410. CMI_MULTI_BINPLACE=$(CMI_MULTI_BINPLACE_OVERRIDE)
  9411. ! endif
  9412.  
  9413. CV_BCZOPTIONS=/systemerrorstoconsole /nowarnings /failurestoconsole /ignorescope=inter /ignoreviewtype=compiled /basedir=$(MAKEDIR) /omitmetadata /logdir=$(OBJ_PATH)\$O /savemeta=$(OBJ_PATH)\$O\cvexceptionlists /findstaleexceptions=$(OBJ_PATH)\$O
  9414.  
  9415. !if !defined(CV_BCZPROFILE) || "$(CV_BCZPROFILE)" == ""
  9416. CV_BCZPROFILE=bcz.profile
  9417. !endif
  9418.  
  9419. ! ifdef SOURCE_MANIFEST
  9420. $(SOURCE_MANIFEST): $(CMI_MANIFESTS)
  9421. set BUILDMSG=DiagValid is validating manifest instrumentation.
  9422. "diagvalid.exe" "$(RAZZLETOOLPATH)\diagvalid\exceptions.xml" $?
  9423. ! ifndef DISABLE_CV
  9424. set BUILDMSG=Component Validation is validating manifests.
  9425. $(_URTRUN_20) ValidateManifest $(CV_BCZOPTIONS) $(CV_OPTIONS) /useprofile=$(CV_BCZPROFILE) <<$(@D)\ManifestsToBevalidated
  9426. $?
  9427. <<$(BUILD_NOKEEP)
  9428. ! endif
  9429. ! ifdef CACHE_SOURCE_MANIFESTS
  9430. set BUILDMSG=Source manifests are being cached.
  9431. $(_URTRUN_20) CacheManifest $(MAKEDIR) $(CACHE_SOURCE_MANIFESTS) <<$(@D)\ManifestsToBeCached
  9432. $?
  9433. <<$(BUILD_NOKEEP)
  9434. ! endif
  9435. ! if !defined(DISABLE_SOURCE_MANIFEST_VALIDATION)
  9436. set BUILDMSG=Manifest schema and formatting is being checked.
  9437. checksourcemanifests -obj:$(OBJ_PATH)\$O <<$(@D)\ManifestsToBeChecked
  9438. $(**: =
  9439. )
  9440. <<$(BUILD_NOKEEP)
  9441. ! endif
  9442. #
  9443. # ! means loop
  9444. # $? is the manifests with a later timestamp than $(SOURCE_MANIFEST)
  9445. # $(SOURCE_MANIFEST) is the list of manifests to be binplaced
  9446. # The .vbs manifest compiler takes ....foo.man and outputs $O\foo.man.temp0
  9447. # The RC manifest compiler takes $O\foo.man.temp0 and outputs $O\foo.man.temp1
  9448. # The temp file $O\foo.man.temp0 is deleted
  9449. # ManifestCompilerPass2.cmd takes $O\foo.man.temp1 and outputs $O\foo.man.
  9450. #
  9451. !$(MANIFEST_COMPILER_CMD) $? $(@D)\$(?F).temp0 $(MANIFEST_COMPILER_ARGUMENTS) $$(build.arch) $(SXS_PROCESSOR_ARCHITECTURE)
  9452. !$(MANIFEST_RCPARSER_CMD) $(@D)\$(?F).temp0 $(@D)\$(?F).temp1 -l $(@D)\rcmanparse.log -a
  9453. !$(_DELFILE) $(@D)\$(?F).temp0
  9454. $(_PERL) $(RAZZLETOOLPATH)\ManifestCompilerPass2.cmd -InputManifestList << -OutputManifestList [email protected] -PerfTrackManifests "$(PERFTRACK_MANIFESTS)" -PerfTrackOptions " $(PERFTRACK_OPTIONS)" -ObjectPath $(@D) -MtOptions "$(MT_OPTIONS)" -ManifestsWithSpuriousCompositions "$(CMI_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS)"
  9455. $?
  9456. <<$(BUILD_NOKEEP)
  9457. ! ifndef NO_BINPLACE
  9458. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST \
  9459. ! ifdef MANIFEST_DIRECTORY2
  9460. $(MANIFEST_DIRECTORY2):$(MANIFEST_DIRECTORY) \
  9461. ! else
  9462. $(MANIFEST_DIRECTORY) \
  9463. ! endif
  9464. @[email protected] /:DEST $(CMI_RES_BINPLACE) @[email protected]
  9465. ! endif
  9466.  
  9467. ! if defined(WINPE_COMPILE_SMI_MANIFEST) && !defined(NO_BINPLACE)
  9468. ! if "$(WINPE_COMPILE_SMI_MANIFEST)" != "1"
  9469. ! error WINPE_COMPILE_SMI_MANIFEST must be set to 1 or not defined
  9470. ! endif
  9471. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) \
  9472. ! if !defined(WINPE_COMPILE_SMI_MANIFEST_PLACEFILE)
  9473. /:DEST WinPE_SMI_Manifests \
  9474. ! else
  9475. /P $(WINPE_COMPILE_SMI_MANIFEST_PLACEFILE) \
  9476. ! endif
  9477. ! endif
  9478. ! if defined(SKU_SETTINGS_OVERRIDE_FILES)
  9479. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) \
  9480. /:DEST SKU-Settings-Overrides $(SKU_SETTINGS_OVERRIDE_FILES)
  9481. ! endif
  9482.  
  9483. # Create LCG files for CMI_MANIFESTS files if needed
  9484. ! if "$(DO_LSBUILD)" == "1" && "$(BUILD_CMI_LCG)" == "1"
  9485. set BUILDMSG=making CMI_MANIFESTS with CreateLCGFile.pl
  9486. set createfile=<<$(@D)\cmi_manifests.lcg.lst
  9487. $(**: =
  9488. )
  9489. <<keep
  9490. ! ifndef NO_BINPLACE
  9491. set createfile=<<$(@D)\cmi_manifests.lcg.binplace.txt
  9492. $(BINPLACE_FLAGS) /:DEST cmicomponents.raw
  9493. <<keep
  9494. ! endif # NO_BINPLACE
  9495. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  9496. /c \
  9497. /m:$(@D)\cmi_manifests.lcg.lst \
  9498. /t:$(@D) \
  9499. $(LSBUILD_PARSER_ID_OPTION) \
  9500. $(ALT_LCI_DIR_OPTION) \
  9501. /s:$(LSBUILD_PARSER_SETTINGS) \
  9502. ! ifndef NO_BINPLACE
  9503. /b:$(@D)\cmi_manifests.lcg.binplace.txt \
  9504. /r:$(LCG_BINPLACE_TARGET) \
  9505. ! endif # ifndef NO_BINPLACE
  9506. /l:$(LANGUAGE)
  9507. ! endif # if "$(DO_LSBUILD)" == "1" && "$(BUILD_CMI_LCG)" == "1"
  9508.  
  9509.  
  9510. ! endif # ifdef SOURCE_MANIFEST
  9511.  
  9512.  
  9513.  
  9514. ! ifdef WOW64_SOURCE_MANIFEST
  9515. $(WOW64_SOURCE_MANIFEST): $(CMI_WOW64_MANIFESTS)
  9516. set build.arch=wow64
  9517. !$(MANIFEST_COMPILER_CMD) $? $(@D)\wow64_$(?F).temp0 $(MANIFEST_COMPILER_ARGUMENTS) $$(build.arch) wow64
  9518. !$(MANIFEST_RCPARSER_CMD) $(@D)\wow64_$(?F).temp0 $(@D)\wow64_$(?F).temp1 -l $(@D)\rcmanparse.log -a
  9519. set build.arch=$(_BUILDARCH)
  9520. $(_PERL) $(RAZZLETOOLPATH)\ManifestCompilerPass2.cmd -OutputFilePrefix wow64_ -InputManifestList << -OutputManifestList [email protected] -PerfTrackManifests "$(PERFTRACK_MANIFESTS)" -PerfTrackOptions " $(PERFTRACK_OPTIONS)" -ObjectPath $(@D) -MtOptions "$(MT_OPTIONS)" -ManifestsWithSpuriousCompositions "$(CMI_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS) $(CMI_WOW64_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS)"
  9521. $?
  9522. <<$(BUILD_NOKEEP)
  9523. ! ifndef NO_BINPLACE
  9524. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST \
  9525. ! ifdef MANIFEST_DIRECTORY2
  9526. $(MANIFEST_DIRECTORY2)\wow6432:$(MANIFEST_DIRECTORY)\wow6432 \
  9527. ! else
  9528. $(MANIFEST_DIRECTORY)\wow6432 \
  9529. ! endif
  9530. @[email protected] /:DEST $(CMI_RES_BINPLACE)\wow6432 @[email protected]
  9531. ! endif
  9532.  
  9533. # Create LCG files for CMI_WOW64_MANIFESTS files if needed
  9534. ! if "$(DO_LSBUILD)" == "1" && "$(BUILD_CMI_LCG)" == "1"
  9535. set BUILDMSG=making CMI_WOW64_MANIFESTS with CreateLCGFile.pl
  9536. set BUILDMSG=$(@D)\cmi_wow64_manifests.lcg.lst
  9537. set createfile=<<$(@D)\cmi_wow64_manifests.lcg.lst
  9538. wow64_$(**F: =
  9539. wow64_)
  9540. <<keep
  9541. ! ifndef NO_BINPLACE
  9542. set createfile=<<$(@D)\cmi_wow64_manifests.lcg.binplace.txt
  9543. $(BINPLACE_FLAGS) /:DEST cmicomponents.raw\wow6432
  9544. <<keep
  9545. ! endif # NO_BINPLACE
  9546. cd $(@D)
  9547. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  9548. /c \
  9549. /m:$(@D)\cmi_wow64_manifests.lcg.lst \
  9550. /t:$(@D) \
  9551. $(LSBUILD_PARSER_ID_OPTION) \
  9552. $(ALT_LCI_DIR_OPTION) \
  9553. /s:$(LSBUILD_PARSER_SETTINGS) \
  9554. ! ifndef NO_BINPLACE
  9555. /b:$(@D)\cmi_wow64_manifests.lcg.binplace.txt \
  9556. /r:$(LCG_BINPLACE_TARGET) \
  9557. ! endif # NO_BINPLACE
  9558. /l:$(LANGUAGE)
  9559. cd $(MAKEDIR)
  9560. ! endif # DO_LSBUILD && BUILD_CMI_LCG
  9561.  
  9562.  
  9563. ! endif
  9564.  
  9565.  
  9566.  
  9567.  
  9568.  
  9569. ! ifdef MULTI_SOURCE_MANIFEST
  9570. !message MULTI_SOURCE_MANIFEST is $(MULTI_SOURCE_MANIFEST) : $(CMI_MULTI_MANIFESTS)
  9571. $(MULTI_SOURCE_MANIFEST): $(CMI_MULTI_MANIFESTS)
  9572. set BUILDMSG=Making CMI_MULTI_MANIFESTS with $(MULTI_SOURCE_MANIFEST) : $(CMI_MULTI_MANIFESTS)
  9573. set BUILDMSG=DiagValid is validating manifest instrumentation.
  9574. "diagvalid.exe" "$(RAZZLETOOLPATH)\diagvalid\exceptions.xml" $?
  9575. ! ifndef DISABLE_CV
  9576. set BUILDMSG=Component Validation is validating manifests.
  9577. $(_URTRUN_20) ValidateManifest $(CV_BCZOPTIONS) $(CV_OPTIONS) /useprofile=$(CV_BCZPROFILE) <<$(@D)\MultiManifestsToBevalidated
  9578. $?
  9579. <<$(BUILD_NOKEEP)
  9580. ! endif
  9581. ! ifdef CACHE_SOURCE_MANIFESTS
  9582. set BUILDMSG=Source manifests are being cached.
  9583. $(_URTRUN_20) CacheManifest $(MAKEDIR) $(CACHE_SOURCE_MANIFESTS) <<$(@D)\ManifestsToBeCached
  9584. $?
  9585. <<$(BUILD_NOKEEP)
  9586. ! endif
  9587. #
  9588. # ! means loop
  9589. # $? is the manifests with a later timestamp than $(MULTI_SOURCE_MANIFEST)
  9590. # $(MULTI_SOURCE_MANIFEST) is the list of manifests to be binplaced
  9591. # The .vbs manifest compiler takes ....foo.man and outputs $O\foo.man.temp0
  9592. # The RC manifest compiler takes $O\foo.man.temp0 and outputs $O\foo.man.temp1
  9593. # The temp file $O\foo.man.temp0 is deleted
  9594. # ManifestCompilerPass2.cmd takes $O\foo.man.temp1 and outputs $O\foo.man.
  9595. #
  9596. !$(MANIFEST_COMPILER_CMD) $? $(@D)\$(?F).temp0 $(MANIFEST_COMPILER_ARGUMENTS) $$(build.arch) $(SXS_PROCESSOR_ARCHITECTURE)
  9597. !$(MANIFEST_RCPARSER_CMD) $(@D)\$(?F).temp0 $(@D)\$(?F).temp1 -l $(@D)\rcmanparse.log -a
  9598. !$(_DELFILE) $(@D)\$(?F).temp0
  9599. $(_PERL) $(RAZZLETOOLPATH)\ManifestCompilerPass2.cmd -InputManifestList << -OutputManifestList [email protected] -PerfTrackManifests "$(PERFTRACK_MANIFESTS)" -PerfTrackOptions " $(PERFTRACK_OPTIONS)" -ObjectPath $(@D) -MtOptions "$(MT_OPTIONS)" -ManifestsWithSpuriousCompositions "$(CMI_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS)"
  9600. $?
  9601. <<$(BUILD_NOKEEP)
  9602. ! ifndef NO_BINPLACE
  9603. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST \
  9604. ! ifdef MANIFEST_DIRECTORY2
  9605. $(MANIFEST_DIRECTORY2):$(MANIFEST_DIRECTORY) \
  9606. ! else
  9607. $(MANIFEST_DIRECTORY) \
  9608. ! endif
  9609. @[email protected] /:DEST $(CMI_MULTI_BINPLACE) @[email protected]
  9610. ! endif
  9611.  
  9612. ! if defined(WINPE_COMPILE_SMI_MANIFEST) && !defined(NO_BINPLACE)
  9613. ! if "$(WINPE_COMPILE_SMI_MANIFEST)" != "1"
  9614. ! error WINPE_COMPILE_SMI_MANIFEST must be set to 1 or not defined
  9615. ! endif
  9616. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) \
  9617. ! if !defined(WINPE_COMPILE_SMI_MANIFEST_PLACEFILE)
  9618. /:DEST WinPE_SMI_Manifests \
  9619. ! else
  9620. /P $(WINPE_COMPILE_SMI_MANIFEST_PLACEFILE) \
  9621. ! endif
  9622. ! endif
  9623.  
  9624. ! if defined(SKU_SETTINGS_OVERRIDE_FILES)
  9625. $(BINPLACE_CMD) /:DEST SKU-Settings-Overrides $(SKU_SETTINGS_OVERRIDE_FILES)
  9626. ! endif
  9627.  
  9628. # Create LCG files for CMI_MULTI_MANIFESTS files if needed
  9629. ! if "$(DO_LSBUILD)" == "1" && "$(BUILD_CMI_LCG)" == "1"
  9630. set BUILDMSG=making CMI_MULTI_MANIFESTS with CreateLCGFile.pl
  9631. set createfile=<<$(@D)\cmi_multi_manifests.lcg.lst
  9632. $(**: =
  9633. )
  9634. <<keep
  9635. ! ifndef NO_BINPLACE
  9636. set createfile=<<$(@D)\cmi_multi_manifests.lcg.binplace.txt
  9637. $(BINPLACE_FLAGS) /:DEST cmicomponents.raw
  9638. <<keep
  9639. ! endif # NO_BINPLACE
  9640. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  9641. /c \
  9642. /m:$(@D)\cmi_multi_manifests.lcg.lst \
  9643. /t:$(@D) \
  9644. $(LSBUILD_PARSER_ID_OPTION) \
  9645. $(ALT_LCI_DIR_OPTION) \
  9646. /s:$(LSBUILD_PARSER_SETTINGS) \
  9647. ! ifndef NO_BINPLACE
  9648. /b:$(@D)\cmi_multi_manifests.lcg.binplace.txt \
  9649. /r:$(LCG_BINPLACE_TARGET) \
  9650. ! endif # ifndef NO_BINPLACE
  9651. /l:$(LANGUAGE)
  9652. ! endif # if "$(DO_LSBUILD)" == "1" && "$(BUILD_CMI_LCG)" == "1"
  9653.  
  9654.  
  9655. ! endif # ifdef MULTI_SOURCE_MANIFEST
  9656.  
  9657.  
  9658.  
  9659.  
  9660. ! ifdef MULTI_WOW64_SOURCE_MANIFEST
  9661. $(MULTI_WOW64_SOURCE_MANIFEST): $(CMI_MULTI_WOW64_MANIFESTS)
  9662. set build.arch=wow64
  9663. !$(MANIFEST_COMPILER_CMD) $? $(@D)\wow64_$(?F).temp0 $(MANIFEST_COMPILER_ARGUMENTS) $$(build.arch) wow64
  9664. !$(MANIFEST_RCPARSER_CMD) $(@D)\wow64_$(?F).temp0 $(@D)\wow64_$(?F).temp1 -l $(@D)\rcmanparse.log -a
  9665. set build.arch=$(_BUILDARCH)
  9666. $(_PERL) $(RAZZLETOOLPATH)\ManifestCompilerPass2.cmd -OutputFilePrefix wow64_ -InputManifestList << -OutputManifestList [email protected] -PerfTrackManifests "$(PERFTRACK_MANIFESTS)" -PerfTrackOptions " $(PERFTRACK_OPTIONS)" -ObjectPath $(@D) -MtOptions "$(MT_OPTIONS)" -ManifestsWithSpuriousCompositions "$(CMI_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS) $(CMI_WOW64_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS)"
  9667. $?
  9668. <<$(BUILD_NOKEEP)
  9669. ! ifndef NO_BINPLACE
  9670. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST \
  9671. ! ifdef MANIFEST_DIRECTORY2
  9672. $(MANIFEST_DIRECTORY2)\wow6432:$(MANIFEST_DIRECTORY)\wow6432 \
  9673. ! else
  9674. $(MANIFEST_DIRECTORY)\wow6432 \
  9675. ! endif
  9676. @[email protected] /:DEST $(CMI_MULTI_BINPLACE)\wow6432 @[email protected]
  9677. ! endif
  9678.  
  9679. # Create LCG files for CMI_WOW64_MULTI_MANIFESTS files if needed
  9680. ! if "$(DO_LSBUILD)" == "1" && "$(BUILD_CMI_LCG)" == "1"
  9681. set BUILDMSG=making CMI_WOW64_MULTI_MANIFESTS with CreateLCGFile.pl
  9682. set BUILDMSG=$(@D)\cmi_wow64_multi_manifests.lcg.lst
  9683. set createfile=<<$(@D)\cmi_wow64_multi_manifests.lcg.lst
  9684. wow64_$(**F: =
  9685. wow64_)
  9686. <<keep
  9687. ! ifndef NO_BINPLACE
  9688. set createfile=<<$(@D)\cmi_wow64_multi_manifests.lcg.binplace.txt
  9689. $(BINPLACE_FLAGS) /:DEST cmicomponents.raw\wow6432
  9690. <<keep
  9691. ! endif # NO_BINPLACE
  9692. cd $(@D)
  9693. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  9694. /c \
  9695. /m:$(@D)\cmi_wow64_multi_manifests.lcg.lst \
  9696. /t:$(@D) \
  9697. $(LSBUILD_PARSER_ID_OPTION) \
  9698. $(ALT_LCI_DIR_OPTION) \
  9699. /s:$(LSBUILD_PARSER_SETTINGS) \
  9700. ! ifndef NO_BINPLACE
  9701. /b:$(@D)\cmi_wow64_multi_manifests.lcg.binplace.txt \
  9702. /r:$(LCG_BINPLACE_TARGET) \
  9703. ! endif # NO_BINPLACE
  9704. /l:$(LANGUAGE)
  9705. cd $(MAKEDIR)
  9706. ! endif # DO_LSBUILD && BUILD_CMI_LCG
  9707.  
  9708. ! endif
  9709.  
  9710.  
  9711.  
  9712.  
  9713. ! ifdef PROD_SOURCE_MANIFEST
  9714. $(PROD_SOURCE_MANIFEST): $(CMI_PROD_MANIFESTS)
  9715. set build.production=1
  9716. set BUILDMSG=DiagValid is validating manifest instrumentation.
  9717. "diagvalid.exe" "$(RAZZLETOOLPATH)\diagvalid\exceptions.xml" $?
  9718. !ifndef DISABLE_CV
  9719. set BUILDMSG=Component Validation is validating manifests.
  9720. $(_URTRUN_20) ValidateManifest $(CV_BCZOPTIONS) $(CV_OPTIONS) /useprofile=$(CV_BCZPROFILE) <<$(@D)\ProdManifestsToBevalidated
  9721. $?
  9722. <<$(BUILD_NOKEEP)
  9723. !endif
  9724. ! ifdef CACHE_SOURCE_MANIFESTS
  9725. set BUILDMSG=Source manifests are being cached.
  9726. $(_URTRUN_20) CacheManifest $(MAKEDIR) $(CACHE_SOURCE_MANIFESTS) <<$(@D)\ManifestsToBeCached
  9727. $?
  9728. <<$(BUILD_NOKEEP)
  9729. ! endif
  9730. ! if !defined(DISABLE_SOURCE_MANIFEST_VALIDATION)
  9731. set BUILDMSG=Manifest schema and formatting is being checked.
  9732. checksourcemanifests -obj:$(OBJ_PATH)\$O <<$(@D)\ManifestsToBeChecked
  9733. $(**: =
  9734. )
  9735. <<$(BUILD_NOKEEP)
  9736. ! endif
  9737. !$(MANIFEST_COMPILER_CMD) $? $(@D)\prod_$(?F).temp0 $(MANIFEST_COMPILER_ARGUMENTS) $$(build.arch) $(SXS_PROCESSOR_ARCHITECTURE) $$(build.production) 1
  9738. !$(MANIFEST_RCPARSER_CMD) $(@D)\prod_$(?F).temp0 $(@D)\prod_$(?F).temp1 -l $(@D)\prod_rcmanparse.log -a
  9739. set build.production=
  9740. !$(_DELFILE) $(@D)\prod_$(?F).temp0
  9741. $(_PERL) $(RAZZLETOOLPATH)\ManifestCompilerPass2.cmd -OutputFilePrefix prod_ -InputManifestList << -OutputManifestList [email protected] -PerfTrackManifests "$(PERFTRACK_MANIFESTS)" -PerfTrackOptions " $(PERFTRACK_OPTIONS)" -ObjectPath $(@D) -MtOptions "$(MT_OPTIONS)" -ManifestsWithSpuriousCompositions "$(CMI_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS)"
  9742. $?
  9743. <<$(BUILD_NOKEEP)
  9744. ! ifndef NO_BINPLACE
  9745. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST \
  9746. ! ifdef MANIFEST_DIRECTORY2
  9747. $(MANIFEST_DIRECTORY2)\production:$(MANIFEST_DIRECTORY)\production \
  9748. ! else
  9749. $(MANIFEST_DIRECTORY)\production \
  9750. ! endif
  9751. @[email protected] /:DEST $(CMI_RES_BINPLACE)\production @[email protected]
  9752. ! endif
  9753.  
  9754. !if defined(WINPE_COMPILE_SMI_MANIFEST) && !defined(NO_BINPLACE)
  9755. ! if "$(WINPE_COMPILE_SMI_MANIFEST)" != "1"
  9756. ! error WINPE_COMPILE_SMI_MANIFEST must be set to 1 or not defined
  9757. ! endif
  9758. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) \
  9759. ! if !defined(WINPE_COMPILE_SMI_MANIFEST_PLACEFILE)
  9760. /:DEST WinPE_SMI_Manifests \
  9761. ! else
  9762. /P $(WINPE_COMPILE_SMI_MANIFEST_PLACEFILE) \
  9763. ! endif
  9764. !endif
  9765.  
  9766. #!if defined(SKU_SETTINGS_OVERRIDE_FILES)
  9767. # $(BINPLACE_CMD) /:DEST SKU-Settings-Overrides $(SKU_SETTINGS_OVERRIDE_FILES)
  9768. #!endif
  9769.  
  9770. # Create LCG files for CMI_PROD_MANIFESTS files if needed
  9771. ! if "$(DO_LSBUILD)" == "1" && "$(BUILD_CMI_LCG)" == "1"
  9772. set BUILDMSG=making CMI_PROD_MANIFESTS (production) with CreateLCGFile.pl
  9773. set BUILDMSG= DIR: $(@D)
  9774. set createfile=<<$(@D)\cmi_prod_manifests.lcg.lst
  9775. prod_$(**F: =
  9776. prod_)
  9777. <<keep
  9778. ! ifndef NO_BINPLACE
  9779. set createfile=<<$(@D)\cmi_prod_manifests.lcg.binplace.txt
  9780. $(BINPLACE_FLAGS) /:DEST cmicomponents.raw
  9781. <<keep
  9782. ! endif # NO_BINPLACE
  9783. cd $(@D)
  9784. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  9785. /c \
  9786. /m:$(@D)\cmi_prod_manifests.lcg.lst \
  9787. /t:$(@D) \
  9788. $(LSBUILD_PARSER_ID_OPTION) \
  9789. $(ALT_LCI_DIR_OPTION) \
  9790. /s:$(LSBUILD_PARSER_SETTINGS) \
  9791. ! ifndef NO_BINPLACE
  9792. /b:$(@D)\cmi_prod_manifests.lcg.binplace.txt \
  9793. /r:$(LCG_BINPLACE_TARGET) \
  9794. ! endif # NO_BINPLACE
  9795. /l:$(LANGUAGE)
  9796. cd $(MAKEDIR)
  9797. ! endif # DO_LSBUILD && BUILD_CMI_LCG
  9798.  
  9799.  
  9800. ! endif # ifdef PROD_SOURCE_MANIFEST
  9801.  
  9802. ! ifdef PROD_WOW64_SOURCE_MANIFEST
  9803. $(PROD_WOW64_SOURCE_MANIFEST): $(CMI_WOW64_PROD_MANIFESTS)
  9804. set build.arch=wow64
  9805. set build.production=1
  9806. !$(MANIFEST_COMPILER_CMD) $? $(@D)\prod_wow64_$(?F).temp0 $(MANIFEST_COMPILER_ARGUMENTS) $$(build.arch) wow64 $$(build.production) 1
  9807. !$(MANIFEST_RCPARSER_CMD) $(@D)\prod_wow64_$(?F).temp0 $(@D)\prod_wow64_$(?F).temp1 -l $(@D)\rcmanparse.log -a
  9808. set build.production=
  9809. set build.arch=$(_BUILDARCH)
  9810. $(_PERL) $(RAZZLETOOLPATH)\ManifestCompilerPass2.cmd -OutputFilePrefix prod_wow64_ -InputManifestList << -OutputManifestList [email protected] -PerfTrackManifests "$(PERFTRACK_MANIFESTS)" -PerfTrackOptions " $(PERFTRACK_OPTIONS)" -ObjectPath $(@D) -MtOptions "$(MT_OPTIONS)" -ManifestsWithSpuriousCompositions "$(CMI_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS) $(CMI_WOW64_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS)"
  9811. $?
  9812. <<$(BUILD_NOKEEP)
  9813. ! ifndef NO_BINPLACE
  9814. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST \
  9815. ! ifdef MANIFEST_DIRECTORY2
  9816. $(MANIFEST_DIRECTORY2)\wow6432\production:$(MANIFEST_DIRECTORY)\wow6432\production \
  9817. ! else
  9818. $(MANIFEST_DIRECTORY)\wow6432\production \
  9819. ! endif
  9820. @[email protected] /:DEST $(CMI_RES_BINPLACE)\wow6432\production @[email protected]
  9821. ! endif
  9822.  
  9823. # Create LCG files for CMI_WOW64_PROD_MANIFESTS files if needed
  9824. ! if "$(DO_LSBUILD)" == "1" && "$(BUILD_CMI_LCG)" == "1"
  9825. set BUILDMSG=making CMI_WOW64_PROD_MANIFESTS (production) with CreateLCGFile.pl
  9826. set createfile=<<$(@D)\prod_cmi_wow64_manifests.lcg.lst
  9827. prod_wow64_$(**F: =
  9828. prod_wow64_)
  9829. <<keep
  9830. ! ifndef NO_BINPLACE
  9831. set createfile=<<$(@D)\prod_cmi_wow64_manifests.lcg.binplace.txt
  9832. $(BINPLACE_FLAGS) /:DEST cmicomponents.raw\wow6432
  9833. <<keep
  9834. ! endif # NO_BINPLACE
  9835. cd $(@D)
  9836. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  9837. /c \
  9838. /m:$(@D)\prod_cmi_wow64_manifests.lcg.lst \
  9839. /t:$(@D) \
  9840. $(LSBUILD_PARSER_ID_OPTION) \
  9841. $(ALT_LCI_DIR_OPTION) \
  9842. /s:$(LSBUILD_PARSER_SETTINGS) \
  9843. ! ifndef NO_BINPLACE
  9844. /b:$(@D)\prod_cmi_wow64_manifests.lcg.binplace.txt \
  9845. /r:$(LCG_BINPLACE_TARGET) \
  9846. ! endif # NO_BINPLACE
  9847. /l:$(LANGUAGE)
  9848. cd $(MAKEDIR)
  9849. ! endif # DO_LSBUILD && BUILD_CMI_LCG
  9850.  
  9851.  
  9852. ! endif # ifdef PROD_WOW64_SOURCE_MANIFEST
  9853.  
  9854. # Note that the internal CMI_PROD_MANIFESTS targets DO NOT
  9855. # create LCG files. That is done by the production targets.
  9856. # there should never be reason to have different resources for
  9857. # production vs. internal distributions - that is just asking to waste
  9858. # localizer's time.
  9859. ! ifdef INTERNAL_SOURCE_MANIFEST
  9860. $(INTERNAL_SOURCE_MANIFEST): $(CMI_PROD_MANIFESTS)
  9861. set build.internal=1
  9862. !$(MANIFEST_COMPILER_CMD) $? $(@D)\internal_$(?F).temp0 $(MANIFEST_COMPILER_ARGUMENTS) $$(build.arch) $(SXS_PROCESSOR_ARCHITECTURE) $$(build.internal) 1
  9863. !$(MANIFEST_RCPARSER_CMD) $(@D)\internal_$(?F).temp0 $(@D)\internal_$(?F).temp1 -l $(@D)\internal_rcmanparse.log -a
  9864. set build.internal=
  9865. !$(_DELFILE) $(@D)\internal_$(?F).temp0
  9866. $(_PERL) $(RAZZLETOOLPATH)\ManifestCompilerPass2.cmd -OutputFilePrefix internal_ -InputManifestList << -OutputManifestList [email protected] -PerfTrackManifests "$(PERFTRACK_MANIFESTS)" -PerfTrackOptions " $(PERFTRACK_OPTIONS)" -ObjectPath $(@D) -MtOptions "$(MT_OPTIONS)" -ManifestsWithSpuriousCompositions "$(CMI_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS)"
  9867. $?
  9868. <<$(BUILD_NOKEEP)
  9869. ! ifndef NO_BINPLACE
  9870. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST \
  9871. ! ifdef MANIFEST_DIRECTORY2
  9872. $(MANIFEST_DIRECTORY2)\internal:$(MANIFEST_DIRECTORY)\internal \
  9873. ! else
  9874. $(MANIFEST_DIRECTORY)\internal \
  9875. ! endif
  9876. @[email protected] /:DEST $(CMI_RES_BINPLACE)\internal @[email protected]
  9877. ! endif
  9878.  
  9879. !if defined(WINPE_COMPILE_SMI_MANIFEST) && !defined(NO_BINPLACE)
  9880. ! if "$(WINPE_COMPILE_SMI_MANIFEST)" != "1"
  9881. ! error WINPE_COMPILE_SMI_MANIFEST must be set to 1 or not defined
  9882. ! endif
  9883. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) \
  9884. ! if !defined(WINPE_COMPILE_SMI_MANIFEST_PLACEFILE)
  9885. /:DEST WinPE_SMI_Manifests \
  9886. ! else
  9887. /P $(WINPE_COMPILE_SMI_MANIFEST_PLACEFILE) \
  9888. ! endif
  9889. !endif
  9890.  
  9891. ! endif # ifdef INTERNAL_SOURCE_MANIFEST
  9892.  
  9893. ! ifdef INTERNAL_WOW64_SOURCE_MANIFEST
  9894. $(INTERNAL_WOW64_SOURCE_MANIFEST): $(CMI_WOW64_PROD_MANIFESTS)
  9895. set build.arch=wow64
  9896. set build.internal=1
  9897. !$(MANIFEST_COMPILER_CMD) $? $(@D)\internal_wow64_$(?F).temp0 $(MANIFEST_COMPILER_ARGUMENTS) $$(build.arch) wow64 $$(build.internal) 1
  9898. !$(MANIFEST_RCPARSER_CMD) $(@D)\internal_wow64_$(?F).temp0 $(@D)\internal_wow64_$(?F).temp1 -l $(@D)\rcmanparse.log -a
  9899. set build.arch=$(_BUILDARCH)
  9900. set build.internal=
  9901. $(_PERL) $(RAZZLETOOLPATH)\ManifestCompilerPass2.cmd -OutputFilePrefix internal_wow64_ -InputManifestList << -OutputManifestList [email protected] -PerfTrackManifests "$(PERFTRACK_MANIFESTS)" -PerfTrackOptions " $(PERFTRACK_OPTIONS)" -ObjectPath $(@D) -MtOptions "$(MT_OPTIONS)" -ManifestsWithSpuriousCompositions "$(CMI_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS) $(CMI_WOW64_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS)"
  9902. $?
  9903. <<$(BUILD_NOKEEP)
  9904. ! ifndef NO_BINPLACE
  9905. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST \
  9906. ! ifdef MANIFEST_DIRECTORY2
  9907. $(MANIFEST_DIRECTORY2)\wow6432\internal:$(MANIFEST_DIRECTORY)\wow6432\internal \
  9908. ! else
  9909. $(MANIFEST_DIRECTORY)\wow6432\internal \
  9910. ! endif
  9911. @[email protected] /:DEST $(CMI_RES_BINPLACE)\wow6432\internal @[email protected]
  9912. ! endif
  9913.  
  9914.  
  9915. ! endif # ifdef INTERNAL_WOW64_SOURCE_MANIFEST
  9916.  
  9917. ! ifdef EDITION_SOURCE_MANIFEST
  9918. $(EDITION_SOURCE_MANIFEST): $(CMI_EDITION_MANIFESTS)
  9919. set BUILDMSG=DiagValid is validating manifest instrumentation.
  9920. "diagvalid.exe" "$(RAZZLETOOLPATH)\diagvalid\exceptions.xml" $?
  9921. ! ifndef DISABLE_CV
  9922. set BUILDMSG=Component Validation is validating manifests.
  9923. $(_URTRUN_20) ValidateManifest $(CV_BCZOPTIONS) $(CV_OPTIONS) /useprofile=$(CV_BCZPROFILE) <<$(@D)\ManifestsToBevalidated
  9924. $?
  9925. <<$(BUILD_NOKEEP)
  9926. ! endif
  9927. ! ifdef CACHE_SOURCE_MANIFESTS
  9928. set BUILDMSG=Source manifests are being cached.
  9929. $(_URTRUN_20) CacheManifest $(MAKEDIR) $(CACHE_SOURCE_MANIFESTS) <<$(@D)\ManifestsToBeCached
  9930. $?
  9931. <<$(BUILD_NOKEEP)
  9932. ! endif
  9933. ! if !defined(DISABLE_SOURCE_MANIFEST_VALIDATION)
  9934. set BUILDMSG=Manifest schema and formatting is being checked.
  9935. checksourcemanifests -obj:$(OBJ_PATH)\$O <<$(@D)\ManifestsToBeChecked
  9936. $(**: =
  9937. )
  9938. <<$(BUILD_NOKEEP)
  9939. ! endif
  9940. #
  9941. # ! means loop
  9942. # $? is the manifests with a later timestamp than $(SOURCE_MANIFEST)
  9943. # $(SOURCE_MANIFEST) is the list of manifests to be binplaced
  9944. # The .vbs manifest compiler takes ....foo.man and outputs $O\foo.man.temp0
  9945. # The RC manifest compiler takes $O\foo.man.temp0 and outputs $O\foo.man.temp1
  9946. # The temp file $O\foo.man.temp0 is deleted
  9947. # ManifestCompilerPass2.cmd takes $O\foo.man.temp1 and outputs $O\foo.man.
  9948. #
  9949. !$(MANIFEST_COMPILER_CMD) $? $(@D)\$(?F).temp0 $(MANIFEST_COMPILER_ARGUMENTS) $$(build.arch) $(SXS_PROCESSOR_ARCHITECTURE)
  9950. !$(MANIFEST_RCPARSER_CMD) $(@D)\$(?F).temp0 $(@D)\$(?F).temp1 -l $(@D)\rcmanparse.log -a
  9951. !$(_DELFILE) $(@D)\$(?F).temp0
  9952. $(_PERL) $(RAZZLETOOLPATH)\ManifestCompilerPass2.cmd -InputManifestList << -OutputManifestList [email protected] -PerfTrackManifests "$(PERFTRACK_MANIFESTS)" -PerfTrackOptions " $(PERFTRACK_OPTIONS)" -ObjectPath $(@D) -MtOptions "$(MT_OPTIONS)" -ManifestsWithSpuriousCompositions "$(CMI_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS)"
  9953. $?
  9954. <<$(BUILD_NOKEEP)
  9955. ! ifndef NO_BINPLACE
  9956. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST Editions \
  9957.  
  9958. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST \
  9959. ! ifdef MANIFEST_DIRECTORY2
  9960. $(MANIFEST_DIRECTORY2):$(MANIFEST_DIRECTORY) \
  9961. ! else
  9962. $(MANIFEST_DIRECTORY) \
  9963. ! endif
  9964. @[email protected] /:DEST $(CMI_RES_BINPLACE) @[email protected]
  9965. ! endif
  9966.  
  9967.  
  9968. # Create LCG files for CMI_EDITION_MANIFESTS files if needed
  9969. ! if "$(DO_LSBUILD)" == "1" && "$(BUILD_CMI_LCG)" == "1"
  9970. set BUILDMSG=making CMI_EDITION_MANIFESTS with CreateLCGFile.pl
  9971. set createfile=<<$(@D)\cmi_edition_manifests.lcg.lst
  9972. $(**F: =
  9973. )
  9974. <<keep
  9975. ! ifndef NO_BINPLACE
  9976. set createfile=<<$(@D)\cmi_edition_manifests.lcg.binplace.txt
  9977. $(BINPLACE_FLAGS) /:DEST Editions.raw
  9978. <<keep
  9979. ! endif # NO_BINPLACE
  9980. cd $(@D)
  9981. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  9982. /c \
  9983. /m:$(@D)\cmi_edition_manifests.lcg.lst \
  9984. /t:$(@D) \
  9985. $(LSBUILD_PARSER_ID_OPTION) \
  9986. $(ALT_LCI_DIR_OPTION) \
  9987. /s:$(LSBUILD_PARSER_SETTINGS) \
  9988. ! ifndef NO_BINPLACE
  9989. /b:$(@D)\cmi_manifests.lcg.binplace.txt \
  9990. /r:$(LCG_BINPLACE_TARGET) \
  9991. ! endif # NO_BINPLACE
  9992. /l:$(LANGUAGE)
  9993. cd $(MAKEDIR)
  9994. ! endif # DO_LSBUILD && BUILD_CMI_LCG
  9995.  
  9996.  
  9997. ! endif # ifdef EDITION_SOURCE_MANIFEST
  9998.  
  9999.  
  10000. ! ifdef WINPE_SOURCE_MANIFEST
  10001. $(WINPE_SOURCE_MANIFEST): $(CMI_WINPE_MANIFESTS)
  10002. set build.arch=
  10003. !$(MANIFEST_COMPILER_CMD) $? $(@D)\winpe_$(?F).temp1 $(MANIFEST_COMPILER_BASE_ARGUMENTS) $(CMI_WINPE_MANIFEST_COMPILER_EXTRA_ARGUMENTS) $$(build.arch) $(SXS_PROCESSOR_ARCHITECTURE)
  10004. set build.arch=$(_BUILDARCH)
  10005. $(_PERL) $(RAZZLETOOLPATH)\ManifestCompilerPass2.cmd -OutputFilePrefix winpe_ -InputManifestList << -OutputManifestList [email protected] -PerfTrackManifests "$(PERFTRACK_MANIFESTS)" -PerfTrackOptions " $(PERFTRACK_OPTIONS)" -ObjectPath $(@D) -MtOptions "$(MT_OPTIONS)" -ManifestsWithSpuriousCompositions "$(CMI_MANIFESTS_WITH_SPURIOUS_COMPOSITIONS)"
  10006. $?
  10007. <<$(BUILD_NOKEEP)
  10008. ! ifndef NO_BINPLACE
  10009. $(BINPLACE_TOOL) $(BINPLACE_FLAGS) $(BINPLACE_LC_MISCFLAGS) /:DEST \
  10010. ! ifdef MANIFEST_DIRECTORY2
  10011. $(MANIFEST_DIRECTORY2):$(MANIFEST_DIRECTORY) \
  10012. ! else
  10013. $(MANIFEST_DIRECTORY) \
  10014. ! endif
  10015. @[email protected] /:DEST $(CMI_RES_BINPLACE) @[email protected]
  10016. ! endif
  10017.  
  10018. # Create LCG files for CMI_WINPE_MANIFESTS files if needed
  10019. ! if "$(DO_LSBUILD)" == "1" && "$(BUILD_CMI_LCG)" == "1"
  10020. set BUILDMSG=making CMI_WINPE_MANIFESTS with CreateLCGFile.pl
  10021. set createfile=<<$(@D)\cmi_winpe_manifests.lcg.lst
  10022. winpe_$(**F: =
  10023. winpe_)
  10024. <<keep
  10025. ! ifndef NO_BINPLACE
  10026. set createfile=<<$(@D)\cmi_winpe_manifests.lcg.binplace.txt
  10027. $(BINPLACE_FLAGS) /:DEST cmicomponents.raw
  10028. <<keep
  10029. ! endif # NO_BINPLACE
  10030. cd $(@D)
  10031. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  10032. /c \
  10033. /m:$(@D)\cmi_winpe_manifests.lcg.lst \
  10034. /t:$(@D) \
  10035. $(LSBUILD_PARSER_ID_OPTION) \
  10036. $(ALT_LCI_DIR_OPTION) \
  10037. /s:$(LSBUILD_PARSER_SETTINGS) \
  10038. ! ifndef NO_BINPLACE
  10039. /b:$(@D)\cmi_manifests.lcg.binplace.txt \
  10040. /r:$(LCG_BINPLACE_TARGET) \
  10041. ! endif # NO_BINPLACE
  10042. /l:$(LANGUAGE)
  10043. cd $(MAKEDIR)
  10044. ! endif # DO_LSBUILD && BUILD_CMI_LCG
  10045.  
  10046.  
  10047. ! endif
  10048.  
  10049.  
  10050. !endif # defined(SOURCE_MANIFEST) || defined(WOW64_SOURCE_MANIFEST) || defined(EVENTS_MANIFEST) || defined(SLS_LICENSING_MANIFEST) || defined(EDITION_SOURCE_MANIFEST) || defined(WINPE_SOURCE_MANIFEST)
  10051.  
  10052.  
  10053. !ifndef PASS_INDEPENDENT_TARGETS # { {
  10054.  
  10055. #
  10056. # Currently, service tables are sorted according to profile data on WIN64,
  10057. # but not X86.
  10058. #
  10059. # 32-bit binaries built for Wow64 (ntdll, etc.) must also use the sorted
  10060. # tables.
  10061. #
  10062. # Use GENSRV_PREPROCESS for "normal" service table preprocessing, and
  10063. # GENSRV_PREPROCESS_WOW64 for wow64 binary generation.
  10064. #
  10065.  
  10066. GENSRV_PREPROCESS_WOW64 = $(C_PREPROCESSOR) $** | gensrv -prof $(BASE_INC_PATH)\services.prof > $@
  10067. !if $(IA64) || $(AMD64)
  10068. GENSRV_PREPROCESS = $(GENSRV_PREPROCESS_WOW64)
  10069. !else
  10070. GENSRV_PREPROCESS = $(C_PREPROCESSOR) $** > $@
  10071. !endif
  10072.  
  10073. !if defined(NTTARGETFILES) \
  10074. || defined(NTTARGETFILE0) \
  10075. || defined(NTTARGETFILE1) \
  10076. || defined(NTTARGETFILE2) \
  10077. || defined(USE_MAKEFILE_INC) \
  10078.  
  10079. ! INCLUDE .\makefile.inc
  10080. !ENDIF
  10081.  
  10082. !if "$(XAML_COMPILATION)" == "1"
  10083. ! INCLUDE $(NTMAKEENV)\wcpcompiler.inc
  10084. !endif
  10085.  
  10086. !if defined(_PROJECT_BUILDS_MANAGED_CODE) && ("$(BUILD_PRODUCT)" == "NT") && "$(MANAGED_TARGET_TYPE)" != "module" # { {
  10087.  
  10088. !ifdef INTERNALS_VISIBLE_TO
  10089.  
  10090. # Add asmmeta flags
  10091. #
  10092. ASMMETA_PRESERVE_INTERNALS_VISIBLE_TO_ATTRIBUTE = 1
  10093.  
  10094. # Get rid of spaces.
  10095. #
  10096. INTERNALS_VISIBLE_TO=$(INTERNALS_VISIBLE_TO: =)
  10097.  
  10098. # get rid of the leading ; if there is one
  10099. #
  10100. INTERNALS_VISIBLE_TO=; $(INTERNALS_VISIBLE_TO)
  10101. INTERNALS_VISIBLE_TO=$(INTERNALS_VISIBLE_TO:; ;=)
  10102. INTERNALS_VISIBLE_TO=$(INTERNALS_VISIBLE_TO:; =)
  10103.  
  10104. # get rid of the trailing ; if there is one
  10105. #
  10106. INTERNALS_VISIBLE_TO=$(INTERNALS_VISIBLE_TO) ;
  10107. INTERNALS_VISIBLE_TO=$(INTERNALS_VISIBLE_TO:; ;=)
  10108. INTERNALS_VISIBLE_TO=$(INTERNALS_VISIBLE_TO: ;=)
  10109.  
  10110. !endif
  10111.  
  10112. !ifdef COM_VISIBLE # { {
  10113. ! if "$(COM_VISIBLE)" == "0" # { {
  10114. COM_VISIBLE=false
  10115. ! endif # } }
  10116. ! if "$(COM_VISIBLE)" == "1" # { {
  10117. COM_VISIBLE=true
  10118. ! endif # } }
  10119. !else # } {
  10120. COM_VISIBLE=false
  10121. !endif # } }
  10122.  
  10123. !if defined(_C_SHARP) # { {
  10124. #
  10125. # Disable warning CS1699 to use _keyfile.cs
  10126. #
  10127. ! ifdef COMPLUS_VERSION # {
  10128. ! if "$(COMPLUS_VERSION)" >= "v2.0" # {
  10129. USER_CS_FLAGS=$(USER_CS_FLAGS) /nowarn:1699
  10130. ! endif # }
  10131. ! endif # }
  10132.  
  10133.  
  10134. !if $(USE_OBJECT_ROOT)
  10135. _MANAGED_SOURCES=$(_MANAGED_SOURCES) $(OBJ_PATH)\$O\_generated.cs
  10136. $(OBJ_PATH)\$O\_generated.cs: \
  10137. !else
  10138. _MANAGED_SOURCES=$(_MANAGED_SOURCES) $O\_generated.cs
  10139. $O\_generated.cs: \
  10140. !endif
  10141. $(SOURCES_USED)
  10142. -$(_DEL)
  10143. set createfile=<<[email protected]
  10144. //
  10145. // <copyright file="_generated.cs" company="Microsoft">
  10146. // Copyright (c) Microsoft Corporation. All rights reserved.
  10147. // </copyright>
  10148. // <summary>Generated file with version information.</summary>
  10149. //
  10150.  
  10151. !if defined(LANGUAGE_SPECIFIC_MANAGED_RESOURCES) && "$(MUI)" == "1" && "$(URT_VER)" == "2.0"
  10152. [assembly:System.Resources.NeutralResourcesLanguage("en")]
  10153. !endif
  10154. [assembly:System.Runtime.InteropServices.ComVisible($(COM_VISIBLE))]
  10155. [assembly:System.Reflection.AssemblyVersion("$(ASSEMBLY_IDENTITY_VERSION)")]
  10156. !ifdef VER_PRODUCTNAME_STR
  10157. [assembly:System.Reflection.AssemblyProduct("$(VER_PRODUCTNAME_STR)")]
  10158. !endif
  10159. !ifdef VER_LEGALCOPYRIGHT_STR
  10160. [assembly:System.Reflection.AssemblyCopyright("$(VER_LEGALCOPYRIGHT_STR)")]
  10161. !endif
  10162. !ifdef VER_COMPANYNAME_STR
  10163. [assembly:System.Reflection.AssemblyCompany("$(VER_COMPANYNAME_STR)")]
  10164. !endif
  10165. !if defined(SEPARATE_FILE_AND_INFORMATIONAL_VERSION) && defined(VER_FILEVERSION_STR)
  10166. [assembly:System.Reflection.AssemblyFileVersion("$(VER_FILEVERSION_STR)")]
  10167. !elseif defined(VER_PRODUCTVERSION_STR)
  10168. [assembly:System.Reflection.AssemblyFileVersion("$(VER_PRODUCTVERSION_STR)")]
  10169. !endif
  10170. !if defined(SEPARATE_FILE_AND_INFORMATIONAL_VERSION)
  10171. ! ifdef VER_PRODUCTVERSION_STR
  10172. [assembly:System.Reflection.AssemblyInformationalVersion("$(VER_PRODUCTVERSION_STR)")]
  10173. ! elseif defined(VER_FILEVERSION_STR)
  10174. [assembly:System.Reflection.AssemblyInformationalVersion("$(VER_FILEVERSION_STR)")]
  10175. ! endif
  10176. !endif
  10177. !ifdef INTERNALS_VISIBLE_TO
  10178. [assembly:System.Runtime.CompilerServices.InternalsVisibleTo("$(INTERNALS_VISIBLE_TO:;="^)]
  10179. [assembly:System.Runtime.CompilerServices.InternalsVisibleTo(")")]
  10180. !endif
  10181. <<KEEP
  10182. !if defined(_ASSEMBLY_IDENTITY) \
  10183. && "$(_ASSEMBLY_IDENTITY_PUBLIC_KEY_NAME_LOWERCASE)" != "none" \
  10184. && "$(_ASSEMBLY_IDENTITY:\=)" == "$(_ASSEMBLY_IDENTITY)" \
  10185. && !defined(_MANAGED_CXX_LIBRARY) \
  10186. && "$(MANAGED_TARGET_TYPE)" != "module"
  10187. asmIdToAttribs "$(_ASSEMBLY_IDENTITY)" [email protected] csharp
  10188. !endif
  10189. $(_MOVE)
  10190.  
  10191. !elseif defined(MANAGED_CXX) # } {
  10192.  
  10193. ! ifndef _MANAGED_CXX_LIBRARY # { {
  10194.  
  10195. ! if "$(BUILD_PASS)" != "PASS0" # { {
  10196.  
  10197. !if $(USE_OBJECT_ROOT)
  10198. OBJECTS=$(OBJECTS) $(OBJ_PATH)\$O\_generated.obj
  10199. TARGETOBJFILES=$(TARGETOBJFILES) $(OBJ_PATH)\$O\_generated.obj
  10200. IMPLIB_DEPEND=$(IMPLIB_DEPEND) $(OBJ_PATH)\$O\_generated.obj
  10201. $(OBJ_PATH)\$O\_generated.cpp: \
  10202. !else
  10203. OBJECTS=$(OBJECTS) $O\_generated.obj
  10204. TARGETOBJFILES=$(TARGETOBJFILES) $O\_generated.obj
  10205. IMPLIB_DEPEND=$(IMPLIB_DEPEND) $O\_generated.obj
  10206. $O\_generated.cpp: \
  10207. !endif
  10208. $(SOURCES_USED)
  10209. -$(_DEL)
  10210. set createfile=<<[email protected]
  10211. !if "$(PRECOMPILED_INCLUDE)" != "" && "$(PRECOMPILED_CXX)" != "" && "$(NTNOPCH)" != "1"
  10212. #include "$(PRECOMPILED_INCLUDE_BASENAME)"
  10213. !endif
  10214. !if defined(LANGUAGE_SPECIFIC_MANAGED_RESOURCES) && "$(MUI)" == "1" && "$(URT_VER)" == "2.0"
  10215. [assembly:System::Resources::NeutralResourcesLanguage("en")];
  10216. !endif
  10217. [assembly:System::Runtime::InteropServices::ComVisible($(COM_VISIBLE))];
  10218. !ifdef ASSEMBLY_IDENTITY_VERSION
  10219. [assembly:System::Reflection::AssemblyVersion("$(ASSEMBLY_IDENTITY_VERSION)")];
  10220. !endif
  10221. !ifdef VER_PRODUCTNAME_STR
  10222. [assembly:System::Reflection::AssemblyProduct("$(VER_PRODUCTNAME_STR)")];
  10223. !endif
  10224. !ifdef VER_LEGALCOPYRIGHT_STR
  10225. [assembly:System::Reflection::AssemblyCopyright("$(VER_LEGALCOPYRIGHT_STR)")];
  10226. !endif
  10227. !ifdef VER_COMPANYNAME_STR
  10228. [assembly:System::Reflection::AssemblyCompany("$(VER_COMPANYNAME_STR)")];
  10229. !endif
  10230. !if defined(SEPARATE_FILE_AND_INFORMATIONAL_VERSION) && defined(VER_FILEVERSION_STR)
  10231. [assembly:System::Reflection::AssemblyFileVersion("$(VER_FILEVERSION_STR)")];
  10232. !endif
  10233. !if defined(SEPARATE_FILE_AND_INFORMATIONAL_VERSION)
  10234. ! ifdef VER_PRODUCTVERSION_STR
  10235. [assembly:System::Reflection::AssemblyInformationalVersion("$(VER_PRODUCTVERSION_STR)")];
  10236. ! elseif defined(VER_FILEVERSION_STR)
  10237. [assembly:System::Reflection::AssemblyInformationalVersion("$(VER_FILEVERSION_STR)")];
  10238. ! endif
  10239. !endif
  10240. !if defined(INTERNALS_VISIBLE_TO)
  10241. [assembly:System::Runtime::CompilerServices::InternalsVisibleTo("$(INTERNALS_VISIBLE_TO:;="^)];
  10242. [assembly:System::Runtime::CompilerServices::InternalsVisibleTo(")")];
  10243. !endif
  10244. <<KEEP
  10245. !if defined(_ASSEMBLY_IDENTITY) \
  10246. && "$(_ASSEMBLY_IDENTITY_PUBLIC_KEY_NAME_LOWERCASE)" != "none" \
  10247. && "$(_ASSEMBLY_IDENTITY:\=)" == "$(_ASSEMBLY_IDENTITY)" \
  10248. && !defined(_MANAGED_CXX_LIBRARY) \
  10249. && "$(MANAGED_TARGET_TYPE)" != "module"
  10250. asmIdToAttribs "$(_ASSEMBLY_IDENTITY)" [email protected] c
  10251. !endif
  10252. $(_MOVE)
  10253.  
  10254. ! endif # } }
  10255. ! endif # } }
  10256.  
  10257. !elseif defined(_VB) # } {
  10258.  
  10259. #
  10260. # Disable warning keyfile warning - change to same test as above for CS when compiler is updated.
  10261. #
  10262. USER_VB_NET_FLAGS=$(USER_VB_NET_FLAGS) /nowarn:41008
  10263.  
  10264. !if $(USE_OBJECT_ROOT)
  10265. _MANAGED_SOURCES=$(_MANAGED_SOURCES) $(OBJ_PATH)\$O\_generated.vb
  10266. $(OBJ_PATH)\$O\_generated.vb: \
  10267. !else
  10268. _MANAGED_SOURCES=$(_MANAGED_SOURCES) $O\_generated.vb
  10269. $O\_generated.vb: \
  10270. !endif
  10271. $(SOURCES_USED)
  10272. -$(_DEL)
  10273. set createfile=<<[email protected]
  10274. !if defined(LANGUAGE_SPECIFIC_MANAGED_RESOURCES) && "$(MUI)" == "1" && "$(URT_VER)" == "2.0"
  10275. <assembly:System.Resources.NeutralResourcesLanguage("en")>
  10276. !endif
  10277. <assembly:System.Runtime.InteropServices.ComVisible($(COM_VISIBLE))>
  10278. <assembly:System.Reflection.AssemblyVersion("$(ASSEMBLY_IDENTITY_VERSION)")>
  10279. !ifdef VER_PRODUCTNAME_STR
  10280. <assembly:System.Reflection.AssemblyProduct("$(VER_PRODUCTNAME_STR)")>
  10281. !endif
  10282. !ifdef VER_LEGALCOPYRIGHT_STR
  10283. <assembly:System.Reflection.AssemblyCopyright("$(VER_LEGALCOPYRIGHT_STR)")>
  10284. !endif
  10285. !ifdef VER_COMPANYNAME_STR
  10286. <assembly:System.Reflection.AssemblyCompany("$(VER_COMPANYNAME_STR)")>
  10287. !endif
  10288. !if defined(SEPARATE_FILE_AND_INFORMATIONAL_VERSION) && defined(VER_FILEVERSION_STR)
  10289. <assembly:System.Reflection.AssemblyFileVersion("$(VER_FILEVERSION_STR)")>
  10290. !elseif defined(VER_PRODUCTVERSION_STR)
  10291. <assembly:System.Reflection.AssemblyFileVersion("$(VER_PRODUCTVERSION_STR)")>
  10292. !endif
  10293. !if defined(SEPARATE_FILE_AND_INFORMATIONAL_VERSION)
  10294. ! ifdef VER_PRODUCTVERSION_STR
  10295. <assembly:System.Reflection.AssemblyInformationalVersion("$(VER_PRODUCTVERSION_STR)")>
  10296. ! elseif defined(VER_FILEVERSION_STR)
  10297. <assembly:System.Reflection.AssemblyInformationalVersion("$(VER_FILEVERSION_STR)")>
  10298. ! endif
  10299. !endif
  10300. !if defined(INTERNALS_VISIBLE_TO)
  10301. <assembly:System.Runtime.CompilerServices.InternalsVisibleTo("$(INTERNALS_VISIBLE_TO:;="^)>
  10302. <assembly:System.Runtime.CompilerServices.InternalsVisibleTo(")")>
  10303. !endif
  10304. <<KEEP
  10305. !if defined(_ASSEMBLY_IDENTITY) \
  10306. && "$(_ASSEMBLY_IDENTITY_PUBLIC_KEY_NAME_LOWERCASE)" != "none" \
  10307. && "$(_ASSEMBLY_IDENTITY:\=)" == "$(_ASSEMBLY_IDENTITY)" \
  10308. && !defined(_MANAGED_CXX_LIBRARY) \
  10309. && "$(MANAGED_TARGET_TYPE)" != "module"
  10310. asmIdToAttribs "$(_ASSEMBLY_IDENTITY)" [email protected] managed_vb
  10311. !endif
  10312. $(_MOVE)
  10313.  
  10314. !elseif defined(_TLBIMP) # } {
  10315.  
  10316. !else # } {
  10317.  
  10318. ! error unknown language
  10319.  
  10320. !endif # _C_SHARP, MANAGED_CXX, _VB, _TLBIMP # } }
  10321.  
  10322.  
  10323. !endif # _PROJECT_BUILDS_MANAGED_CODE } }
  10324.  
  10325.  
  10326. !IF "$(PRECOMPILED_INCLUDE)" != ""
  10327. ! ifdef PRECOMPILED_SOURCEFILE
  10328. ! ifdef PRECOMPILED_INCLUDE_BASENAME
  10329. $(PRECOMPILED_TARGET) $(HEADEROBJNAME): $(PRECOMPILED_INCLUDE) $(PRECOMPILED_SOURCEFILE)
  10330. ! else
  10331. PRECOMPILED_INCLUDE_BASENAME=$(?F)
  10332. $(PRECOMPILED_TARGET) $(HEADEROBJNAME): $(PRECOMPILED_INCLUDE)
  10333. ! endif
  10334. @$(_TYPE) <<$(TYPE_RESPONSE_FILE)
  10335. $(ECHO_PRECOMPILED_MSG1)
  10336. <<$(BUILD_NOKEEP)
  10337. @$(C_COMPILER_NAME) @<< $(PRECOMPILED_FLAG) $(PRECOMPILED_SOURCEFILE)
  10338. !if "$(PRECOMPILED_CXX)" == ""
  10339. $(EX_C_COMPILER_FLAGS_NOPCH)
  10340. !else
  10341. $(EX_CXX_COMPILER_FLAGS_NOPCH)
  10342. !endif
  10343. /Yl$(TARGETNAME) /Yc$(PRECOMPILED_INCLUDE_BASENAME) $(HEADERFILE) $(HEADEROBJ)
  10344. <<$(BUILD_NOKEEP)
  10345. ! else
  10346. ! ifndef PRECOMPILED_INCLUDE_BASENAME
  10347. PRECOMPILED_INCLUDE_BASENAME=$(?F)
  10348. ! endif
  10349. $(PRECOMPILED_TARGET) $(HEADEROBJNAME): $(PRECOMPILED_INCLUDE)
  10350. @$(_TYPE) <<$(TYPE_RESPONSE_FILE)
  10351. $(ECHO_PRECOMPILED_MSG2)
  10352.  
  10353. #include "$(PRECOMPILED_INCLUDE_BASENAME)"
  10354.  
  10355. <<$(BUILD_NOKEEP)
  10356. @$(C_COMPILER_NAME) @<< $(PRECOMPILED_FLAG)<<$(OBJ_PATH)\$O\pch_hdr.src
  10357. !if "$(PRECOMPILED_CXX)" == ""
  10358. $(EX_C_COMPILER_FLAGS_NOPCH)
  10359. !else
  10360. $(EX_CXX_COMPILER_FLAGS_NOPCH)
  10361. !endif
  10362. /Yl$(TARGETNAME) /Yc$(PRECOMPILED_INCLUDE_BASENAME) $(HEADERFILE) $(HEADEROBJ)
  10363. <<$(BUILD_NOKEEP)
  10364. #include "$(PRECOMPILED_INCLUDE_BASENAME)"
  10365. <<KEEP
  10366. ! endif
  10367.  
  10368. pch_hdr.pp:
  10369. set _CL_=/P
  10370. -$(_DELFILE) pch_hdr.i pch_hdr.pp
  10371. nmake /nologo /f $(NTMAKEENV)\makefile.def $(PRECOMPILED_TARGET) $(HEADEROBJNAME)
  10372. rename pch_hdr.i pch_hdr.pp
  10373.  
  10374. !ENDIF
  10375.  
  10376. !if !defined(NOLINK) && "$(UMAPPL)" != ""
  10377.  
  10378. #
  10379. # Standard inference rule for User Mode object files that produce User Mode
  10380. # image files
  10381. #
  10382. UMEXEFILE_LIBS = $(BO_LIB) $(UMLIBS) $(LIBC_LIB) $(CRTLIBS) $(MACHINE_TARGETLIBS) $(LINKLIBS)
  10383.  
  10384. $(UMEXEFILES): $(UMOBJFILES) $(UMEXEFILE_LIBS) $(UMRES)
  10385. $(LINKER) @<<$(LINK_RSP)
  10386. $(LINKER_FLAGS: =
  10387. )
  10388. $(LINKER_STACKSIZE)
  10389. $(TSLINKER_FLAG)
  10390. $(DYNAMICBASE_FLAG)
  10391. $(ORDER: =
  10392. )
  10393. $(LINKGPSIZE: =
  10394. )
  10395. $(HEADEROBJNAME: =
  10396. )
  10397. $(LINKER_OPTIDATA)
  10398. /subsystem:$(SUBSYSTEM)
  10399. /base:$(UMBASE)
  10400. $(UMENTRY)
  10401. $(UMRES: =
  10402. )
  10403. $(*R).obj
  10404. $(UMEXEFILE_LIBS: =
  10405. )
  10406. <<$(BUILD_NOKEEP)
  10407. ! if !defined(NO_BINPLACE) && defined(DO_LSBUILD) && defined(LOCALIZE_BASE_FILE)
  10408. set BUILDMSG=making base file $O\$(@F) with CreateLCGFile.pl
  10409. set createfile=<<[email protected] \
  10410. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  10411. <<Keep
  10412. ! endif # !NO_BINPLACE && DO_LSBUILD && LOCALIZE_BASE_FILE
  10413. $(POST_BUILD_CMD)
  10414. $(MAXDEP_CMD)
  10415. $(OBFUSCATOR_CMD)
  10416. $(MANAGED_SIGNCODE_CMD)
  10417. $(SIGNCODE_CMD)
  10418. $(MAKE_PLACEFILE_CMD)
  10419. $(_BINPLACE_TARGET_COMMAND)
  10420. $(LANGUAGE_NEUTRAL_STATUS_CMD)
  10421. $(LOCALIZE_BASE_FILE_CMD)
  10422. $(_CHECK_IMPORTS_COMMAND)
  10423. $(_CHECK_DELAYLOAD_COMMAND)
  10424. !endif
  10425.  
  10426. !if "$(BROWSERFILE)" != ""
  10427.  
  10428. ! ifndef BSCMAKE_FLAGS
  10429. BSCMAKE_FLAGS = -nologo
  10430. ! endif
  10431.  
  10432. $(BROWSERFILE) : \
  10433. ! if "$(OBJECTS)" != "" || "$(OTHER_SBR_FILES)" != ""
  10434. $(OBJ_PATH)\$O\*.sbr $(OTHER_SBR_FILES)
  10435. bscmake $(BSCMAKE_FLAGS) -o "$(BROWSERFILE)" @<<$(OBJ_PATH)\$O\bscmake.rsp
  10436. $(**: =
  10437. )
  10438. <<$(BUILD_NOKEEP)
  10439. ! endif
  10440. !endif
  10441.  
  10442. #
  10443. # These dependencies produce the target binaries from the object files.
  10444. # These will trigger the sources to object inference rules to generate the
  10445. # object files.
  10446. #
  10447.  
  10448. !IF "$(TARGET)" != ""
  10449. ! IF "$(TARGETTYPE)" == "PROGLIB"
  10450. $(TARGET:.exe=.lib) $(DYNLINK_EXP): \
  10451. ! if "$(BUILD_PASS)" != "PASS2"
  10452. $(IMPLIB_DEPEND) \
  10453. ! endif
  10454. $(DLLDEF)
  10455. $(LIB_NAME) /out:$(@R).lib @<<$(LIB_RESPONSE_FILE)
  10456. $(LIBRARIAN_FLAGS: =
  10457. )
  10458. !if !defined(MCPP_TYPE)
  10459. /def:$(DLLDEF)
  10460. !endif
  10461. $(LIBRARY_OBJS: =
  10462. )
  10463. <<$(BUILD_NOKEEP)
  10464. $(LINT_CMD2)
  10465.  
  10466. $(TARGET): $(_RES_FILE) $(OBJECTS) $(DYNLINK_EXP) $(UMRES) $(BO_LIB) $(UMLIBS) $(CRTLIBS) $(MACHINE_TARGETLIBS) $(LINKLIBS)
  10467. $(LINKER) @<<$(LINK_RSP)
  10468. $(LINKER_FLAGS: =
  10469. )
  10470. $(LINKER_STACKSIZE)
  10471. $(TSLINKER_FLAG)
  10472. $(DYNAMICBASE_FLAG)
  10473. $(ORDER: =
  10474. )
  10475. $(LINKGPSIZE: =
  10476. )
  10477. $(HEADEROBJNAME: =
  10478. )
  10479. $(LINKER_OPTIDATA)
  10480. /subsystem:$(SUBSYSTEM)
  10481. /base:$(UMBASE)
  10482. $(UMENTRY: =
  10483. )
  10484. $(**: =
  10485. )
  10486. <<$(BUILD_NOKEEP)
  10487. ! if !defined(NO_BINPLACE) && defined(DO_LSBUILD) && defined(LOCALIZE_BASE_FILE)
  10488. set BUILDMSG=making base file $O\$(@F) with CreateLCGFile.pl
  10489. set createfile=<<[email protected] \
  10490. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  10491. <<Keep
  10492. ! endif # !NO_BINPLACE && DO_LSBUILD && LOCALIZE_BASE_FILE
  10493. $(POST_BUILD_CMD)
  10494. $(MAXDEP_CMD)
  10495. $(PGULOG_CMD)
  10496. $(OBFUSCATOR_CMD)
  10497. $(MANAGED_SIGNCODE_CMD)
  10498. $(SIGNCODE_CMD)
  10499. $(MAKE_PLACEFILE_CMD)
  10500. $(_BINPLACE_TARGET_COMMAND)
  10501. $(LANGUAGE_NEUTRAL_STATUS_CMD)
  10502. $(LOCALIZE_BASE_FILE_CMD)
  10503. $(_CHECK_IMPORTS_COMMAND)
  10504. $(_CHECK_DELAYLOAD_COMMAND)
  10505.  
  10506.  
  10507. ! ELSEIF "$(TARGETTYPE)" == "PROGRAM"
  10508.  
  10509. ! if (!defined(_C_SHARP) && !defined(_VB))
  10510. $(TARGET): $(UMRES) $(_RES_FILE) $(OBJECTS) $(BO_LIB) $(CRTLIBS) $(UMLIBS) $(MACHINE_TARGETLIBS) $(LINKLIBS)
  10511. $(LINKER) @<<$(LINK_RSP)
  10512. $(LINKER_FLAGS: =
  10513. )
  10514. $(LINKER_STACKSIZE)
  10515. $(TSLINKER_FLAG)
  10516. $(DYNAMICBASE_FLAG)
  10517. /subsystem:$(SUBSYSTEM)
  10518. /base:$(UMBASE)
  10519. $(ORDER: =
  10520. )
  10521. $(LINKGPSIZE: =
  10522. )
  10523. $(UMENTRY: =
  10524. )
  10525. $(LINKER_OPTIDATA)
  10526. $(HEADEROBJNAME: =
  10527. )
  10528. $(**: =
  10529. )
  10530. <<$(BUILD_NOKEEP)
  10531. ! if !defined(NO_BINPLACE) && defined(DO_LSBUILD) && defined(LOCALIZE_BASE_FILE)
  10532. set BUILDMSG=making base file $O\$(@F) with CreateLCGFile.pl
  10533. set createfile=<<[email protected] \
  10534. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  10535. <<Keep
  10536. ! endif # !NO_BINPLACE && DO_LSBUILD && LOCALIZE_BASE_FILE
  10537. $(POST_BUILD_CMD)
  10538. $(MAXDEP_CMD)
  10539. $(PGULOG_CMD)
  10540. $(OBFUSCATOR_CMD)
  10541. $(MANAGED_SIGNCODE_CMD)
  10542. $(SIGNCODE_CMD)
  10543. $(MAKE_PLACEFILE_CMD)
  10544. $(_BINPLACE_TARGET_COMMAND)
  10545. $(LANGUAGE_NEUTRAL_STATUS_CMD)
  10546. $(LINT_CMD2)
  10547. $(LOCALIZE_BASE_FILE_CMD)
  10548. $(_CHECK_IMPORTS_COMMAND)
  10549. $(_CHECK_DELAYLOAD_COMMAND)
  10550.  
  10551.  
  10552. ! ELSE # _C_SHARP or _VB is set
  10553. #
  10554. # Tlbimp does not support response files and tends to have short command lines.
  10555. # _MANAGED_SOURCES is $(SOURCES) but with .rc, .idl removed.
  10556. #
  10557. $(TARGET) : $(_MANAGED_SOURCES) $(_RES_FILE)
  10558. !if !defined(_TLBIMP)
  10559. $(NOECHO) $(_TYPE) <<$(TYPE_RESPONSE_FILE)
  10560. $(MANAGED_CODE_BUILD_CMD)
  10561. <<$(BUILD_NOKEEP)
  10562. $(NOECHO) $(MANAGED_CODE_BUILD_TOOL) @<<$(MANAGED_CODE_BUILD_TOOL_RESPONSE_FILE)
  10563. $(MANAGED_CODE_BUILD_SWITCHES)
  10564. $(_MANAGED_SOURCES)
  10565. <<$(BUILD_NOKEEP)
  10566. !else
  10567. $(MANAGED_CODE_BUILD_TOOL) $(MANAGED_CODE_BUILD_SWITCHES) $(_MANAGED_SOURCES)
  10568. !endif
  10569. !if defined(_RES_FILE) && defined(_TLBIMP)
  10570. ildasm /nobar /text $@ /out:[email protected]
  10571. move $@ $@_no_res
  10572. ilasm /quiet /dll /res:$(_RES_FILE) /output=$@ [email protected] $(ILASM_MACHINE_SWITCH)
  10573. !endif
  10574. $(IBC_CMD)
  10575. $(MANAGED_NXCOMPAT_CMD)
  10576. $(POST_MANAGED_BUILD_CMD)
  10577. $(MANAGED_SIGNCODE_CMD)
  10578. $(SIGNCODE_CMD)
  10579. $(_BINPLACE_TARGET_COMMAND)
  10580. $(LANGUAGE_NEUTRAL_STATUS_CMD)
  10581.  
  10582.  
  10583. ! ENDIF # _C_SHARP || _VB
  10584.  
  10585. ! ELSEIF "$(TARGETTYPE)" == "DYNLINK"
  10586.  
  10587. ! ifdef NO_DLL_EXPORTS
  10588. DYNLINK_EXP=
  10589. ! elseif (!defined(_C_SHARP) && !defined(_VB) && !defined(_TLBIMP))
  10590. $(DYNLINK_LIB) $(DYNLINK_EXP) : \
  10591. ! if "$(BUILD_PASS)" != "PASS2"
  10592. $(IMPLIB_DEPEND) $(DLLLIBOBJECTS) \
  10593. ! endif
  10594. $(DLLDEF)
  10595. $(LIB_NAME) /out:$(DYNLINK_LIB) @<<$(LIB_RESPONSE_FILE)
  10596. $(LIBRARIAN_FLAGS: =
  10597. )
  10598. !if !defined(MCPP_TYPE)
  10599. /def:$(DLLDEF)
  10600. !endif
  10601. $(LIBRARY_OBJS: =
  10602. )
  10603. <<$(BUILD_NOKEEP)
  10604. ! IF "$(DLLLIBOBJECTS)" != " "
  10605. $(LIB_NAME) /out:$(DYNLINK_LIB) @<<$(LIB_RESPONSE_FILE)
  10606. $(LIBRARIAN_FLAGS: =
  10607. )
  10608. $(@R).lib
  10609. $(DLLLIBOBJECTS)
  10610. <<$(BUILD_NOKEEP)
  10611. ! ENDIF
  10612. $(LINT_CMD2)
  10613. ! endif # NO_DLL_EXPORTS
  10614.  
  10615. ! IF "$(MAKEDLL)" != ""
  10616.  
  10617. ! if (!defined(_C_SHARP) && !defined(_VB) && !defined(_TLBIMP))
  10618.  
  10619. $(TARGET): $(DYNLINK_EXP) $(_RES_FILE) $(OBJECTS) $(BO_LIB) $(LINKLIBS) $(CRTLIBS) $(MACHINE_TARGETLIBS)
  10620. $(LINKER) @<<$(LINK_RSP)
  10621. $(LINKER_FLAGS: =
  10622. )
  10623. $(DYNAMICBASE_FLAG)
  10624. $(LINKER_STACKSIZE_DLL)
  10625. /dll
  10626. $(ORDER: =
  10627. )
  10628. $(LINKER_OPTIDATA)
  10629. /base:$(DLLBASE)
  10630. /subsystem:$(SUBSYSTEM)
  10631. $(DLLENTRY: =
  10632. )
  10633. $(HEADEROBJNAME: =
  10634. )
  10635. $(**: =
  10636. )
  10637. <<$(BUILD_NOKEEP)
  10638. ! if !defined(NO_BINPLACE) && defined(DO_LSBUILD) && defined(LOCALIZE_BASE_FILE)
  10639. set BUILDMSG=making base file $O\$(@F) with CreateLCGFile.pl
  10640. set createfile=<<[email protected] \
  10641. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  10642. <<Keep
  10643. ! endif # !NO_BINPLACE && DO_LSBUILD && LOCALIZE_BASE_FILE
  10644. $(POST_BUILD_CMD)
  10645. $(MAXDEP_CMD)
  10646. $(PGULOG_CMD)
  10647. $(OBFUSCATOR_CMD)
  10648. $(MANAGED_SIGNCODE_CMD)
  10649. $(SIGN_THEME_FILE_CMD)
  10650. $(SIGNCODE_CMD)
  10651. $(MAKE_PLACEFILE_CMD)
  10652. $(_BINPLACE_TARGET_COMMAND)
  10653. $(LANGUAGE_NEUTRAL_STATUS_CMD)
  10654. $(MAPDUMP_CMD)
  10655. $(LOCALIZE_BASE_FILE_CMD)
  10656. $(_CHECK_IMPORTS_COMMAND)
  10657. $(_CHECK_DELAYLOAD_COMMAND)
  10658. !if defined(NO_PUBLIC_EXPORTS)
  10659. $(_DELFILE) $(@R).lib
  10660. !endif
  10661. $(VALIDATE_DLLDEF_CMD)
  10662. $(DETECT_UNUSED_LIBS_CMD)
  10663.  
  10664. ! ELSE # _C_SHARP || _VB || _TLBIMP is set
  10665. #
  10666. # Tlbimp does not support response files and tends to have short command lines.
  10667. # _MANAGED_SOURCES is $(SOURCES) but with .rc, .idl removed.
  10668. #
  10669. $(TARGET) : $(_MANAGED_SOURCES) $(_RES_FILE)
  10670. !if !defined(_TLBIMP)
  10671. $(NOECHO) $(_TYPE) <<$(TYPE_RESPONSE_FILE)
  10672. $(MANAGED_CODE_BUILD_CMD)
  10673. <<$(BUILD_NOKEEP)
  10674. $(NOECHO) $(MANAGED_CODE_BUILD_TOOL) @<<$(MANAGED_CODE_BUILD_TOOL_RESPONSE_FILE)
  10675. $(MANAGED_CODE_BUILD_SWITCHES)
  10676. $(_MANAGED_SOURCES)
  10677. <<$(BUILD_NOKEEP)
  10678. !else
  10679. $(MANAGED_CODE_BUILD_TOOL) $(MANAGED_CODE_BUILD_SWITCHES) $(_MANAGED_SOURCES)
  10680. !endif
  10681. !if defined(_RES_FILE) && defined(_TLBIMP)
  10682. ildasm /nobar /text $@ /out:[email protected]
  10683. move $@ $@_no_res
  10684. ilasm /quiet /dll /res:$(_RES_FILE) /output=$@ [email protected] $(ILASM_MACHINE_SWITCH)
  10685. !endif
  10686. $(IBC_CMD)
  10687. $(MANAGED_NXCOMPAT_CMD)
  10688. $(POST_MANAGED_BUILD_CMD)
  10689. $(MANAGED_SIGNCODE_CMD)
  10690. $(SIGNCODE_CMD)
  10691. $(_BINPLACE_TARGET_COMMAND)
  10692. $(LANGUAGE_NEUTRAL_STATUS_CMD)
  10693.  
  10694.  
  10695. ! ENDIF # _C_SHARP || _VB || _TLBIMP
  10696.  
  10697. ! ENDIF # "$(MAKEDLL)" != ""
  10698.  
  10699. ! ELSEIF "$(TARGETTYPE)" == "LIBRARY"
  10700.  
  10701. $(TARGET): $(OBJECTS) $(OBJLIBFILES)
  10702. -@erase $@ 2>nul
  10703. $(LIBRARIAN) @<<$(LIB_RESPONSE_FILE)
  10704. $(HEADEROBJNAME: =
  10705. )
  10706. $(OBJECTS: =
  10707. )
  10708. $(OBJLIBFILES: =
  10709. )
  10710. <<$(BUILD_NOKEEP)
  10711.  
  10712. $(LINT_CMD2)
  10713. ! ELSEIF "$(TARGETTYPE)" == "DRIVER" || \
  10714. "$(TARGETTYPE)" == "MINIPORT"
  10715.  
  10716. $(TARGET): $(_RES_FILE) $(OBJECTS) $(BO_LIB) $(MACHINE_TARGETLIBS) $(CRTLIBS)
  10717. $(LINKER) @<<$(LINK_RSP)
  10718. $(LINKER_FLAGS: =
  10719. )
  10720. $(LINKER_STACKSIZE_DLL)
  10721. $(ORDER: =
  10722. )
  10723. $(SECTION_INFO1)
  10724. $(SECTION_INFO2)
  10725. $(LINKER_OPTIDATA)
  10726. $(DRIVER_SWITCH)
  10727. /base:$(DRIVERBASE)
  10728. ! IF "$(DRIVERTYPE)" == "VXD"
  10729. /def:$(DLLDEF)
  10730. ! ELSE
  10731. $(DRIVER_ALIGN_SWITCH)
  10732. /subsystem:native,$(SUBSYSTEM_NATVER)
  10733. /entry:$(DRIVER_ENTRY)$(ENTRY_SUFFIX)
  10734. !endif
  10735. /out:$(TARGET)
  10736. $(HEADEROBJNAME: =
  10737. )
  10738. $(**: =
  10739. )
  10740. <<$(BUILD_NOKEEP)
  10741. ! if !defined(NO_BINPLACE) && defined(DO_LSBUILD) && defined(LOCALIZE_BASE_FILE)
  10742. set BUILDMSG=making base file $O\$(@F) with CreateLCGFile.pl
  10743. set createfile=<<[email protected] \
  10744. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  10745. <<Keep
  10746. ! endif # !NO_BINPLACE && DO_LSBUILD && LOCALIZE_BASE_FILE
  10747. $(POST_BUILD_CMD)
  10748. $(MAXDEP_CMD)
  10749. $(PGULOG_CMD)
  10750. $(OBFUSCATOR_CMD)
  10751. $(MANAGED_SIGNCODE_CMD)
  10752. $(SIGNCODE_CMD)
  10753. $(MAKE_PLACEFILE_CMD)
  10754. $(_BINPLACE_TARGET_COMMAND)
  10755. $(LANGUAGE_NEUTRAL_STATUS_CMD)
  10756. $(MAPDUMP_CMD)
  10757. $(LINT_CMD2)
  10758. $(LOCALIZE_BASE_FILE_CMD)
  10759. $(_CHECK_IMPORTS_COMMAND)
  10760. $(_CHECK_DELAYLOAD_COMMAND)
  10761.  
  10762.  
  10763. ! ELSEIF "$(TARGETTYPE)" == "GDI_DRIVER"
  10764.  
  10765. $(TARGET): $(_RES_FILE) $(OBJECTS) $(BO_LIB) $(MACHINE_TARGETLIBS) $(CRTLIBS) $(GDI_DRIVER_LIBS)
  10766. $(LINKER) @<<$(LINK_RSP)
  10767. $(LINKER_FLAGS: =
  10768. )
  10769. $(LINKER_STACKSIZE_DLL)
  10770. /dll
  10771. $(ORDER: =
  10772. )
  10773. $(SECTION_INFO1)
  10774. $(SECTION_INFO2)
  10775. $(LINKER_OPTIDATA)
  10776. $(DRIVER_SWITCH)
  10777. $(DRIVER_ALIGN_SWITCH)
  10778. /subsystem:native,$(SUBSYSTEM_NATVER)
  10779. /base:$(DRIVERBASE)
  10780. /entry:$(GDI_DRIVER_ENTRY)$(GDI_ENTRY_SUFFIX)
  10781. /out:$(TARGET)
  10782. $(HEADEROBJNAME: =
  10783. )
  10784. $(**: =
  10785. )
  10786. <<$(BUILD_NOKEEP)
  10787. ! if !defined(NO_BINPLACE) && defined(DO_LSBUILD) && defined(LOCALIZE_BASE_FILE)
  10788. set BUILDMSG=making base file $O\$(@F) with CreateLCGFile.pl
  10789. set createfile=<<[email protected] \
  10790. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  10791. <<Keep
  10792. ! endif # !NO_BINPLACE && DO_LSBUILD && LOCALIZE_BASE_FILE
  10793. $(POST_BUILD_CMD)
  10794. $(MAXDEP_CMD)
  10795. $(PGULOG_CMD)
  10796. $(OBFUSCATOR_CMD)
  10797. $(MANAGED_SIGNCODE_CMD)
  10798. $(SIGNCODE_CMD)
  10799. $(MAKE_PLACEFILE_CMD)
  10800. $(_BINPLACE_TARGET_COMMAND)
  10801. $(LANGUAGE_NEUTRAL_STATUS_CMD)
  10802. $(MAPDUMP_CMD)
  10803. $(LINT_CMD2)
  10804. $(LOCALIZE_BASE_FILE_CMD)
  10805. $(_CHECK_IMPORTS_COMMAND)
  10806. $(_CHECK_DELAYLOAD_COMMAND)
  10807.  
  10808.  
  10809. ! ELSEIF "$(TARGETTYPE)" == "EXPORT_DRIVER"
  10810.  
  10811. $(DYNLINK_EXP) $(DYNLINK_LIB) : \
  10812. ! if "$(BUILD_PASS)" != "PASS2"
  10813. !if $(USE_DLLDEF_OBJECTS)
  10814. $(DLLDEF_OBJECTS) \
  10815. !else
  10816. $(BO_LIB) \
  10817. $(LINKLIBS) \
  10818. !endif
  10819. $(DLLLIBOBJECTS) \
  10820. ! endif
  10821. $(DLLDEF) \
  10822. $(OBJECTS)
  10823. $(LIB_NAME) /out:$(DYNLINK_LIB) @<<$(LIB_RESPONSE_FILE)
  10824. $(LIBRARIAN_FLAGS: =
  10825. )
  10826. !if !defined(MCPP_TYPE)
  10827. /def:$(DLLDEF)
  10828. !endif
  10829. $(OBJECTS)
  10830. !if $(USE_DLLDEF_OBJECTS)
  10831. $(DLLDEF_OBJECTS)
  10832. !else
  10833. $(LINKLIBS)
  10834. !endif
  10835. <<$(BUILD_NOKEEP)
  10836. ! if "$(DLLLIBOBJECTS)" != " "
  10837. $(LIB_NAME) /out:$(DYNLINK_LIB) @<<$(LIB_RESPONSE_FILE)
  10838. $(LIBRARIAN_FLAGS: =
  10839. )
  10840. $(DYNLINK_LIB)
  10841. $(DLLLIBOBJECTS)
  10842. <<$(BUILD_NOKEEP)
  10843. ! endif
  10844. $(LINT_CMD2)
  10845.  
  10846. ! IF "$(MAKEDLL)" != ""
  10847. $(TARGET): $(DYNLINK_EXP) $(_RES_FILE) $(OBJECTS) $(BO_LIB) $(CRTLIBS) $(MACHINE_TARGETLIBS) $(LINKLIBS)
  10848. $(LINKER) @<<$(LINK_RSP)
  10849. $(LINKER_FLAGS: =
  10850. )
  10851. $(ORDER: =
  10852. )
  10853. $(LINKER_STACKSIZE_DLL)
  10854. $(LINKER_OPTIDATA)
  10855. $(DRIVER_SWITCH)
  10856. $(DRIVER_ALIGN_SWITCH)
  10857. /subsystem:native,$(SUBSYSTEM_NATVER)
  10858. /base:$(DRIVERBASE)
  10859. /entry:$(DRIVER_ENTRY)$(ENTRY_SUFFIX)
  10860. /out:$(TARGET)
  10861. $(HEADEROBJNAME: =
  10862. )
  10863. $(**: =
  10864. )
  10865. <<$(BUILD_NOKEEP)
  10866. ! if !defined(NO_BINPLACE) && defined(DO_LSBUILD) && defined(LOCALIZE_BASE_FILE)
  10867. set BUILDMSG=making base file $O\$(@F) with CreateLCGFile.pl
  10868. set createfile=<<[email protected] \
  10869. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  10870. <<Keep
  10871. ! endif # !NO_BINPLACE && DO_LSBUILD && LOCALIZE_BASE_FILE
  10872. $(POST_BUILD_CMD)
  10873. $(MAXDEP_CMD)
  10874. $(PGULOG_CMD)
  10875. $(OBFUSCATOR_CMD)
  10876. $(MANAGED_SIGNCODE_CMD)
  10877. $(SIGNCODE_CMD)
  10878. $(MAKE_PLACEFILE_CMD)
  10879. $(_BINPLACE_TARGET_COMMAND)
  10880. $(LANGUAGE_NEUTRAL_STATUS_CMD)
  10881. $(LOCALIZE_BASE_FILE_CMD)
  10882. $(_CHECK_IMPORTS_COMMAND)
  10883. $(_CHECK_DELAYLOAD_COMMAND)
  10884. ! ENDIF
  10885.  
  10886. ! ELSEIF "$(TARGETTYPE)" == "HAL"
  10887.  
  10888. ! IF "$(MAKEDLL)" == ""
  10889. $(TARGET) $(DYNLINK_EXP): \
  10890. $(DLLDEF) \
  10891. $(OBJ_PATH)\$O\*.obj \
  10892. !if $(USE_DLLDEF_OBJECTS)
  10893. $(DLLDEF_OBJECTS)
  10894. !else
  10895. $(LINKLIBS)
  10896. !endif
  10897. $(LIB_NAME) /out:$(@R).lib @<<$(LIB_RESPONSE_FILE)
  10898. $(LIBRARIAN_FLAGS: =
  10899. )
  10900. !if !defined(MCPP_TYPE)
  10901. /def:$(DLLDEF)
  10902. !endif
  10903. $(OBJ_PATH)\$O\*.obj
  10904. !if $(USE_DLLDEF_OBJECTS)
  10905. $(DLLDEF_OBJECTS)
  10906. !else
  10907. $(LINKLIBS)
  10908. !endif
  10909. <<$(BUILD_NOKEEP)
  10910.  
  10911. ! ELSE
  10912.  
  10913. $(TARGET:.dll=.lib) $(DYNLINK_EXP): $(DLLDEF) $(OBJ_PATH)\$O\*.obj \
  10914. !if $(USE_DLLDEF_OBJECTS)
  10915. $(DLLDEF_OBJECTS)
  10916. !else
  10917. $(LINKLIBS)
  10918. !endif
  10919. $(LIB_NAME) /out:$(@R).lib @<<$(LIB_RESPONSE_FILE)
  10920. $(LIBRARIAN_FLAGS: =
  10921. )
  10922. !if !defined(MCPP_TYPE)
  10923. /def:$(DLLDEF)
  10924. !endif
  10925. $(OBJ_PATH)\$O\*.obj
  10926. !if $(USE_DLLDEF_OBJECTS)
  10927. $(DLLDEF_OBJECTS)
  10928. !else
  10929. $(LINKLIBS)
  10930. !endif
  10931. <<$(BUILD_NOKEEP)
  10932.  
  10933. $(TARGET): $(DYNLINK_EXP) $(_RES_FILE) $(OBJECTS) $(CRTLIBS) $(MACHINE_TARGETLIBS) $(LINKLIBS)
  10934. $(LINKER) @<<$(LINK_RSP)
  10935. $(LINKER_FLAGS: =
  10936. )
  10937. $(LINKER_STACKSIZE_DLL)
  10938. $(LINKER_OPTIDATA)
  10939. $(DRIVER_SWITCH)
  10940. $(HAL_ALIGN_SWITCH)
  10941. /subsystem:$(SUBSYSTEM)
  10942. /base:$(HALBASE)
  10943. /dll
  10944. /noentry
  10945. /out:$(TARGET)
  10946. $(**: =
  10947. )
  10948. <<$(BUILD_NOKEEP)
  10949. ! if !defined(NO_BINPLACE) && defined(DO_LSBUILD) && defined(LOCALIZE_BASE_FILE)
  10950. set BUILDMSG=making base file $O\$(@F) with CreateLCGFile.pl
  10951. set createfile=<<[email protected] \
  10952. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  10953. <<Keep
  10954. ! endif # !NO_BINPLACE && DO_LSBUILD && LOCALIZE_BASE_FILE
  10955. $(POST_BUILD_CMD)
  10956. $(MAXDEP_CMD)
  10957. $(PGULOG_CMD)
  10958. $(OBFUSCATOR_CMD)
  10959. $(MANAGED_SIGNCODE_CMD)
  10960. $(SIGNCODE_CMD)
  10961. $(MAKE_PLACEFILE_CMD)
  10962. $(_BINPLACE_TARGET_COMMAND)
  10963. $(LANGUAGE_NEUTRAL_STATUS_CMD)
  10964. $(MAPDUMP_CMD)
  10965. $(LINT_CMD2)
  10966. $(LOCALIZE_BASE_FILE_CMD)
  10967. $(_CHECK_IMPORTS_COMMAND)
  10968. $(_CHECK_DELAYLOAD_COMMAND)
  10969. ! ENDIF
  10970.  
  10971. ! ELSEIF "$(TARGETTYPE)" == "CATALOG"
  10972.  
  10973. MAKECAT=makecat
  10974.  
  10975. # Make sure we have all of the parameters we need.
  10976. ! if !defined(CATALOG_CERT)
  10977. CATALOG_CERT=0
  10978. ! endif
  10979. ! if !defined(CATALOG_DISPLAY)
  10980. CATALOG_DISPLAY=Microsoft Security Catalog
  10981. ! endif
  10982. ! if !defined(CATALOG_URL)
  10983. CATALOG_URL=http://www.microsoft.com
  10984. ! endif
  10985. ! if !defined(CATALOG_OS_VERSION_LIST)
  10986. CATALOG_OS_VERSION_LIST=$(CATALOG_OS_VERSION)
  10987. ! endif
  10988.  
  10989. CATALOG_CDF=$(TARGET).cdf
  10990. CATALOG_CMD=$(MAKECAT) -v -o $(TARGET).hash $(CATALOG_CDF)
  10991. ! if defined(CATALOG_MINSIZE) && "$(CATALOG_MINSIZE)" != "0"
  10992. CATALOG_CMD=$(CATALOG_CMD) -s $(CATALOG_MINSIZE)
  10993. ! endif
  10994.  
  10995. CATALOG_SIGN_CMD=ntsign -cert $(CATALOG_CERT) -url "$(CATALOG_URL)" -displayname "$(CATALOG_DISPLAY)" $(TARGET)
  10996.  
  10997.  
  10998. # The actual catalog config file target.
  10999. $(TARGET): $(SOURCES)
  11000. set BUILDMSG=making $(@F)
  11001. set createfile=<<$(@R)_pre.txt
  11002. $**
  11003. <<Keep
  11004. echo $(CATALOG_OS_VERSION_LIST) > "$(@R)_version.txt"
  11005. ! ifdef CATALOG_DRM_FILE_LIST
  11006. echo $(CATALOG_DRM_FILE_LIST) > "$(@R)_drm.txt"
  11007. ! endif
  11008. @$(_PERL) $(RAZZLETOOLPATH)\cdf_create.pl \
  11009. ! ifdef CATALOG_DRM_FILE_LIST
  11010. -drm_list "$(@R)_drm.txt" \
  11011. ! endif
  11012. ! if defined(CATALOG_PE_TRUSTED) && "$(CATALOG_PE_TRUSTED)" != "0"
  11013. -petrusted \
  11014. ! endif
  11015. -catalog "$@" \
  11016. -version_list "$(@R)_version.txt" \
  11017. -cdf "$(CATALOG_CDF)" \
  11018. -file_list "$(@R)_pre.txt"
  11019. $(CATALOG_CMD)
  11020. $(CATALOG_SIGN_CMD) -mdok
  11021. $(BINPLACE_CMD)
  11022.  
  11023. ! ELSEIF "$(TARGETTYPE)" == "MSI"
  11024.  
  11025. $(TARGET): $(SOURCES)
  11026. set BUILDMSG=making $(@F)
  11027. $(_PERL) $(RAZZLETOOLPATH)\make_msi.pl @<<$(@R).msi_response
  11028. sources=$**
  11029. candle_flags=$(USER_CANDLE_FLAGS)
  11030. light_flags=$(USER_LIGHT_FLAGS)
  11031. objpath=$(OBJ_PATH)\$O
  11032. target=$(TARGET)
  11033. <<$(BUILD_NOKEEP)
  11034. $(BINPLACE_CMD)
  11035.  
  11036. ! ENDIF
  11037. !ENDIF
  11038.  
  11039. ! if defined(DO_LANGUAGE_NEUTRAL) && !defined(NOLINK) && "$(MYMUILINK)" != "" && "$(TARGET)" != ""
  11040. $(TARGET).mui: $(MYMUILINK)
  11041. set BUILDMSG=making $(@F)
  11042. @del $(TARGET).muilnk 2>nul
  11043. @del $(TARGET).notloc 2>nul
  11044. @for %%k in ($**) do if exist %%~dpnk.muires @echo %%~dpnk.muires>>$(TARGET).muilnk
  11045. @if not exist $(TARGET).muilnk @echo notloc>$(TARGET).mui.notloc
  11046. @if not exist $(TARGET).muilnk echo Build_Status LN_MUI_STS: LGNSTS_NOLOCRESOURCE $(@B)
  11047. @if exist $(TARGET).muilnk (
  11048. !if defined(_TLBIMP) || defined(_C_SHARP) || defined(_VB)
  11049. echo error : error Win32 resources in tlbimp/C#/VB are not localizable.
  11050. !else
  11051. echo Build_Status Generating : Creating MUI file: LN_MUI_STS: LGNSTS_MUIED $(@F)
  11052. $(LINKER) $(LANGUAGE_NEUTRAL_LINK_FLAG) /out:$@ @$(TARGET).muilnk
  11053. !endif
  11054. )
  11055. @del $(TARGET).muilnk 2>nul
  11056. ! ifdef SIGNCODE_CMD
  11057. @if exist $@ $(SIGNCODE_CMD)
  11058. ! endif
  11059. ! ifndef NO_BINPLACE
  11060. @if exist $@ ( $(BINPLACE_TOOL) -G5 $(LANGUAGE_NEUTRAL_RESDIR) $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS) $(TARGET).mui )
  11061. ! endif
  11062. <<$(BUILD_NOKEEP)
  11063. !ENDIF
  11064.  
  11065. !IFNDEF NOLINK
  11066.  
  11067. ! if defined(NTKERNEL)
  11068.  
  11069. $(OBJ_PATH)\$O\$(NTKERNEL).exe: $(NTRES) $(@D)\$(NTKERNEL).obj \
  11070. $(BO_LIB) $(KERNEL_LIBS) \
  11071. $(LINKLIBS)
  11072. $(LINKER) @<<$(LINK_RSP)
  11073. $(LINKER_FLAGS: =
  11074. )
  11075. $(LINKER_STACKSIZE)
  11076. $(ORDER: =
  11077. )
  11078. $(LINKGPSIZE: =
  11079. )
  11080. $(NTKERNEL_LINK_OPTIONS: =
  11081. )
  11082. $(LINKER_OPTIDATA)
  11083. $(DRIVER_SWITCH)
  11084. $(KERNEL_ALIGN_SWITCH)
  11085. /subsystem:$(SUBSYSTEM)
  11086. $(**: =
  11087. )
  11088. <<$(BUILD_NOKEEP)
  11089. ! if !defined(NO_BINPLACE) && defined(DO_LSBUILD) && defined(LOCALIZE_BASE_FILE)
  11090. set BUILDMSG=making base file $O\$(@F) with CreateLCGFile.pl
  11091. set createfile=<<[email protected] \
  11092. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  11093. <<Keep
  11094. ! endif # !NO_BINPLACE && DO_LSBUILD && LOCALIZE_BASE_FILE
  11095. $(POST_BUILD_CMD)
  11096. $(MAXDEP_CMD)
  11097. $(PGULOG_CMD)
  11098. $(OBFUSCATOR_CMD)
  11099. $(MANAGED_SIGNCODE_CMD)
  11100. $(SIGNCODE_CMD)
  11101. $(MAKE_PLACEFILE_CMD)
  11102. $(_BINPLACE_TARGET_COMMAND)
  11103. $(LANGUAGE_NEUTRAL_STATUS_CMD)
  11104. $(MAPDUMP_CMD)
  11105. $(LINT_CMD2)
  11106. $(LOCALIZE_BASE_FILE_CMD)
  11107. $(_CHECK_IMPORTS_COMMAND)
  11108. $(_CHECK_DELAYLOAD_COMMAND)
  11109. ! ENDIF
  11110. !ENDIF
  11111.  
  11112. !IF DEFINED(USE_LINT) && ("$(LINT_TYPE)" == "all")
  11113.  
  11114. $(OBJ_PATH)\$O\$(LINT_OUTPUT).$(LINT_EXT): $(TARGETOBJFILES)
  11115. $(LINT_ALL_CMD) $(SOURCES)
  11116. !ENDIF
  11117.  
  11118. $(OBJ_PATH)\$O\*.res : $(MASTER_VERSION_FILE)
  11119. $O\*.res : $(MASTER_VERSION_FILE)
  11120.  
  11121. !ifdef SXS_MANIFEST_OBJ2
  11122. $(SXS_MANIFEST_OBJ2) : $(SXS_MANIFEST_OBJ1)
  11123. $(_COPYFILE) $(SXS_MANIFEST_OBJ1) $(SXS_MANIFEST_OBJ2)
  11124. !endif
  11125.  
  11126. !ifdef SXS_PDB_NAMER
  11127. $(SXS_PDB_NAMER) : $(SXS_MANIFEST_OBJ1)
  11128. $(MANIFEST_PREPROCESSOR_NAME) $(MANIFEST_PREPROCESSOR_FLAGS) -DSXS_WANT_ASSEMBLY_VERSION \
  11129. $(SXS_MANIFEST_DEFINES) -DSXS_PRE=/pdb:$(OBJ_PATH)\$O\$(SXS_PDB_WOW6432_W_PREFIX)$(SXS_ASSEMBLY_NAME:.=) \
  11130. -DSXS_POST=$(TARGETNAME:.=).pdb $(MANIFEST_VERSION_HEADER) | $(MANIFEST_TRIMMER) > $@
  11131. !endif
  11132.  
  11133. #
  11134. # RC Config
  11135. #
  11136. .SUFFIXES: .muimanifest .rcconfig .rcc .drcc
  11137. #
  11138. # .muimanifest -> .rcc
  11139.  
  11140. !ifdef DO_LANGUAGE_NEUTRAL
  11141. {..\..}.muimanifest{$O}.rcc:
  11142. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11143.  
  11144. {..\..}.muimanifest{$(OBJ_PATH)\$O}.rcc:
  11145. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11146.  
  11147. {..}.muimanifest{$O}.rcc:
  11148. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11149.  
  11150. {..}.muimanifest{$(OBJ_PATH)\$O}.rcc:
  11151. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11152.  
  11153. {}.muimanifest{$O}.rcc:
  11154. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11155.  
  11156. {}.muimanifest{$(OBJ_PATH)\$O}.rcc:
  11157. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11158.  
  11159. !endif #DO_LANGUAGE_NEUTRAL
  11160.  
  11161. # .rcconfig -> .rcc
  11162. !ifdef DO_LANGUAGE_NEUTRAL
  11163. {$(RC_CONFIG_ROOT)}.rcconfig{$O}.rcc:
  11164. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11165.  
  11166. {$(RC_CONFIG_ROOT)}.rcconfig{$(OBJ_PATH)\$O}.rcc:
  11167. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11168.  
  11169. {..\..}.rcconfig{$O}.rcc:
  11170. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11171.  
  11172. {..\..}.rcconfig{$(OBJ_PATH)\$O}.rcc:
  11173. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11174.  
  11175. {..}.rcconfig{$O}.rcc:
  11176. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11177.  
  11178. {..}.rcconfig{$(OBJ_PATH)\$O}.rcc:
  11179. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11180.  
  11181. {}.rcconfig{$O}.rcc:
  11182. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11183.  
  11184. {}.rcconfig{$(OBJ_PATH)\$O}.rcc:
  11185. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11186.  
  11187. !endif #DO_LANGUAGE_NEUTRAL
  11188.  
  11189.  
  11190. #
  11191. # delta RC config related
  11192. #
  11193. ! ifdef DELTA_RC_CONFIG
  11194.  
  11195. #{$(RC_CONFIG_ROOT)}.muimanifest{$O}.drcc:
  11196. # $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11197. #
  11198. #{$(RC_CONFIG_ROOT)}.muimanifest{$(OBJ_PATH)\$O}.drcc:
  11199. # $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11200.  
  11201. !ifdef DO_LANGUAGE_NEUTRAL
  11202. {..\..}.muimanifest{$O}.drcc:
  11203. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11204.  
  11205. {..\..}.muimanifest{$(OBJ_PATH)\$O}.drcc:
  11206. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11207.  
  11208. {..}.muimanifest{$O}.drcc:
  11209. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11210.  
  11211. {..}.muimanifest{$(OBJ_PATH)\$O}.drcc:
  11212. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11213.  
  11214. {}.muimanifest{$O}.drcc:
  11215. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11216.  
  11217. {}.muimanifest{$(OBJ_PATH)\$O}.drcc:
  11218. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11219.  
  11220. !endif #DO_LANGUAGE_NEUTRAL
  11221.  
  11222.  
  11223. #{$(RC_CONFIG_ROOT)}.rcconfig{$O}.drcc:
  11224. # $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11225. #
  11226. #{$(RC_CONFIG_ROOT)}.rcconfig{$(OBJ_PATH)\$O}.drcc:
  11227. # $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11228.  
  11229. !ifdef DO_LANGUAGE_NEUTRAL
  11230. {..\..}.rcconfig{$O}.drcc:
  11231. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11232.  
  11233. {..\..}.rcconfig{$(OBJ_PATH)\$O}.drcc:
  11234. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11235.  
  11236. {..}.rcconfig{$O}.drcc:
  11237. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11238.  
  11239. {..}.rcconfig{$(OBJ_PATH)\$O}.drcc:
  11240. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11241.  
  11242. {}.rcconfig{$O}.drcc:
  11243. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11244.  
  11245. {}.rcconfig{$(OBJ_PATH)\$O}.drcc:
  11246. $(RC_CONFIG_PREPROCESSOR_NAME) -o $@ -i $< $(RC_CONFIG_DEFINES)
  11247.  
  11248. !endif #DO_LANGUAGE_NEUTRAL
  11249.  
  11250. !endif
  11251. #
  11252. # [GorN] 3/30/2000
  11253. #
  11254. # WPP. extra rules. Can't have them before the rule to build "all"
  11255. #
  11256.  
  11257. !if defined(RUN_WPP) && exist(obj\_tracewpp.mac)
  11258. WPP_DEFINE_RULES=1
  11259. ! include obj\_tracewpp.mac
  11260. !endif
  11261.  
  11262.  
  11263. !if defined(DO_LSBUILD) && !defined(NOLINK) && "$(LCG_DEPEND)" != ""
  11264. $(LCG_TARGET): $(LCG_DEPEND)
  11265. set BUILDMSG=making $O\$(@F) with CreateLCGFile.pl
  11266. ! ifndef NO_BINPLACE
  11267. set createfile=<<[email protected]
  11268. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  11269. <<Keep
  11270. ! endif # NO_BINPLACE
  11271. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  11272. /g:$(LCG_TARGET) \
  11273. /f:$(LCG_SOURCE) \
  11274. /t:$(OBJ_PATH)\$O \
  11275. $(LSBUILD_PARSER_ID_OPTION) \
  11276. $(ALT_LCI_DIR_OPTION) \
  11277. /l:$(LANGUAGE) \
  11278. /s:$(LSBUILD_PARSER_SETTINGS) \
  11279. ! ifndef NO_BINPLACE
  11280. /r:$(LCG_BINPLACE_TARGET) \
  11281. ! endif # NO_BINPLACE
  11282. $(LSBUILD_LCE_OPTION)
  11283. !endif # DO_LSBUILD
  11284.  
  11285.  
  11286. #
  11287. # Make the individual pieces and the keyform of the assembly identity available.
  11288. #
  11289. $(OBJ_PATH)\$O\_asmid.inc: $(SOURCES_USED)
  11290. set BUILDMSG=making $(@F)
  11291. !if "$(_ASSEMBLY_IDENTITY:\=)" == "$(_ASSEMBLY_IDENTITY)"
  11292. -$(_DEL)
  11293. idtool -id $(_ASSEMBLY_IDENTITY) -GenerateMakefileInc > [email protected] || @echo error : error idtool error
  11294. !if !defined(_MANAGED_CXX_LIBRARY) && "$(MANAGED_TARGET_TYPE)" != "module"
  11295. #
  11296. # temporarily do tlbimp stuff here
  11297. #
  11298. asmIdToAttribs "$(_ASSEMBLY_IDENTITY)" [email protected] tlbimp
  11299. !endif
  11300. echo _ASSEMBLY_IDENTITY=$(_ASSEMBLY_IDENTITY) >> [email protected]
  11301. $(_MOVE)
  11302. !else
  11303. echo. > $@
  11304. !endif
  11305.  
  11306. $(OBJ_PATH)\$O\_asmid.xml: $(SOURCES_USED)
  11307. set BUILDMSG=making $(@F)
  11308. !if "$(_ASSEMBLY_IDENTITY:\=)" == "$(_ASSEMBLY_IDENTITY)"
  11309. -$(_DEL)
  11310. idtool -id $(_ASSEMBLY_IDENTITY) -EmptyComponentManifest -out [email protected] || @echo error : error idtool error
  11311. $(_MOVE)
  11312. !endif
  11313.  
  11314. #
  11315. # disassemble code .dll to metadata source with versions with asmmeta.exe
  11316. # remove versions with asmmeta.cmd /removeversions
  11317. # compare/copy to source directory with asmmeta.cmd /feedback
  11318. #
  11319.  
  11320. !if defined(_O_ASMMETA) && defined(_O_ASMMETA_OUTPUT) && defined(SOURCE_ASMMETA) && defined(ASMMETA_INPUT)
  11321.  
  11322. $(_O_ASMMETA): $(_O_ASMMETA_OUTPUT)
  11323. set BUILDMSG=making $(@F)
  11324. -$(_DEL)
  11325. if exist $** asmmeta.cmd /remove_versions:$** /out:[email protected] /OBJ_PATH:$(OBJ_PATH) /O:$O
  11326. if exist $** asmmeta.cmd /FeedbackAsmmetaBuiltFromDll:[email protected] /out:$(SOURCE_ASMMETA) /OBJ_PATH:$(OBJ_PATH) /O:$O
  11327. @if not exist $** @echo error : error skipping asmmeta.cmd /remove... and /feedback... due to earlier errors
  11328. $(_MOVE)
  11329.  
  11330. $(_O_ASMMETA_OUTPUT): $(ASMMETA_INPUT)
  11331. set BUILDMSG=making $(@F)
  11332. -$(_DEL)
  11333. if exist $** \
  11334. $(_URTRUN_20) \
  11335. asmmeta.exe \
  11336. $(ASMMETA_EXE_FLAGS) \
  11337. /config=$(RAZZLETOOLPATH)\managed\v2.0\asmmeta.config \
  11338. !if "$(ASMMETA_PRESERVE_INTERNALS_VISIBLE_TO_ATTRIBUTE)" == "1"
  11339. /config=$(RAZZLETOOLPATH)\managed\v2.0\asmmeta.PreserveInternalsVisibleToAttribute.config \
  11340. !endif
  11341. !if "$(ASMMETA_PRESERVE_EXTENSION_ATTRIBUTE)" == "1"
  11342. /config=$(RAZZLETOOLPATH)\managed\v2.0\asmmeta.PreserveExtensionAttribute.config \
  11343. !endif
  11344. /spaces=2 \
  11345. !ifndef ASMMETA_NO_1_SWITCH
  11346. /1 \
  11347. !endif
  11348. $** \
  11349. || @echo error : error asmmeta.exe error
  11350. @if not exist $** @echo error : error skipping asmmeta.exe due to earlier errors
  11351. $(_MOVE)
  11352.  
  11353. !endif
  11354.  
  11355. #
  11356. # Add versions to public metadata managed il-assembly and then assemble.
  11357. #
  11358.  
  11359. !if defined(_O_BINARY_METADATA) && defined(SOURCE_ASMMETA)
  11360.  
  11361. #
  11362. # Move the code .pdb around because ilasm.exe deletes it when building
  11363. # the metadata .dll.
  11364. #
  11365. $(_O_BINARY_METADATA): $(OBJ_PATH)\$O\$(TARGETNAME).asmmeta_ver_pass0
  11366. set BUILDMSG=making $(@F)
  11367. # TBD -- see about simplifying this
  11368. -$(_DEL)
  11369. @if exist $(OBJ_PATH)\$O\$(TARGETNAME).pdb move $(OBJ_PATH)\$O\$(TARGETNAME).pdb $(OBJ_PATH)\$O\c00057ce4b4d42a68370d9ccc49ce200.pdb
  11370. if exist $** ilasm /nologo /quiet /dll /out:[email protected] $** || @echo error : error ilasm error
  11371. @if exist $(OBJ_PATH)\$O\c00057ce4b4d42a68370d9ccc49ce200.pdb move $(OBJ_PATH)\$O\c00057ce4b4d42a68370d9ccc49ce200.pdb $(OBJ_PATH)\$O\$(TARGETNAME).pdb
  11372. $(_MOVE)
  11373.  
  11374. $(OBJ_PATH)\$O\$(TARGETNAME).asmmeta_ver_pass0: $(SOURCE_ASMMETA)
  11375. set BUILDMSG=making $(@F)
  11376. -$(_DEL)
  11377. if exist $** asmmeta.cmd /insert_versions:$** /out:[email protected] /OBJ_PATH:$(OBJ_PATH) /O:$O
  11378. $(_MOVE)
  11379. !endif
  11380.  
  11381. #
  11382. # TBD: We should just wrap al in Perl or JScript instead of writing out _keyfile.al.
  11383. # That will also get us better error reporting.
  11384. #
  11385.  
  11386. $(OBJ_PATH)\$O\_keyfile.al: $(SOURCES_USED)
  11387. #
  11388. # This is based on the other _keyfile.* code.
  11389. # It is a little different because it outputs a response file.
  11390. # I don't remember why the slash removal check.
  11391. #
  11392. !if defined(_ASSEMBLY_IDENTITY) \
  11393. && "$(_ASSEMBLY_IDENTITY_PUBLIC_KEY_NAME_LOWERCASE)" != "none" \
  11394. && "$(_ASSEMBLY_IDENTITY:\=)" == "$(_ASSEMBLY_IDENTITY)" # { {
  11395. -$(_DEL)
  11396. asmIdToAttribs "$(_ASSEMBLY_IDENTITY)" [email protected] al
  11397. $(_MOVE)
  11398. !else
  11399. echo. > $@
  11400. !endif # } }
  11401.  
  11402. !if defined(LANGUAGE_SPECIFIC_MANAGED_RESOURCES) # { {
  11403.  
  11404. _AL_COMMAND_LINE1=\
  11405. /objpath:$(OBJ_PATH) \
  11406. /o:$O \
  11407. /out:$@ \
  11408. /culture:en \
  11409. @$(@D)\_keyfile.al \
  11410. /version:"$(ASSEMBLY_IDENTITY_VERSION)" \
  11411. !if defined(SEPARATE_FILE_AND_INFORMATIONAL_VERSION) && defined(VER_FILEVERSION_STR)
  11412. /fileversion:"$(VER_FILEVERSION_STR)" \
  11413. !elseif defined(VER_PRODUCTVERSION_STR)
  11414. /fileversion:"$(VER_PRODUCTVERSION_STR)" \
  11415. !endif
  11416. $(_LANGUAGE_SPECIFIC_MANAGED_RESOURCES_AL_FLAGS)
  11417.  
  11418. #
  11419. # This has spaces that should not be changed to newlines.
  11420. #
  11421. _AL_COMMAND_LINE2=\
  11422. !ifdef VER_PRODUCTNAME_STR
  11423. /Product:"$(VER_PRODUCTNAME_STR)" \
  11424. !endif
  11425. !ifdef VER_LEGALCOPYRIGHT_STR
  11426. /Copyright:"$(VER_LEGALCOPYRIGHT_STR)" \
  11427. !endif
  11428. !ifdef VER_COMPANYNAME_STR
  11429. /Company:"$(VER_COMPANYNAME_STR)" \
  11430. !endif
  11431.  
  11432. _AL_COMMAND_LINE1=$(_AL_COMMAND_LINE1: = )
  11433. _AL_COMMAND_LINE1=$(_AL_COMMAND_LINE1: = )
  11434. _AL_COMMAND_LINE1=$(_AL_COMMAND_LINE1: = )
  11435. _AL_COMMAND_LINE1_NEWLINES=$(_AL_COMMAND_LINE1: = ^
  11436. )
  11437.  
  11438. _AL_COMMAND_LINE=$(_AL_COMMAND_LINE1) $(_AL_COMMAND_LINE2)
  11439.  
  11440. $(OBJ_PATH)\$O\$(TARGETNAME).resources.dll: \
  11441. $(OBJ_PATH)\$O\_keyfile.al \
  11442. $(_MANAGED_RESOURCES_SATELLITE_ASSEMBLY_DEPENDENCIES)
  11443. $(_PERL) $(RAZZLETOOLPATH)\CreateManagedResourceSatelliteAssembly.pl @<<$(PERL_RESPONSE_FILE)
  11444. $(_AL_COMMAND_LINE)
  11445. <<$(BUILD_NOKEEP)
  11446.  
  11447. $(MANAGED_SIGNCODE_CMD)
  11448. $(SIGNCODE_CMD)
  11449.  
  11450. $(BINPLACE_TOOL) \
  11451. $(BINPLACE_FLAGS) \
  11452. !if "$(TARGET_DESTINATION)" != "retail"
  11453. /:DEST loc\src\bin\managed\$(TARGET_DESTINATION) \
  11454. !else
  11455. /:DEST loc\src\bin\managed \
  11456. !endif
  11457. $@
  11458.  
  11459. !if "$(DO_LSBUILD)" == "1" && "$(MUI)" == "1" && "$(URT_VER)" == "2.0"
  11460. set BUILDMSG=making managed code resources with CreateLCGFile.pl
  11461. set createfile=<<$(OBJ_PATH)\$(O)\managed_resources.lcg.binplace.txt
  11462. $(BINPLACE_FLAGS) $(BINPLACE_TARGET_FLAGS)
  11463. <<Keep
  11464.  
  11465. $(_PERL) $(RAZZLETOOLPATH)\CreateLCGFile.pl \
  11466. /f:$@ \
  11467. /t:$(OBJ_PATH)\$O \
  11468. $(LSBUILD_PARSER_ID_OPTION_MANAGED) \
  11469. $(ALT_LCI_DIR_OPTION) \
  11470. /l:$(LANGUAGE) \
  11471. /s:$(LSBUILD_PARSER_SETTINGS) \
  11472. ! ifndef NO_BINPLACE
  11473. /b:$(OBJ_PATH)\$(O)\managed_resources.lcg.binplace.txt \
  11474. /r:$(LCG_BINPLACE_TARGET_MANAGED) \
  11475. /TargetName:$(TARGETNAME) \
  11476. /TargetExt:$(LINK_TARGETEXT) \
  11477. ! endif
  11478. $(LSBUILD_LCE_OPTION)
  11479. !endif # DO_LSBUILD
  11480.  
  11481. !endif # } }
  11482.  
  11483. !endif # } }
  11484.  
  11485.  
  11486. PassIndependentTargets_Manifests: \
  11487. $(SOURCE_MANIFEST) \
  11488. $(WOW64_SOURCE_MANIFEST) \
  11489. $(MULTI_SOURCE_MANIFEST) \
  11490. $(MULTI_WOW64_SOURCE_MANIFEST) \
  11491. $(PROD_SOURCE_MANIFEST) \
  11492. $(PROD_WOW64_SOURCE_MANIFEST) \
  11493. $(INTERNAL_SOURCE_MANIFEST) \
  11494. $(INTERNAL_WOW64_SOURCE_MANIFEST) \
  11495. $(EDITION_SOURCE_MANIFEST) \
  11496. $(WINPE_SOURCE_MANIFEST) \
  11497.  
  11498. #
  11499. # TBD: We should just wrap al in Perl or JScript instead of writing out _keyfile.al.
  11500. # That will also get us better error reporting.
  11501. #
  11502.  
  11503.  
  11504. PassIndependentTargets_Infs: \
  11505. $(PRINTER_INFS_LOG) \
  11506. $(MANIFESTED_PRINTER_INFS_LOG) \
  11507. $(DRIVER_INFS_LOG) \
  11508. $(MANIFESTED_INFS_LOG) \
  11509. $(NON_PNP_INFS_LOG) \
  11510. $(NON_PNP_SIGN_INFS_LOG) \
  11511. $(LOC_PRINTER_INFS_LOG) \
  11512. $(LOC_MANIFESTED_PRINTER_INFS_LOG) \
  11513. $(LOC_DRIVER_INFS_LOG) \
  11514. $(LOC_MANIFESTED_INFS_LOG) \
  11515. $(LOC_NON_PNP_INFS_LOG) \
  11516. $(LOC_NON_PNP_SIGN_INFS_LOG) \
  11517. $(PRELOC_PRINTER_INFS_LOG) \
  11518.  
  11519. PassIndependentTargets: \
  11520. PassIndependentTargets_Manifests \
  11521. !if !defined(MANIFESTONLY)
  11522. PassIndependentTargets_Infs \
  11523. PassIndependentTargets_Binplace \
  11524. !endif
  11525.  
  11526. !if defined(EVENTS_MANIFEST) # { {
  11527.  
  11528. !ifndef EVENTS_GENERATED_EVENT_HEADER_FILE_BASENAME # { {
  11529.  
  11530. EVENTS_GENERATED_EVENT_HEADER_FILE_BASENAME=$(?B)EventMacros
  11531.  
  11532. !endif # } }
  11533.  
  11534.  
  11535. !ifdef EVENTS_GENERATE_EVENTS_FOR_DOWNLEVEL # { {
  11536.  
  11537. MC_GENERATE_EVENTS_FOR_DOWNLEVEL = -mof
  11538.  
  11539. !else # } {
  11540.  
  11541. MC_GENERATE_EVENTS_FOR_DOWNLEVEL=
  11542.  
  11543. !endif # } }
  11544.  
  11545.  
  11546. !ifdef EVENTS_GENERATE_EVENTS_FOR_USERMODE # { {
  11547.  
  11548. MC_GENERATE_EVENTS_FOR_USERMODE = -um
  11549.  
  11550. !else # } {
  11551.  
  11552. MC_GENERATE_EVENTS_FOR_USERMODE=
  11553.  
  11554. !endif # } }
  11555.  
  11556.  
  11557. !ifdef EVENTS_GENERATE_EVENTS_FOR_KERNELMODE # { {
  11558.  
  11559. MC_GENERATE_EVENTS_FOR_KERNELMODE = -km
  11560.  
  11561. !else # } {
  11562.  
  11563. MC_GENERATE_EVENTS_FOR_KERNELMODE=
  11564.  
  11565. !endif # } }
  11566.  
  11567.  
  11568. !ifdef EVENTS_GENERATE_EVENTS_FOR_CS # { {
  11569.  
  11570. MC_GENERATE_EVENTS_FOR_CS = -cs $(EVENTS_GENERATE_EVENTS_FOR_CS)
  11571.  
  11572. !else # } {
  11573.  
  11574. MC_GENERATE_EVENTS_FOR_CS=
  11575.  
  11576. !endif # } }
  11577.  
  11578.  
  11579. !ifdef EVENTS_GENERATED_EVENT_MACRO_PREFIX # { {
  11580.  
  11581. EVENTS_GENERATED_EVENT_MACRO_PREFIX_OPTION = -p $(EVENTS_GENERATED_EVENT_MACRO_PREFIX)
  11582.  
  11583. !else # } {
  11584. EVENTS_GENERATED_EVENT_MACRO_PREFIX_OPTION=
  11585.  
  11586. !endif # } }
  11587.  
  11588. !ifdef EVENTS_GENERATE_EVENTS_REMOVE_PREFIX # { {
  11589.  
  11590. EVENTS_GENERATE_EVENTS_REMOVE_PREFIX_OPTION = -P $(EVENTS_GENERATE_EVENTS_REMOVE_PREFIX)
  11591.  
  11592. !else # } {
  11593.  
  11594. EVENTS_GENERATE_EVENTS_REMOVE_PREFIX_OPTION=
  11595.  
  11596. !endif # } }
  11597.  
  11598. EVENTS_VALIDATE_OPTION = -t $(RAZZLETOOLPATH)\providers\Vista
  11599. MC_GENERATE_EVENT_OPTIONS = $(MC_GENERATE_EVENTS_FOR_USERMODE) \
  11600. $(MC_GENERATE_EVENTS_FOR_KERNELMODE) \
  11601. $(MC_GENERATE_EVENTS_FOR_CS) \
  11602. $(MC_GENERATE_EVENTS_FOR_DOWNLEVEL) \
  11603. $(EVENTS_GENERATED_EVENT_MACRO_PREFIX_OPTION) \
  11604. $(EVENTS_GENERATE_EVENTS_REMOVE_PREFIX_OPTION) \
  11605. $(EVENTS_VALIDATE_OPTION)
  11606.  
  11607.  
  11608.  
  11609. !if !defined(EVENTS_MANIFEST_OUTPUT_FILE_BASENAME) # { {
  11610.  
  11611. EVENTS_MANIFEST_OUTPUT_FILE_BASENAME=$(?B)Events
  11612.  
  11613. #
  11614. # For a single file in the current directory, state a target
  11615. # with a dependency that many directories depend on.
  11616. # This does not work for multiple event manifests or event manifests outside
  11617. # the current directory.
  11618. #
  11619.  
  11620. !if "$(EVENTS_MANIFEST:\=)" == "$(EVENTS_MANIFEST)" # { {
  11621.  
  11622. _OLD_EVENTS_MANIFEST_OUTPUT_FILE_BASENAME=$(EVENTS_MANIFEST:.manifest=)
  11623. !if "$(_OLD_EVENTS_MANIFEST_OUTPUT_FILE_BASENAME)" == "$(EVENTS_MANIFEST)" # { {
  11624. _OLD_EVENTS_MANIFEST_OUTPUT_FILE_BASENAME=$(EVENTS_MANIFEST:.man=)
  11625. !endif # } }
  11626. _OLD_EVENTS_MANIFEST_OUTPUT_FILE_BASENAME=$(_OLD_EVENTS_MANIFEST_OUTPUT_FILE_BASENAME)Events
  11627.  
  11628. $(OBJ_PATH)\$O\$(_OLD_EVENTS_MANIFEST_OUTPUT_FILE_BASENAME).h : $(OBJ_PATH)\$O\_event_manifests
  11629.  
  11630. !endif # } }
  11631.  
  11632. !else # } {
  11633.  
  11634. #
  11635. # See if we can remove this.
  11636. #
  11637. $(OBJ_PATH)\$O\$(EVENTS_MANIFEST_OUTPUT_FILE_BASENAME).h : $(OBJ_PATH)\$O\_event_manifests
  11638.  
  11639. !endif # } }
  11640.  
  11641.  
  11642. $(OBJ_PATH)\$O\_event_manifests : $(EVENTS_MANIFEST)
  11643. set BUILDMSG=processing EVENTS_MANIFEST=$(EVENTS_MANIFEST: = )
  11644. ! if defined(SOURCE_MANIFEST) || defined(WOW64_SOURCE_MANIFEST) || defined(EDITION_SOURCE_MANIFEST) || defined(WINPE_SOURCE_MANIFEST)
  11645. nmake /f $(NTMAKEENV)\makefile.def $(SOURCE_MANIFEST) $(WOW64_SOURCE_MANIFEST) $(EDITION_SOURCE_MANIFEST) $(WINPE_SOURCE_MANIFEST)
  11646. ! endif
  11647. ! if !defined(DISABLE_SOURCE_MANIFEST_VALIDATION)
  11648. set BUILDMSG=Manifest formatting for event manifests is being checked.
  11649. set DO_NOT_CHECK_MANIFEST_SCHEMA=1
  11650. set DO_NOT_CHECK_MANIFEST_SCHEMATRON=1
  11651. checksourcemanifests -obj:$(OBJ_PATH)\$O <<$(OBJ_PATH)\$O\ManifestsToBeChecked
  11652. $(**: =
  11653. )
  11654. <<$(BUILD_NOKEEP)
  11655. ! endif
  11656.  
  11657. !$(MANIFEST_COMPILER_CMD) $? $(OBJ_PATH)\$(O)\$(?F) $(MANIFEST_COMPILER_ARGUMENTS) $$(build.arch) $(SXS_PROCESSOR_ARCHITECTURE)
  11658. !$(MC) /h $(PASS0_HEADERDIR) /W $(MC_WINMETAPATH) /w $(MC_EVENTMANPATH) /r $(MC_SOURCEDIR) /z $(EVENTS_MANIFEST_OUTPUT_FILE_BASENAME) $(MC_GENERATE_EVENT_OPTIONS) $(MC_FLAGS) $(OBJ_PATH)\$(O)\$(?F) $(EVENTS_MANIFEST_MC_INPUT_FILE)
  11659. set _createfile=<<$@
  11660. <<Keep
  11661.  
  11662. !endif # } }
  11663.  
  11664.  
  11665. # must be left in nmake for case sensitivity
  11666. !if defined(USE_sTATIC_MFC)
  11667. !error $(MAKEDIR) : USE_sTATIC_MFC does nothing. Remove it.
  11668. !endif
  11669.  
  11670. !if defined(LINKER_FLAFS)
  11671. #!error $(MAKEDIR): LINKER_FLAFS does not do anything. Remove it.
  11672. !message $(MAKEDIR): LINKER_FLAFS does not do anything. Remove it.
  11673. !endif
  11674.  
  11675. #
  11676. # Convert .dui into .duip files
  11677. #
  11678.  
  11679. !if "$(BUILD_PASS)" == "PASS2" || "$(BUILD_PASS)" == "PASS1"
  11680. ! if defined(DUI_PATH)
  11681. !include $(NTMAKEENV)\makefile.dui
  11682. ! endif
  11683. !endif
  11684.  
  11685. !if "$(BUILD_PASS)" == "PASS0" && defined(COUNTERS_MANIFEST)
  11686. ! include $(NTMAKEENV)\makefile.ctrpp
  11687. !endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement