Windows2003-3790/tools/postbuildscripts
2020-09-30 16:53:55 +02:00
..
sfp First commit 2020-09-30 16:53:55 +02:00
svcpack First commit 2020-09-30 16:53:55 +02:00
a2u.pm First commit 2020-09-30 16:53:55 +02:00
a2u.txt First commit 2020-09-30 16:53:55 +02:00
a2uex.txt First commit 2020-09-30 16:53:55 +02:00
add2grp.wsf First commit 2020-09-30 16:53:55 +02:00
addlink.wsf First commit 2020-09-30 16:53:55 +02:00
admigration.cmd First commit 2020-09-30 16:53:55 +02:00
adminpak.cmd First commit 2020-09-30 16:53:55 +02:00
aggregation.cmd First commit 2020-09-30 16:53:55 +02:00
allraise.cmd First commit 2020-09-30 16:53:55 +02:00
allrel.cmd First commit 2020-09-30 16:53:55 +02:00
assignbvt.pl First commit 2020-09-30 16:53:55 +02:00
autoboottest.cmd First commit 2020-09-30 16:53:55 +02:00
autoboottest.intldub.pl First commit 2020-09-30 16:53:55 +02:00
autoboottest.pl First commit 2020-09-30 16:53:55 +02:00
autoboottest.pm First commit 2020-09-30 16:53:55 +02:00
bbtnorel.dat First commit 2020-09-30 16:53:55 +02:00
bindiff.pl First commit 2020-09-30 16:53:55 +02:00
bindsys.cmd First commit 2020-09-30 16:53:55 +02:00
bkg.jpg First commit 2020-09-30 16:53:55 +02:00
bootcfg.vbs First commit 2020-09-30 16:53:55 +02:00
bootflop.pl First commit 2020-09-30 16:53:55 +02:00
bootinit.cmd First commit 2020-09-30 16:53:55 +02:00
bootsafe.wsf First commit 2020-09-30 16:53:55 +02:00
boottestmachines.txt First commit 2020-09-30 16:53:55 +02:00
buildname.cmd First commit 2020-09-30 16:53:55 +02:00
buildname.pm First commit 2020-09-30 16:53:55 +02:00
buildsecure.cmd First commit 2020-09-30 16:53:55 +02:00
burncopy.cmd First commit 2020-09-30 16:53:55 +02:00
bvtm.cmd First commit 2020-09-30 16:53:55 +02:00
cabwrapper.cmd First commit 2020-09-30 16:53:55 +02:00
capturesourcefilelist.cmd First commit 2020-09-30 16:53:55 +02:00
catsign.cmd First commit 2020-09-30 16:53:55 +02:00
cddata.cmd First commit 2020-09-30 16:53:55 +02:00
cddirs.lst First commit 2020-09-30 16:53:55 +02:00
cdimage.cmd First commit 2020-09-30 16:53:55 +02:00
checktestsig.cmd First commit 2020-09-30 16:53:55 +02:00
checkxml.js First commit 2020-09-30 16:53:55 +02:00
chgkeyinf.cmd First commit 2020-09-30 16:53:55 +02:00
chgsfcinf.cmd First commit 2020-09-30 16:53:55 +02:00
cleanup.step.cmd First commit 2020-09-30 16:53:55 +02:00
cmbins.cmd First commit 2020-09-30 16:53:55 +02:00
cmdevt.pl First commit 2020-09-30 16:53:55 +02:00
cmdinisetting.pl First commit 2020-09-30 16:53:55 +02:00
comminf.cmd First commit 2020-09-30 16:53:55 +02:00
cookie.pm First commit 2020-09-30 16:53:55 +02:00
copydw.pl First commit 2020-09-30 16:53:55 +02:00
copyremoteboot.cmd First commit 2020-09-30 16:53:55 +02:00
copyremoteboot.txt First commit 2020-09-30 16:53:55 +02:00
copyscript.cmd First commit 2020-09-30 16:53:55 +02:00
copytsc.cmd First commit 2020-09-30 16:53:55 +02:00
copytsc.txt First commit 2020-09-30 16:53:55 +02:00
copywow64.cmd First commit 2020-09-30 16:53:55 +02:00
copywowlist.pl First commit 2020-09-30 16:53:55 +02:00
cplocation.cmd First commit 2020-09-30 16:53:55 +02:00
crypto.cmd First commit 2020-09-30 16:53:55 +02:00
crypto.txt First commit 2020-09-30 16:53:55 +02:00
csp.reb First commit 2020-09-30 16:53:55 +02:00
ctokens.cmd First commit 2020-09-30 16:53:55 +02:00
dazzle-macros.txt First commit 2020-09-30 16:53:55 +02:00
dbgeula.cmd First commit 2020-09-30 16:53:55 +02:00
ddkcabs.bat First commit 2020-09-30 16:53:55 +02:00
delayload.cmd First commit 2020-09-30 16:53:55 +02:00
deletebuild.cmd First commit 2020-09-30 16:53:55 +02:00
deletesym.cmd First commit 2020-09-30 16:53:55 +02:00
deletewrapper.cmd First commit 2020-09-30 16:53:55 +02:00
deploytools.cmd First commit 2020-09-30 16:53:55 +02:00
dispatch.pl First commit 2020-09-30 16:53:55 +02:00
distint.cmd First commit 2020-09-30 16:53:55 +02:00
dmd_mediaserver_cab.cmd First commit 2020-09-30 16:53:55 +02:00
dmdgenericcabber.cmd First commit 2020-09-30 16:53:55 +02:00
drivercab.cmd First commit 2020-09-30 16:53:55 +02:00
drvcabck.cmd First commit 2020-09-30 16:53:55 +02:00
exclude.lst First commit 2020-09-30 16:53:55 +02:00
file2cd.pl First commit 2020-09-30 16:53:55 +02:00
filechk.pl First commit 2020-09-30 16:53:55 +02:00
fips.cmd First commit 2020-09-30 16:53:55 +02:00
fixlogon.wsf First commit 2020-09-30 16:53:55 +02:00
fixprn.pl First commit 2020-09-30 16:53:55 +02:00
frozen_asms.reb First commit 2020-09-30 16:53:55 +02:00
fsds.cmd First commit 2020-09-30 16:53:55 +02:00
fullsync.cmd First commit 2020-09-30 16:53:55 +02:00
fxsclient.cmd First commit 2020-09-30 16:53:55 +02:00
gendiff.pl First commit 2020-09-30 16:53:55 +02:00
genfilelayout.pm First commit 2020-09-30 16:53:55 +02:00
geninflist.cmd First commit 2020-09-30 16:53:55 +02:00
genssifile.cmd First commit 2020-09-30 16:53:55 +02:00
getbldno.cmd First commit 2020-09-30 16:53:55 +02:00
getinisetting.pm First commit 2020-09-30 16:53:55 +02:00
getlatestrelease.cmd First commit 2020-09-30 16:53:55 +02:00
getparams.pm First commit 2020-09-30 16:53:55 +02:00
gpmc.cmd First commit 2020-09-30 16:53:55 +02:00
hashbuild.cmd First commit 2020-09-30 16:53:55 +02:00
hashrep.cmd First commit 2020-09-30 16:53:55 +02:00
hashrep.pl First commit 2020-09-30 16:53:55 +02:00
hashtext.pm First commit 2020-09-30 16:53:55 +02:00
helpsupportservices.cmd First commit 2020-09-30 16:53:55 +02:00
hnw.cmd First commit 2020-09-30 16:53:55 +02:00
indexsym.cmd First commit 2020-09-30 16:53:55 +02:00
inetsrv.cmd First commit 2020-09-30 16:53:55 +02:00
infsections.tbl First commit 2020-09-30 16:53:55 +02:00
infsizedefs.amd64.tbl First commit 2020-09-30 16:53:55 +02:00
infsizedefs.cmd First commit 2020-09-30 16:53:55 +02:00
infsizedefs.ia64.tbl First commit 2020-09-30 16:53:55 +02:00
infsizedefs.x86.tbl First commit 2020-09-30 16:53:55 +02:00
kbd.reb First commit 2020-09-30 16:53:55 +02:00
known_asms.reb First commit 2020-09-30 16:53:55 +02:00
known.reb First commit 2020-09-30 16:53:55 +02:00
layout.cmd First commit 2020-09-30 16:53:55 +02:00
lgndata.cmd First commit 2020-09-30 16:53:55 +02:00
lgnexclude.txt First commit 2020-09-30 16:53:55 +02:00
locag.pl First commit 2020-09-30 16:53:55 +02:00
localenvex.pm First commit 2020-09-30 16:53:55 +02:00
localrel.cmd First commit 2020-09-30 16:53:55 +02:00
makebfloppy.cmd First commit 2020-09-30 16:53:55 +02:00
makebuildname.cmd First commit 2020-09-30 16:53:55 +02:00
makeimg.pl First commit 2020-09-30 16:53:55 +02:00
makeprocd2.cmd First commit 2020-09-30 16:53:55 +02:00
makeupgadvimg.cmd First commit 2020-09-30 16:53:55 +02:00
makewinpeimg.cmd First commit 2020-09-30 16:53:55 +02:00
migwiz.cmd First commit 2020-09-30 16:53:55 +02:00
miscrel.cmd First commit 2020-09-30 16:53:55 +02:00
miscrel.txt First commit 2020-09-30 16:53:55 +02:00
mknetfxcab.cmd First commit 2020-09-30 16:53:55 +02:00
mktabcab.cmd First commit 2020-09-30 16:53:55 +02:00
mmssetup.cmd First commit 2020-09-30 16:53:55 +02:00
moveqfe.cmd First commit 2020-09-30 16:53:55 +02:00
msi.cmd First commit 2020-09-30 16:53:55 +02:00
mtnmake.cmd First commit 2020-09-30 16:53:55 +02:00
muiexclude.txt First commit 2020-09-30 16:53:55 +02:00
muimake.pm First commit 2020-09-30 16:53:55 +02:00
muimsi.pm First commit 2020-09-30 16:53:55 +02:00
muiwhistler.pl First commit 2020-09-30 16:53:55 +02:00
net.reb First commit 2020-09-30 16:53:55 +02:00
netmsgconv.pl First commit 2020-09-30 16:53:55 +02:00
never.reb First commit 2020-09-30 16:53:55 +02:00
newver.cmd First commit 2020-09-30 16:53:55 +02:00
nntpsmtp.cmd First commit 2020-09-30 16:53:55 +02:00
nt5cat.cmd First commit 2020-09-30 16:53:55 +02:00
nt5infcat.cmd First commit 2020-09-30 16:53:55 +02:00
ntbackuponpersonal.cmd First commit 2020-09-30 16:53:55 +02:00
ntprintcat.cmd First commit 2020-09-30 16:53:55 +02:00
ntrebase.cmd First commit 2020-09-30 16:53:55 +02:00
ntvdm.reb First commit 2020-09-30 16:53:55 +02:00
octomail.pl First commit 2020-09-30 16:53:55 +02:00
octopus.cmd First commit 2020-09-30 16:53:55 +02:00
opkmsi.cmd First commit 2020-09-30 16:53:55 +02:00
opkmsi.vbs First commit 2020-09-30 16:53:55 +02:00
opshellfolder.pl First commit 2020-09-30 16:53:55 +02:00
opshellfolder.wsf First commit 2020-09-30 16:53:55 +02:00
parseinf.pl First commit 2020-09-30 16:53:55 +02:00
parsesys.wsf First commit 2020-09-30 16:53:55 +02:00
pbainst.cmd First commit 2020-09-30 16:53:55 +02:00
pbuild.cmd First commit 2020-09-30 16:53:55 +02:00
pbuild.dat First commit 2020-09-30 16:53:55 +02:00
pbuild.hlp First commit 2020-09-30 16:53:55 +02:00
pbuild.mui First commit 2020-09-30 16:53:55 +02:00
pbuildenv.pm First commit 2020-09-30 16:53:55 +02:00
pbuildrelease.dat First commit 2020-09-30 16:53:55 +02:00
pdbsrcstream.cmd First commit 2020-09-30 16:53:55 +02:00
raiseall.pl First commit 2020-09-30 16:53:55 +02:00
raiseall.txt First commit 2020-09-30 16:53:55 +02:00
readme.txt First commit 2020-09-30 16:53:55 +02:00
readsetupfiles.pm First commit 2020-09-30 16:53:55 +02:00
reattr.cmd First commit 2020-09-30 16:53:55 +02:00
release.cmd First commit 2020-09-30 16:53:55 +02:00
relrules.beta1 First commit 2020-09-30 16:53:55 +02:00
relrules.idx01 First commit 2020-09-30 16:53:55 +02:00
relrules.idx02 First commit 2020-09-30 16:53:55 +02:00
relrules.lab02_n First commit 2020-09-30 16:53:55 +02:00
relrules.lab03_n First commit 2020-09-30 16:53:55 +02:00
relrules.lab04_n First commit 2020-09-30 16:53:55 +02:00
relrules.lab06_n First commit 2020-09-30 16:53:55 +02:00
relrules.main First commit 2020-09-30 16:53:55 +02:00
removerc.cmd First commit 2020-09-30 16:53:55 +02:00
removesecretsymbols.cmd First commit 2020-09-30 16:53:55 +02:00
reskit.cmd First commit 2020-09-30 16:53:55 +02:00
rx.wsf First commit 2020-09-30 16:53:55 +02:00
samsibuild.cmd First commit 2020-09-30 16:53:55 +02:00
sanitychecklist.txt First commit 2020-09-30 16:53:55 +02:00
sanitycheckunicodefiles.cmd First commit 2020-09-30 16:53:55 +02:00
scp_wpafiles.cmd First commit 2020-09-30 16:53:55 +02:00
scp_wpafiles.reb First commit 2020-09-30 16:53:55 +02:00
setup_log.txt First commit 2020-09-30 16:53:55 +02:00
setupw95.cmd First commit 2020-09-30 16:53:55 +02:00
sfcgen.cmd First commit 2020-09-30 16:53:55 +02:00
sfcwrap.cmd First commit 2020-09-30 16:53:55 +02:00
shimbind.cmd First commit 2020-09-30 16:53:55 +02:00
signtheme.cmd First commit 2020-09-30 16:53:55 +02:00
skusize.cmd First commit 2020-09-30 16:53:55 +02:00
snapbin.cmd First commit 2020-09-30 16:53:55 +02:00
snapbin.pl First commit 2020-09-30 16:53:55 +02:00
snaplist.txt First commit 2020-09-30 16:53:55 +02:00
snsignfiles.cmd First commit 2020-09-30 16:53:55 +02:00
specialaddedfiles.txt First commit 2020-09-30 16:53:55 +02:00
specsign.lst First commit 2020-09-30 16:53:55 +02:00
spimageprune.txt First commit 2020-09-30 16:53:55 +02:00
splitlist.cmd First commit 2020-09-30 16:53:55 +02:00
splitlist.pl First commit 2020-09-30 16:53:55 +02:00
srvrel.cmd First commit 2020-09-30 16:53:55 +02:00
startcompress.cmd First commit 2020-09-30 16:53:55 +02:00
startpostcompress.cmd First commit 2020-09-30 16:53:55 +02:00
startprecompress.cmd First commit 2020-09-30 16:53:55 +02:00
startsymcopy.pl First commit 2020-09-30 16:53:55 +02:00
startthread.cmd First commit 2020-09-30 16:53:55 +02:00
subdirs.lst First commit 2020-09-30 16:53:55 +02:00
submit_public.cmd First commit 2020-09-30 16:53:55 +02:00
submit_rules.txt First commit 2020-09-30 16:53:55 +02:00
supporttools.cmd First commit 2020-09-30 16:53:55 +02:00
swapinoriginalfiles.cmd First commit 2020-09-30 16:53:55 +02:00
sxs_build_single_cab.cmd First commit 2020-09-30 16:53:55 +02:00
sxs_compress.cmd First commit 2020-09-30 16:53:55 +02:00
sxs_createcab.cmd First commit 2020-09-30 16:53:55 +02:00
sxs_make_asms_cabs.cmd First commit 2020-09-30 16:53:55 +02:00
sxs_msm.cmd First commit 2020-09-30 16:53:55 +02:00
sxs_patch.cmd First commit 2020-09-30 16:53:55 +02:00
symbolcd.cmd First commit 2020-09-30 16:53:55 +02:00
symcab.cmd First commit 2020-09-30 16:53:55 +02:00
symcabgen.cmd First commit 2020-09-30 16:53:55 +02:00
symcd.cmd First commit 2020-09-30 16:53:55 +02:00
symcopy.cmd First commit 2020-09-30 16:53:55 +02:00
symcopythread.cmd First commit 2020-09-30 16:53:55 +02:00
symdelegate.pm First commit 2020-09-30 16:53:55 +02:00
symindex.pm First commit 2020-09-30 16:53:55 +02:00
symmake.pm First commit 2020-09-30 16:53:55 +02:00
symmungepublic.cmd First commit 2020-09-30 16:53:55 +02:00
syncone.cmd First commit 2020-09-30 16:53:55 +02:00
sysgen.pl First commit 2020-09-30 16:53:55 +02:00
tagmsi.cmd First commit 2020-09-30 16:53:55 +02:00
tapeline.cmd First commit 2020-09-30 16:53:55 +02:00
template_cmd.cmd First commit 2020-09-30 16:53:55 +02:00
template_module.pm First commit 2020-09-30 16:53:55 +02:00
template_perl.cmd First commit 2020-09-30 16:53:55 +02:00
timebomb.cmd First commit 2020-09-30 16:53:55 +02:00
tokrel.cmd First commit 2020-09-30 16:53:55 +02:00
toolfix.pm First commit 2020-09-30 16:53:55 +02:00
ts.reb First commit 2020-09-30 16:53:55 +02:00
tscert.cmd First commit 2020-09-30 16:53:55 +02:00
tsclient.cmd First commit 2020-09-30 16:53:55 +02:00
tscsetup.cmd First commit 2020-09-30 16:53:55 +02:00
tswebsetup.cmd First commit 2020-09-30 16:53:55 +02:00
twclient.cmd First commit 2020-09-30 16:53:55 +02:00
uddipostbuild.cmd First commit 2020-09-30 16:53:55 +02:00
unicodecheck.pm First commit 2020-09-30 16:53:55 +02:00
unique.pl First commit 2020-09-30 16:53:55 +02:00
updateos.vbs First commit 2020-09-30 16:53:55 +02:00
updater.cmd First commit 2020-09-30 16:53:55 +02:00
vba.set.wallpaper.wsf First commit 2020-09-30 16:53:55 +02:00
winfuse_combinelogs.cmd First commit 2020-09-30 16:53:55 +02:00
winfuse_postbuild.cmd First commit 2020-09-30 16:53:55 +02:00
winfusesfcgen.cmd First commit 2020-09-30 16:53:55 +02:00
winnt32msi.cmd First commit 2020-09-30 16:53:55 +02:00
wmmkdcache.cmd First commit 2020-09-30 16:53:55 +02:00
wow64.reb First commit 2020-09-30 16:53:55 +02:00
wow64csp.cmd First commit 2020-09-30 16:53:55 +02:00
wrap.mui.bvt.cmd First commit 2020-09-30 16:53:55 +02:00
wrapper.cmd First commit 2020-09-30 16:53:55 +02:00
wsh.arguments.echo.wsf First commit 2020-09-30 16:53:55 +02:00
wsh.cpl.wsf First commit 2020-09-30 16:53:55 +02:00
wsh.dialoger.wsf First commit 2020-09-30 16:53:55 +02:00
wsh.iexplore.dialog.input.wsf First commit 2020-09-30 16:53:55 +02:00
wsh.paint.picture.wsf First commit 2020-09-30 16:53:55 +02:00
wsh.tapeline.async.wsf First commit 2020-09-30 16:53:55 +02:00
wsrmcdscript.cmd First commit 2020-09-30 16:53:55 +02:00
wsrmpostbuild.cmd First commit 2020-09-30 16:53:55 +02:00
xmlbf.cmd First commit 2020-09-30 16:53:55 +02:00
xmlchk.cmd First commit 2020-09-30 16:53:55 +02:00
xpsp1.pl First commit 2020-09-30 16:53:55 +02:00

This directory contains "build rules" you can use for your particular project.

Typically, a build rule script executes various post-build.exe operations on a set of
existing binaries. For example, a build rule script can invoke iexpress.exe in order
to generate a cab file or a self-extracting executable.

E-mail MLekas or ntball with questions regarding the US builds and MattHoe or ntbintl
with questions regarding the International builds.

To add a new build rule script:

1. Copy "template" to <your_project_build_rule>.cmd.

2. Edit <your_project_build_rule>.cmd according to the guidelines below.

   a. Build rule scripts must be general enough to run in various contexts.

      The build rule scripts are part of the US Windows 2000 build procedures.
      The Redmond-based and the Dublin-based International Windows 2000 builds use them
      too. Some of the build rule scripts are released with the source release kits.
      These various contexts need to be considered when implementing the build rule scripts.

      For example, the build rule scripts should avoid using hard-coded machine names:

      * If your script propagates binaries from one build machine to another,
         call %_ntbindir%\bldrules\localbrs.bat, then use variable names instead of
         hard-coded machine names.

         Let's say your script must copy files from \\x86fre\binaries to \\alphafre\binaries.

         Replace
             xcopy \\x86fre\binaries\%myfiles% \\alphafre\binaries\
         with
             call %_ntbindir%\bldrules\localbrs.bat
             ..
             if /I "%computername%" == "%alphafre%" (
               xcopy \\%x86fre%\%binshare%\%myfiles% \\%alphafre%\%binshare%\
             )

      By using a different localbrs.txt, International builds can use their own machine names,
      shares, etc and still run the same build rule scripts as the US builds.

      *  If your script must be executed on a particular build machine only (x86fre for example),
         add a particular entry to localbrs.txt, then use variable names instead of machine names.

         For example, drvcab.cmd runs "slm in sorted.lst" on the official US build machines only.

         The sequence
             REM Only US build machines should check in sorted.lst
             set checkin=
             if /i "%computername%" == "x86fre"   set checkin=yes
             if /i "%computername%" == "alphafre" set checkin=yes
             if /i "%computername%" == "axp64fre" set checkin=yes
             if /i "%computername%" == "ia64fre"  set checkin=yes
         can be replaced with
             call %_ntbindir%\bldrules\localbrs.bat
             ..
             REM Only US build machines should check in sorted.lst
             set checkin=
             if /i "%computername%" == "%USx86fre%"   set checkin=yes
             if /i "%computername%" == "%USalphafre%" set checkin=yes
             if /i "%computername%" == "%USaxp64fre%" set checkin=yes
             if /i "%computername%" == "%USia64fre%"  set checkin=yes


   b. Build rule scripts must be able to run in particular contexts as well.

      *  Not everything from a build rule script is applicable to the International builds.

         _AUTORUN.CMD is an example. The script applies to the US builds only.

         Use IsIntlBld.cmd (-s \\orville\razzle -p public\tools) to determine if the script
         is being run for International builds and skip the execution of some particular code
         if the code is not applicable for language builds.

         call IsIntlBld.cmd
         if errorlevel 1 (
             REM Write code specific to non-International builds
         ) else (
             REM Write code specific to International builds.
         )

         Also, as environment variable LANG is defined at the time the US build rule script is
         invoked, you can use it if you need to write code specific to a particular language.
         Nec_98 is considered a language, even though it is in fact an architecture specific to
         Japanese builds and built on the x86 machines.

      *  Not everything from a build rule script is (might be) applicable to both Redmond and
         Dublin-based International builds.

         You can use the same IsIntlBld.cmd to determine if the script is being run for a specific
         International build:

         call IsIntlBld.cmd Redmond
         if errorlevel 1 (
             REM Not a Redmond-based International build.
         ) else (
             REM Write code specific to the Redmond-based International builds.
         )

         call IsIntlBld.cmd Dublin
         if errorlevel 1 (
             REM Not a Dublin-based International build.
         ) else (
             REM Write code specific to the Dublin-based International builds.
         )

         Currently, there is no build rule script to need special processing for one
         International type build, but not for the other.

      *  Not all languages ship server, advanced server, or datacenter Windows 2000 products.

         Some of the build rule scripts use perinf, blainf, sbsinf, srvinf, entinf, and/or dtcinf. Before using these
         directories, a build rule script should verify if they are applicable in the current context.

         REM Use CkSKU.pm to validate the SKU against the given language and architecture.

         perl %RazzleToolPath%\cksku.pm -t:per -l:%lang% -a:%_BuildArch%
         if %errorlevel% EQU 0 (
              REM Execute code based on perinf files. Ex:
              perl makelist.pl -q %bin_in%\perinf\excdosnt.inf ...
         )
         perl %RazzleToolPath%\cksku.pm -t:bla -l:%lang% -a:%_BuildArch%
         if %errorlevel% EQU 0 (
              REM Execute code based on blainf files. Ex:
              perl makelist.pl -q %bin_in%\blainf\excdosnt.inf ...
         )
         perl %RazzleToolPath%\cksku.pm -t:sbs -l:%lang% -a:%_BuildArch%
         if %errorlevel% EQU 0 (
              REM Execute code based on sbsinf files. Ex:
              perl makelist.pl -q %bin_in%\sbsinf\excdosnt.inf ...
         )
         perl %RazzleToolPath\%cksku.pm -t:srv -l:%lang% -a:%_BuildArch%
         if %errorlevel% EQU 0 (
              REM Execute code based on srvinf files. Ex:
              perl makelist.pl -q %bin_in%\srvinf\excdosnt.inf ...
         )
         perl %RazzleToolPath%\cksku.pm -t:ads -l:%lang% -a:%_BuildArch%
         if %errorlevel% EQU 0 (
              REM Execute code based on adsinf files. Ex:
              perl makelist.pl -q %bin_in%\entinf\excdosnt.inf ...
         )
         perl %RazzleToolPath%\cksku.pm -t:dtc -l:%lang% -a:%_BuildArch%
         if %errorlevel% EQU 0 (
              REM Execute code based on dtcinf files. Ex:
              perl makelist.pl -q %bin_in%\dtcinf\excdosnt.inf ...
         )

   c. Build rule scripts need to respect the following set of rules when using and/or defining
      environment variables:

      *  Any razzle variable is allowed to be used inside a build rule script, except for "BINARIES".

         _NTDRIVE, _NTROOT, NTDEBUG, _TARGET are examples of razzle variables.

        On both US and International build machines, %BINARIES% represents the directory to which
        files get binplaced. Typically, the files from the %BINARIES% directory are not localized.
        On the International build machines, the tree containing the localized binaries is called
        RELBINS and is different from BINARIES. In general, the build rule scripts apply to binaries
        already built and, for International, localized. To avoid confusion and inappropriate
        redefinitions of BINARIES that would persist after a build rule script finishes its execution,
        the build rule scripts define a special variable called MYBINARIES as follows:

        if not defined MYBINARIES set MYBINARIES=%BINARIES%

      *  A build rule script can define any new variable under the requirement that they preserve the
         existing value of that variable, if any.

         if not defined build_rule_script_local_variable (
             set build_rule_script_local_variable=<value>
         )

         This mechanism allows the International builds to define these variables according to their
         particular context before invoking the US build rules. The gain is that US and International
         builds are able to share the same build rule scripts.


   d. A build rule script should avoid executing builds in the private tree or using binaries from the
      private tree.

      The files processed by a build rule script must be accessible to the international builds.
      The international build machines do not have the whole private tree.  Their private tree is
      restricted to those projects requiring compile time localization.
      Whenever your build rule script invokes builds.exe under private or uses files from private,
      it breaks the International builds, as they cannot use your build rule script.

      If you must run build instructions from a build rule script, put these instructions into
      PRECONGEAL.
      Or avoid building on international build machines by using the IsIntlBld.cmd logic described
      above.  Keep in mind that international build machines only build sources that are localized,
      which are very few and usually belong in a language-specific directory like \jpn for Japanese.
      The rest of the binaries are inherited from the US build machines' %BINARIES% so international
      machines avoid running build.exe under private in order to get the unlocalized binaries one
      build rule script needs.
      In cases where localized sources absolutely need to be re-built inside a build rules script
      (ie, drvcab.cmd rebuilds dosnet.inf), please discuss with the international build team contacts
      at the top of this document so special international needs can be addressed.

      Also, any file from the private tree used by a build rule script should be binplaced to the
      %BINARIES% tree, as opposed to being copied to %BINARIES%. Having a file listed in binplace.log
      makes the investigation of build problems easier, as the name and location of the source tree
      producing the file becomes apparent.

      Last but not least, the binaries from the private tree typically have the symbol information not
      split. It is wrong to include non-split binaries in the product.  Binplacing files will enforce
      that the proper symbolic information is present and split out to the proper .dbg and/or .pdb files
      so customers receive split binaries with valid symbols, not non-split binaries that can be reverse
      engineered.


   e. Build rule scripts should be able to run incrementally.

      The build rule scripts are currently invoked from congeal.cmd.
      Typically, they run cleanly whenever invoked, even though just a few files changed.
      Every time you write a build rule script, multiply its execution time with 21 (7 Redmond-based
      languages and 14 Dublin-based languages) and assess whether its execution time is still acceptable.
      Even when they run in parallel for different languages, the build rule scripts can take a lot of
      time to execute.

      Whenever possible, write and/or use incremental tools. For example, use makefiles to define
      dependencies and generate the targets, in order to take the advantage of NMAKE.EXE's incremental
      nature.


   f. A build rule script should be very specific about the location of the tools it uses.

      A build rule script using an idw or mstools tool must invoke the tool by using its full name,
      including the path. It is error prone to assume that the right version of signcode.exe, for example,
      comes first in the PATH.

      if not defined idw set idw=%windir%\idw
      %idw%\signcode.exe ...

      iexpress.exe should always be used from IEXPRESS_PATH, as the language builds need localized
      version of advpack.dll and wextract.exe:

      if not defined IEXPRESS_PATH set IEXPRESS_PATH=%windir%\idw
      set PATH=%IEXPRESS_PATH%;%PATH%
      iexpress.exe ...


   g. A build rule script should provide logging and error information on the screen and in logging files.

      Follow the template script's guidelines in logging information on the screen and in log files:
      *  use ErrMsg.cmd to log errors, LogMsg.cmd to log non-error information and LogMsg.cmd /t
         to mark the start and the end script's execution times.
      *  exit with a non-zero errorlevel if the script encountered errors during execution by calling
         seterror.exe <errno> in the end.

   h. A build rule script should be enabled to run in parallel with other build rules scripts.

      Every build rule script must be enabled to run in parallel with the other build rule scripts.
      For every option it implements (NEWVER, PREREBASE, CONGEAL, etc), a build rule creates a tag file
      in the tmp directory, tag file to be deleted when the execution of the build rule script finishes.
      The existence of the tag file shows that the build rule script is still executing.


   i. A build rule script should contain detailed comments about its purpose, the algorithm it uses to
      generate its output, particular tools it relies on, caveats, etc.

3. Check in <your_project_build_rule>.cmd.

   The NT build process will run the new added .cmd file at the appropriate time as part of the normal
   NT build.

4. Make any changes to <your_project_build_rule>.cmd in accordance with the guidelines detailed at step 2.

   If your .cmd file becomes obsolete, remove (delfile) it from the "bldrules" project.
   Until you remove the .cmd file, the build process will continue to run it with every US and
   International build.