1707 lines
47 KiB
Batchfile
1707 lines
47 KiB
Batchfile
@echo off
|
|
if defined _echo echo on
|
|
if defined verbose echo on
|
|
setlocal ENABLEDELAYEDEXPANSION
|
|
|
|
REM Check the command line for /? -? or ?
|
|
for %%a in (./ .- .) do if ".%1." == "%%a?." goto Usage
|
|
|
|
goto MAIN
|
|
|
|
:BeginBuildPackage
|
|
|
|
REM Set PackageType=retail or PackageType=beta.
|
|
REM This affects "redist.txt" and whether or not it lists the files that are
|
|
REM redistributable
|
|
|
|
set PackageType=beta
|
|
|
|
REM Do a clean build of the msi things
|
|
if exist %_NTTREE%\dbg\files\msi rd /s /q %_NTTREE%\dbg\files\msi
|
|
del /s /q %_NTTREE%\dbg\redist*
|
|
|
|
REM Build the msi stuff
|
|
|
|
call logmsg "Building the redist directory"
|
|
cd redist
|
|
build -cZ
|
|
cd ..
|
|
|
|
call logmsg "Building the msi directory"
|
|
cd msi
|
|
build -cZ
|
|
cd ..
|
|
|
|
REM Make sure that mergemod.dll has been regsvr'd
|
|
call logmsg "Registering %_NTDRIVE%%_NTROOT%\tools\x86\mergemod.dll
|
|
regsvr32 /s %_NTDRIVE%%_NTROOT%\tools\x86\mergemod.dll
|
|
|
|
for %%a in (%cmdline%) do (
|
|
|
|
set CorrectEntry=no
|
|
if /i "%%a" == "debuggers" (
|
|
set CorrectEntry=yes
|
|
)
|
|
if /i "%%a" == "debuggers.cmd" (
|
|
set CorrectEntry=yes
|
|
)
|
|
if /i "!CorrectEntry!" == no (
|
|
goto Usage
|
|
)
|
|
)
|
|
|
|
set DbgErrors=no
|
|
|
|
set SRCDIR=%_NTTREE%\dbg\files
|
|
set SRCSDKLIBDIR=%_NTDRIVE%%_NTROOT%\public\sdk\lib
|
|
set SRCSDKINCDIR=%_NTDRIVE%%_NTROOT%\public\sdk\inc
|
|
set SRCSAMPLEDIR=%CD%\samples
|
|
set SDKLIBDIR=%SRCDIR%\sdk\lib
|
|
set SDKINCDIR=%SRCDIR%\sdk\inc
|
|
set SAMPLEDIR=%SRCDIR%\sdk\samples
|
|
|
|
set WEBDIR=%_NTTREE%\dbg\web
|
|
set SDKDIR=%_NTTREE%\dbg\sdk
|
|
set DOCDIR=%_NTTREE%\dbg\msi\docs
|
|
set PRICHMPATH=\\dbg\web$\docs\htmlhelp\Private_Version
|
|
set PRICHIPATH=\\dbg\web$\docs\htmlhelp\Private_Version
|
|
set PRICHM=debugMS.chm
|
|
set PRICHI=debugMS.chi
|
|
set MSIDIR=%_NTTREE%\dbg\msi
|
|
set CABDIR=%_NTTREE%\dbg\cabs
|
|
set DDFDIR=%MSIDIR%\ddfs
|
|
set IDTDIR=%MSIDIR%\idts
|
|
set TOOLPATH=%_NTDRIVE%%_NTROOT%\Tools
|
|
set DESTDIR=%_NTTREE%\dbg
|
|
set MSIIDTDIR=%MSIDIR%\msiidts
|
|
set MSMDIR=%DESTDIR%\sdk
|
|
set MAKEFILE=%MSIDIR%\ddfs\makefile
|
|
set CABLIST=%DDFDIR%\cabs.txt
|
|
|
|
REM
|
|
REM The msi that goes on the CD needs to be slightly
|
|
REM different than the one that we distribute for stress
|
|
REM
|
|
|
|
set CDMSIDIR=%DESTDIR%\sdk
|
|
set CDMSIIDTDIR=%MSIDIR%\cd\msiidts
|
|
|
|
if exist %CDMSIDIR% rd /s /q %CDMSIDIR%
|
|
if exist %CDMSIIDTDIR% rd /s /q %CDMSIIDTDIR%
|
|
|
|
REM Cleanup and create the directory where the self-extracting
|
|
REM exe that we post to the web goes.
|
|
|
|
if not exist %WEBDIR% mkdir %WEBDIR%
|
|
|
|
REM
|
|
REM Make directories
|
|
REM
|
|
|
|
if NOT EXIST %CABDIR% MD %CABDIR%
|
|
if NOT EXIST %DDFDIR% MD %DDFDIR%
|
|
if NOT EXIST %IDTDIR% MD %IDTDIR%
|
|
if NOT EXIST %DESTDIR% md %DESTDIR%
|
|
if NOT EXIST %MSIIDTDIR% md %MSIIDTDIR%
|
|
if NOT EXIST %MSMDIR% md %MSMDIR%
|
|
|
|
if NOT EXIST %CDMSIDIR% md %CDMSIDIR%
|
|
if NOT EXIST %CDMSIIDTDIR% md %CDMSIIDTDIR%
|
|
|
|
|
|
del /q /f %MSMDIR%\*
|
|
|
|
|
|
set COMPONEN=%IDTDIR%\componen.idt
|
|
set DIRECTOR=%IDTDIR%\director.idt
|
|
set FEATUREC=%IDTDIR%\featurec.idt
|
|
set FILE=%IDTDIR%\file.idt
|
|
set MEDIA=%IDTDIR%\media.idt
|
|
set MODULECO=%IDTDIR%\moduleco.idt
|
|
set MODULESI=%IDTDIR%\modulesi.idt
|
|
set SHORTCUT=%IDTDIR%\shortcut.idt
|
|
set REGISTRY=%IDTDIR%\registry.idt
|
|
|
|
set DATA=%MSIDIR%\dbgdata.txt
|
|
|
|
REM Set the MSI name according to build architecture
|
|
if /i "%_BuildArch%" == "x86" (
|
|
set MSINAME=dbg_x86
|
|
set OEMNAME=dbg_oem
|
|
set CurArch=i386
|
|
goto EndSetBuildArch
|
|
)
|
|
|
|
if /i "%_BuildArch%" == "IA64" (
|
|
set OEMNAME=
|
|
set MSINAME=dbg_ia64
|
|
set CurArch=ia64
|
|
goto EndSetBuildArch
|
|
)
|
|
|
|
call errmsg "Build architecture (_BuildArch) is unknown"
|
|
goto errend
|
|
:EndSetBuildArch
|
|
|
|
REM Make directories for the source files
|
|
REM and copy them in
|
|
|
|
call logmsg.cmd "Copying in the SDK files..."
|
|
|
|
if not exist %SDKLIBDIR%\i386 md %SDKLIBDIR%\i386
|
|
if not exist %SDKLIBDIR%\ia64 md %SDKLIBDIR%\ia64
|
|
if not exist %SDKINCDIR% md %SDKINCDIR%
|
|
if not exist %SAMPLEDIR% md %SAMPLEDIR%
|
|
|
|
for %%a in ( exts simplext dumpstk ) do (
|
|
if not exist %SAMPLEDIR%\%%a md %SAMPLEDIR%\%%a
|
|
copy %SRCSAMPLEDIR%\%%a\* %SAMPLEDIR%\%%a
|
|
)
|
|
|
|
for %%a in ( dbgeng.h wdbgexts.h dbghelp.h ) do (
|
|
copy %SRCSDKINCDIR%\%%a %SDKINCDIR%\%%a > nul
|
|
)
|
|
|
|
for %%a in ( dbgeng.lib dbghelp.lib ) do (
|
|
copy %SRCSDKLIBDIR%\i386\%%a %SDKLIBDIR%\i386\%%a > nul
|
|
copy %SRCSDKLIBDIR%\ia64\%%a %SDKLIBDIR%\ia64\%%a > nul
|
|
)
|
|
|
|
REM Get the empty ones ready
|
|
REM Prepare dbg.msi
|
|
|
|
if exist %DESTDIR%\%MSINAME%.msi del %DESTDIR%\%MSINAME%.msi
|
|
if exist %MSIDIR%\%MSINAME%.msi del %MSIDIR%\%MSINAME%.msi
|
|
|
|
copy %MSIDIR%\dbgx.msi %MSIDIR%\%MSINAME%.msi > nul
|
|
|
|
REM Get the docs copied in
|
|
call logmsg.cmd "Copying in the private docs ..."
|
|
|
|
if not exist %DOCDIR% (
|
|
call errmsg "Docs are not binplaced to %DOCDIR%"
|
|
goto errend
|
|
)
|
|
if exist %PRICHMPATH%\%PRICHM% (
|
|
copy %PRICHMPATH%\%PRICHM% %DOCDIR%\%PRICHM% > nul
|
|
) else (
|
|
call errmsg "Cannot find %PRICHMPATH%\%PRICHM%"
|
|
goto errend
|
|
)
|
|
if exist %PRICHIPATH%\%PRICHI% (
|
|
copy %PRICHIPATH%\%PRICHI% %DOCDIR%\%PRICHI% > nul
|
|
) else (
|
|
call errmsg "Cannot find %PRICHIPATH%\%PRICHI%"
|
|
goto errend
|
|
)
|
|
if not exist %DOCDIR%\%PRICHM% (
|
|
call errmsg "Copy failed for %PRICHMPATH%\%PRICHM% to %DOCDIR%\%PRICHM%"
|
|
)
|
|
if not exist %DOCDIR%\%PRICHI% (
|
|
call errmsg "Copy failed for %PRICHIPATH%\%PRICHI% to %DOCDIR%\%PRICHI%"
|
|
)
|
|
|
|
if exist %CABDIR%\dbg*.CABinet del /f /q %CABDIR%\dbg*.CABinet
|
|
if exist %MAKEFILE% del /f /q %MAKEFILE%
|
|
if exist %CABLIST% del /f /q %CABLIST%
|
|
|
|
REM Give every package that gets generated, a new product
|
|
REM and package code. MSI will always think its upgrading
|
|
|
|
call :UpdateProductCode %MSIDIR%\%MSINAME%.msi %MSIIDTDIR%
|
|
call :UpdatePackageCode %MSIDIR%\%MSINAME%.msi %MSIIDTDIR%
|
|
call :SetUpgradeCode %MSIDIR%\%MSINAME%.msi %MSIIDTDIR%
|
|
|
|
REM Update redist.txt to have the correct version number
|
|
call :UpdateRedist
|
|
|
|
REM Put the current build number into the ProductVersion
|
|
REM fields
|
|
|
|
call :SetVersion %MSIDIR%\%MSINAME%.msi %MSIIDTDIR%
|
|
|
|
REM Possible first entries are
|
|
REM 1. MergeModule
|
|
REM 2. Directory
|
|
REM 3. File
|
|
|
|
REM Put the data into the idt's
|
|
|
|
REM Arguments for "file
|
|
REM %%a = "file"
|
|
REM %%b = component
|
|
REM %%c = GUID
|
|
REM %%d = file name
|
|
|
|
REM Arguments for "directory
|
|
|
|
set /a count=0
|
|
set /a modulecount=1
|
|
set ModuleName=none
|
|
|
|
REM This variable determines whether any of the files
|
|
REM that are supposed to go into a merge module exist.
|
|
REM For example, w2kfre and w2kchk extensions do not
|
|
REM exist for alpha installs.
|
|
|
|
set FilesExist=no
|
|
|
|
call :CreateMSIHeaders
|
|
|
|
REM Start a DDF that contains all the files
|
|
call :CreateDDFHeader %MSINAME%
|
|
|
|
for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13* delims=," %%a in (%DATA%) do (
|
|
if /i "%%a" == "MergeModule" (
|
|
|
|
REM Create/finish the current merge module if it exists
|
|
if /i NOT "!ModuleName!" == "none" (
|
|
|
|
REM For this architecture there may be no files in this
|
|
REM MergeModule. If this is the case don't finish it
|
|
|
|
if /i "!FilesExist!" == "yes" (
|
|
call :FinishMergeModule
|
|
set /a modulecount=!modulecount!+1
|
|
|
|
if /i "!PrevFile!" NEQ "none" (
|
|
echo !PrevFile!>>%MAKEFILE%
|
|
echo makecab /F %DDFDir%\!ModuleName!.ddf>>%MAKEFILE%
|
|
echo.>>%MAKEFILE%
|
|
)
|
|
)
|
|
set FilesExist=no
|
|
)
|
|
|
|
REM Decide if this is a correct merge module for this architecture
|
|
set skippingmodule=yes
|
|
if /i "%_BuildArch%" == "x86" (
|
|
if /i "%%b" == "32" set skippingmodule=no
|
|
)
|
|
if /i "%_BuildArch%" == "ia64" (
|
|
if /i "%%b" == "64" set skippingmodule=no
|
|
)
|
|
if /i "%%b" EQU "3264" set skippingmodule=no
|
|
|
|
call logmsg "Module %%c -- skipping=!skippingmodule!"
|
|
|
|
|
|
if /i "!skippingmodule!" == "no" (
|
|
REM CurSrcDir is the directory where the source files are found in
|
|
REM our tree
|
|
set CurSrcDir=%SRCDIR%
|
|
|
|
REM Create a new set of headers
|
|
call :CreateIDTHeaders
|
|
|
|
set ModuleName=%%c
|
|
|
|
REM set guidlet equal to the guid with _ instead of -'s
|
|
call :MungeGUID %%d
|
|
|
|
set ModuleGuidlet=!guidlet!
|
|
set ModuleSig=!ModuleName!.!guidlet!
|
|
set MergeFeature=%%e
|
|
set MergeParent=%%f
|
|
|
|
if /i "%_BuildArch%" == "ia64" (
|
|
if /i "!MergeParent!" == "SystemFolder" (
|
|
set MergeParent=System64Folder
|
|
)
|
|
)
|
|
|
|
echo !ModuleSig! 0 01.00.0000.0000>>%MODULESI%
|
|
|
|
call :CreateDDFHeader !ModuleName!
|
|
set PrevFile=none
|
|
set CabStart=yes
|
|
)
|
|
)
|
|
|
|
if /i "!skippingmodule!" == "no" (
|
|
|
|
if /i "%%a" == "file" (
|
|
call :MungeGUID %%b
|
|
set guid={%%b}
|
|
|
|
set filename=%%c
|
|
set filenamekey=!filename!.!guidlet!
|
|
set component=!ModuleName!.!guidlet!
|
|
set condition=%%d
|
|
set attributes=0
|
|
|
|
REM if we every start doing this as a one-step build we
|
|
REM can put this in and take out the call later to
|
|
REM FixComponentAttributes
|
|
REM if /i "%_BuildArch%" == "ia64" (
|
|
REM set attributes=256
|
|
REM )
|
|
|
|
echo !component! !guid! !CurInstallDir! !attributes! !condition! !filenamekey!>>%COMPONEN%
|
|
set /a count=!count!+1
|
|
echo !filenamekey! !component! !filename! 0 1033 512 !count!>>%FILE%
|
|
echo !component! !ModuleSig! ^0>>%MODULECO%
|
|
|
|
REM We have different file lists for different architectures
|
|
REM If a file is missing on this architecture, don't put it in the DDF
|
|
|
|
if /i exist !CurSrcDir!\!filename! (
|
|
set FilesExist=yes
|
|
|
|
REM Don't write out a \ unless this file is not the last one
|
|
REM Save it and write it out next
|
|
if /i "!CabStart!" EQU "yes" (
|
|
echo %CabDir%\!ModuleName!.CABinet: \>>%MAKEFILE%
|
|
echo !ModuleName!>>%CABLIST%
|
|
set CabStart=no
|
|
)
|
|
if /i "!PrevFile!" NEQ "none" (
|
|
echo !PrevFile! \>>%MAKEFILE%
|
|
)
|
|
|
|
set PrevFile=!CurSrcDir!\!filename!
|
|
|
|
echo !CurSrcDir!\!filename! !filenamekey!>>%DDFDIR%\!ModuleName!.ddf
|
|
echo !CurSrcDir!\!filename! !filenamekey!>>%DDFDIR%\%MSINAME%.ddf
|
|
) else (
|
|
call errmsg "****!CurSrcDir!\!filename! is missing!!!!"
|
|
goto errend
|
|
)
|
|
)
|
|
|
|
if /i "%%a" == "directory" (
|
|
set CurInstallDir=%%b.!ModuleGuidlet!
|
|
set CurAppend=%%e
|
|
if /i "!CurAppend!" == "*" (
|
|
set CurAppend=%CurArch%
|
|
)
|
|
if /i NOT "!CurAppend!" == "" (
|
|
if /i NOT "!CurAppend!" == "^." (
|
|
set CurSrcDir=!CurSrcDir!\!CurAppend!
|
|
)
|
|
)
|
|
set parentdir=%%c.!ModuleGuidlet!
|
|
if /i "%%d" == "*" (
|
|
set installdirname=%CurArch%
|
|
) else (
|
|
set installdirname=%%d
|
|
)
|
|
|
|
echo !CurInstallDir! !parentdir! !installdirname!:!CurAppend!>>%DIRECTOR%
|
|
)
|
|
|
|
|
|
if /i "%%a" == "registry" (
|
|
call :MungeGUID %%b
|
|
set guid={%%b}
|
|
|
|
set component=!ModuleName!.!guidlet!
|
|
set CurInstallDir=INSTDIR
|
|
set attributes=4
|
|
|
|
REM Get the root
|
|
|
|
set root=
|
|
if /i "%%c" == "HKLM" (
|
|
set root=2
|
|
)
|
|
|
|
if /i "%%c" == "HKCU" (
|
|
set root=1
|
|
)
|
|
if not defined root (
|
|
call errmsg.cmd "Root is not HKLM or HKCU for %%b registry entry
|
|
goto errend
|
|
)
|
|
|
|
set key=%%d
|
|
set name=
|
|
if /i "%%e" NEQ "none" set name=%%e
|
|
set value=
|
|
if /i "%%f" NEQ "none" set value=%%f
|
|
set condition=%%g
|
|
set filenamekey=DBG_REG_%%c.!guidlet!
|
|
|
|
echo !component! !guid! !CurInstallDir! !attributes! !condition! !filenamekey!>>%COMPONEN%
|
|
echo !filenamekey! !root! !key! !name! !value! !component!>>%REGISTRY%
|
|
echo !component! !ModuleSig! ^0>>%MODULECO%
|
|
)
|
|
|
|
if /i "%%a" == "shortcut" (
|
|
call :MungeGUID %%b
|
|
set guid={%%b}
|
|
|
|
set component=!ModuleName!.!guidlet!
|
|
set s_shortcut=DBG_SC.!guidlet!
|
|
set s_directory=%%c
|
|
set s_name=%%d
|
|
set s_target=%%e
|
|
set s_args=
|
|
if /i "%%f" NEQ "none" set s_args=%%f
|
|
set s_desc=%%g
|
|
set s_hotkey=
|
|
if /i "%%h" NEQ "none" set s_hotkey=%%h
|
|
set s_icon=
|
|
if /i "%%i" NEQ "none" set s_icon=%%i
|
|
set s_iconindex=
|
|
if /i "%%j" NEQ "none" set s_iconindex=%%j
|
|
set s_showcmd=
|
|
if /i "%%k" NEQ "none" set s_showcmd=%%k
|
|
set s_wkdir=
|
|
set c_dir=%%l.!ModuleGuidlet!
|
|
if /i "%%l" NEQ "none" (
|
|
set s_wkdir=%%l.!ModuleGuidlet!
|
|
set c_dir=%%l.!ModuleGuidlet!
|
|
)
|
|
if /i "!ModuleName!" EQU "dbgrel" (
|
|
set c_dir=DBG_RELNOTES.!ModuleGuidlet!
|
|
)
|
|
if /i "!ModuleName!" EQU "dbgrel.64" (
|
|
set c_dir=DBG_RELNOTES.!ModuleGuidlet!
|
|
)
|
|
set reg_wkdir=
|
|
if /i "%%m" NEQ "none" set reg_wkdir=%%m.!ModuleGuidlet!]
|
|
|
|
set keypath=DBG_REG_HKCU.!guidlet!
|
|
|
|
echo !s_shortcut! !s_directory! !s_name! !component! !s_target! !s_args! !s_desc! !s_hotkey! !s_icon! !s_iconindex! !s_showcmd! !s_wkdir!>>%SHORTCUT%
|
|
echo !component! !guid! !c_dir! 4 !keypath!>>%COMPONEN%
|
|
echotime /N "!keypath! 1 Software\Microsoft\DebuggingTools !s_desc! !reg_wkdir! !component!">>%REGISTRY%
|
|
)
|
|
)
|
|
)
|
|
|
|
REM Process the last module
|
|
if /i NOT "!ModuleName!" == "none" (
|
|
if /i "!skippingmodule!" == "no" (
|
|
|
|
REM For this architecture there may be no files in this
|
|
REM MergeModule. If this is the case don't finish it
|
|
|
|
if /i "!FilesExist!" == "yes" (
|
|
call :FinishMergeModule
|
|
)
|
|
|
|
REM Finish the makefile
|
|
if /i "!PrevFile!" NEQ "none" (
|
|
echo !PrevFile!>>%MAKEFILE%>>%MAKEFILE%
|
|
echo makecab /F %DDFDir%\!ModuleName!.ddf>>%MAKEFILE%
|
|
echo.>>%MAKEFILE%
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
REM Merge the media table into the msi
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %MSIDIR%\%MSINAME%.msi %IDTDIR% media.idt
|
|
|
|
REM Add all the dependencies to the feature components table
|
|
call :AddInstallationDependencies %MSIDIR%\%MSINAME%.msi %MSIIDTDIR%
|
|
|
|
REM Set the component attribute to 256 for ia64 binaries
|
|
call :FixComponentAttributes %MSIDIR%\%MSINAME%.msi %MSIIDTDIR%
|
|
|
|
REM Fix the feature table if this is ia64
|
|
call :FixFeatureTable %MSIDIR%\%MSINAME%.msi %MSIIDTDIR%
|
|
|
|
REM Add Components for features
|
|
call :AddComponentsForFeatures %MSIDIR%\%MSINAME%.msi %MSIIDTDIR%
|
|
|
|
REM Copy dbg.msi to %_NTTREE%\dbg\dbg.msi
|
|
copy %MSIDIR%\%MSINAME%.msi %DESTDIR%\%MSINAME%.msi > nul
|
|
|
|
REM
|
|
REM Convert this to the dbg.msi that goes on the Symbolcd
|
|
REM
|
|
|
|
copy %MSIDIR%\%MSINAME%.msi %CDMSIDIR%\%MSINAME%.msi > nul
|
|
|
|
REM Give every package that gets generated, a new product
|
|
REM and package code. MSI will always think its upgrading
|
|
|
|
call :UpdateProductCode %CDMSIDIR%\%MSINAME%.msi %CDMSIIDTDIR%
|
|
call :UpdatePackageCode %CDMSIDIR%\%MSINAME%.msi %CDMSIIDTDIR%
|
|
|
|
REM Fix the install mode so that it doesn't force all files to
|
|
REM install, but rather goes by the version.
|
|
|
|
call :DefaultInstallMode %CDMSIDIR%\%MSINAME%.msi %CDMSIIDTDIR%
|
|
|
|
REM Remove the Internal extensions
|
|
call :RemoveInternalExtensions %CDMSIDIR%\%MSINAME%.msi %CDMSIIDTDIR%
|
|
|
|
REM
|
|
REM Convert this to the dbg_oem.msi that goes to kanalyze
|
|
REM
|
|
|
|
if /i "%CurArch%" == "i386" (
|
|
copy %MSIDIR%\%MSINAME%.msi %CDMSIDIR%\%OEMNAME%.msi > nul
|
|
|
|
REM Give every package that gets generated, a new product
|
|
REM and package code. MSI will always think its upgrading
|
|
|
|
call :UpdateProductCode %CDMSIDIR%\%OEMNAME%.msi %CDMSIIDTDIR%
|
|
call :UpdatePackageCode %CDMSIDIR%\%OEMNAME%.msi %CDMSIIDTDIR%
|
|
|
|
REM Fix the install mode so that it doesn't force all files to
|
|
REM install, but rather goes by the version.
|
|
|
|
call :DefaultInstallMode %CDMSIDIR%\%OEMNAME%.msi %CDMSIIDTDIR%
|
|
|
|
REM Remove the Internal extensions
|
|
call :RemoveInternalExtensions %CDMSIDIR%\%OEMNAME%.msi %CDMSIIDTDIR%
|
|
)
|
|
|
|
)
|
|
|
|
|
|
REM
|
|
REM Create all the cabs
|
|
REM
|
|
|
|
:CreateCabs
|
|
|
|
if NOT EXIST %CABDIR% md %CABDIR%
|
|
if NOT EXIST %DDFDIR%\temp md %DDFDIR%\temp
|
|
|
|
if /i EXIST %DDFDir%\temp\*.txt del /f /q %DDFDir%\temp\*.txt
|
|
|
|
for /F "tokens=1" %%a in (%CABLIST%) do (
|
|
sleep 1
|
|
start "PB_SymCabGen %%a" /MIN cmd /c "%RazzleToolPath%\PostBuildScripts\SymCabGen.cmd -f:%%a.CABinet -s:%DDFDir% -t:CAB -d:%CABDIR%"
|
|
)
|
|
|
|
call logmsg.cmd "Waiting for symbol cabs to finish ... "
|
|
:wait
|
|
sleep 5
|
|
if EXIST %DDFDir%\temp\*.txt goto wait
|
|
|
|
:Verify
|
|
|
|
REM
|
|
REM Verify that all the cabs are there
|
|
REM
|
|
|
|
set AllCreated=TRUE
|
|
call logmsg.cmd "Verifying that all the cabs got created ..."
|
|
for /F "tokens=1" %%a in ( %CABLIST% ) do (
|
|
if NOT EXIST %CABDIR%\%%a.CABinet (
|
|
set AllCreated=FALSE
|
|
call logmsg.cmd "%CABDIR%\%%a.CABinet didn't get created "
|
|
)
|
|
)
|
|
|
|
if /i "%AllCreated%" == "FALSE" goto errend
|
|
|
|
call logmsg.cmd "All cabs were created"
|
|
|
|
:EndCreateCabs
|
|
|
|
REM
|
|
REM Put the cabs into the merge modules, and the msi files.
|
|
REM The private files go into the msi in
|
|
|
|
call logmsg.cmd "Add the cabs to the msi's and the merge modules"
|
|
|
|
for /f %%a in (%CABLIST%) do (
|
|
|
|
call logmsg " Adding %%a.CABinet"
|
|
set found=no
|
|
set match=0
|
|
if /i "%%a" EQU "dbgdoc" set match=1
|
|
if /i "%%a" EQU "dbgdoc.64" set match=1
|
|
if /i "%%a" EQU "dbgtriage" set match=1
|
|
if /i "%%a" EQU "dbgtriage.64" set match=1
|
|
|
|
if /i "!match!" EQU "1" (
|
|
|
|
REM Put the public one into the merge module
|
|
REM and the retail package
|
|
REM and the OEM package
|
|
msidb.exe -d %MSMDIR%\%%a.msm -a %CABDIR%\%%a.CABinet >nul
|
|
msidb.exe -d %CDMSIDIR%\%MSINAME%.msi -a %CABDIR%\%%a.CABinet >nul
|
|
|
|
if /i "%CurArch%" EQU "i386" (
|
|
msidb.exe -d %CDMSIDIR%\%OEMNAME%.msi -a %CABDIR%\%%a.CABinet >nul
|
|
)
|
|
|
|
REM Put the private one into the internal msi
|
|
msidb.exe -d %DESTDIR%\%MSINAME%.msi -a %DOCDIR%\%%a.CABinet >nul
|
|
set found=yes
|
|
)
|
|
|
|
set match=0
|
|
if /i "%%a" EQU "dbgntsd" set match=1
|
|
if /i "%%a" EQU "dbgntsd.64" set match=1
|
|
if /i "%%a" EQU "dbgextp" set match=1
|
|
if /i "%%a" EQU "dbgextp.64" set match=1
|
|
|
|
if /i "!match!" EQU "1" (
|
|
REM This only goes in the internal msi
|
|
msidb.exe -d %DESTDIR%\%MSINAME%.msi -a %CABDIR%\%%a.CABinet% >nul
|
|
set found=yes
|
|
)
|
|
|
|
if /i "%%a" EQU "dbgrel" (
|
|
|
|
REM Put the x86 one into the merge module
|
|
REM and the retail package and the internal package
|
|
msidb.exe -d %MSMDIR%\%%a.msm -a %CABDIR%\%%a.CABinet >nul
|
|
msidb.exe -d %CDMSIDIR%\%MSINAME%.msi -a %CABDIR%\%%a.CABinet >nul
|
|
msidb.exe -d %DESTDIR%\%MSINAME%.msi -a %CABDIR%\%%a.CABinet >nul
|
|
|
|
REM Put the oem one into the oem msi
|
|
msidb.exe -d %CDMSIDIR%\%OEMNAME%.msi -a %DOCDIR%\%%a.CABinet >nul
|
|
set found=yes
|
|
)
|
|
|
|
if /i "!found!" EQU "no" (
|
|
|
|
REM Put this into the merge module, the retail msi and the internal msi
|
|
REM and the OEM package
|
|
msidb.exe -d %MSMDIR%\%%a.msm -a %CABDIR%\%%a.CABinet >nul
|
|
msidb.exe -d %CDMSIDIR%\%MSINAME%.msi -a %CABDIR%\%%a.CABinet >nul
|
|
|
|
if /i "%CurArch%" EQU "i386" (
|
|
msidb.exe -d %CDMSIDIR%\%OEMNAME%.msi -a %CABDIR%\%%a.CABinet >nul
|
|
)
|
|
msidb.exe -d %DESTDIR%\%MSINAME%.msi -a %CABDIR%\%%a.CABinet >nul
|
|
set found=yes
|
|
)
|
|
)
|
|
|
|
:CreateSelfExtractingExe
|
|
|
|
REM Create the self-extracting exes for the web page release
|
|
REM
|
|
|
|
call logmsg "Creating %SDKDIR%\%MSINAME%.exe ...
|
|
|
|
if exist %WEBDIR%\%MSINAME%.exe del /f %WEBDIR%\%MSINAME%.exe
|
|
cl -DTARGET=%WEBDIR%\%MSINAME%.exe -DEXENAME=%MSINAME%.exe -DAPP="msiexec /i %MSINAME%.msi" -DMSINAME=%MSINAME%.msi -DMSIDIR=%CDMSIDIR% -EP %MSIDIR%\dbgx.sed > %MSIDIR%\dbg.sed
|
|
iexpress.exe /n %MSIDIR%\dbg.sed /q /m >nul 2>nul
|
|
|
|
if not exist %WEBDIR%\%MSINAME%.exe (
|
|
call errmsg "Errors creating the self-extracting exe %SDKDIR%\%MSINAME%.exe"
|
|
)
|
|
|
|
goto DbgFinished
|
|
|
|
|
|
REM
|
|
REM Subroutines
|
|
REM
|
|
|
|
:FinishMergeModule
|
|
|
|
if exist %MSMDIR%\%ModuleName%.msm del %MSMDIR%\%ModuleName%.msm
|
|
if /i "%ModuleName%" EQU "dbgem" (
|
|
copy %MSIDIR%\dbgemx.msm %MSMDIR%\%ModuleName%.msm > nul
|
|
|
|
) else (
|
|
copy %MSIDIR%\dbgx.msm %MSMDIR%\%ModuleName%.msm > nul
|
|
)
|
|
|
|
for %%a in (componen featurec file moduleco modulesi registry shortcut) do (
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %MSMDIR%\!ModuleName!.msm %IDTDIR% %%a.idt
|
|
)
|
|
|
|
REM Don't merge the directory table into dbgemx.msm
|
|
if /i "%ModuleName%" NEQ "dbgem" (
|
|
for %%a in ( director) do (
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %MSMDIR%\!ModuleName!.msm %IDTDIR% %%a.idt
|
|
)
|
|
)
|
|
|
|
)
|
|
|
|
REM Update the merge module with the correct file versions and sizes
|
|
REM
|
|
|
|
call logmsg "msifiler.exe -v -d %MSMDIR%\%ModuleName%.msm -s !CurSrcDir!"
|
|
msifiler.exe -v -d %MSMDIR%\%ModuleName%.msm -s !CurSrcDir!\ >nul
|
|
|
|
REM Merge the merge module into the msi
|
|
|
|
call logmsg.cmd "Merging !ModuleName!.msm"
|
|
call cscript.exe %TOOLPATH%\wimsmmerge.vbs //nologo %MSIDIR%\%MSINAME%.msi !MSMDIR!\!ModuleName!.msm !MergeFeature! %MergeParent% %LOGFILE%
|
|
|
|
REM Add the correct line to the media table
|
|
|
|
if EXIST %MSIIDTDIR%\file.idt del %MSIIDTDIR%\file.idt
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %MSIDIR%\%MSINAME%.msi %MSIIDTDIR% File
|
|
|
|
REM Figure out which number is currently the highest sequence in the file table
|
|
|
|
set /a lastsequence="0"
|
|
for /f "tokens=1,2,3,4,5,6,7,8 delims= " %%a in (%MSIIDTDIR%\File.idt) do (
|
|
|
|
set /a curlastsequence="0"
|
|
|
|
REM Some of the fields could be empty so get the last token
|
|
|
|
set found=no
|
|
for %%z in (%%h %%g %%f %%e %%d %%c %%b %%a) do (
|
|
if "!found!" == "no" (
|
|
set /a curlastsequence="%%z"
|
|
set found=yes
|
|
)
|
|
)
|
|
|
|
if !curlastsequence! GTR !lastsequence! (
|
|
set /a lastsequence="!curlastsequence!"
|
|
)
|
|
)
|
|
|
|
echo !modulecount! !lastsequence! #!ModuleName!.CABinet >>%MEDIA%
|
|
|
|
REM Create the cabs and put them into the msm's and also the msi
|
|
REM If this is the doc cab, make one for the private and for retail
|
|
|
|
set match=0
|
|
if /i "!ModuleName!" == "dbgdoc" set match=1
|
|
if /i "!ModuleName!" == "dbgdoc.64" set match=1
|
|
|
|
if /i "!match!" == "1" (
|
|
|
|
REM Make the private debugger doc cab and save it to %DOCDIR%\dbgdoc.CABinet
|
|
|
|
copy %DOCDIR%\%PRICHM% %_NTTREE%\dbg\files\bin\debugger.chm > nul
|
|
copy %DOCDIR%\%PRICHI% %_NTTREE%\dbg\files\bin\debugger.chi > nul
|
|
|
|
call logmsg.cmd "Creating private debugger documentation cab"
|
|
makecab /f %DDFDIR%\!ModuleName!.ddf > nul
|
|
if /i not exist !CABDIR!\!ModuleName!.CABinet (
|
|
call errmsg.cmd "Error creating !CABDIR!\!ModuleName!.CABinet"
|
|
set DbgErrors=yes
|
|
goto :EOF
|
|
)
|
|
|
|
copy !CABDIR!\!ModuleName!.CABinet %DOCDIR%\!ModuleName!.CABinet > nul
|
|
del /f /q !cABDIR!\!ModuleName!.CABinet
|
|
|
|
REM Now, get ready to make the public debugger doc cabinet
|
|
del /f /q %_NTTREE%\dbg\files\bin\debugger.chm
|
|
del /f /q %_NTTREE%\dbg\files\bin\debugger.chi
|
|
|
|
REM Now, get ready to make the public debugger doc cabinet
|
|
if not exist %DOCDIR%\debugger.chm (
|
|
call errmsg.cmd "Debugger.chm must be binplaced to %DOCDIR%"
|
|
goto :EOF
|
|
)
|
|
|
|
if not exist %DOCDIR%\debugger.chi (
|
|
call errmsg.cmd "Debugger.chi must be binplaced to %DOCDIR%"
|
|
goto :EOF
|
|
)
|
|
|
|
copy %DOCDIR%\debugger.chm %_NTTREE%\dbg\files\bin\debugger.chm > nul
|
|
copy %DOCDIR%\debugger.chi %_NTTREE%\dbg\files\bin\debugger.chi > nul
|
|
)
|
|
|
|
set match=0
|
|
if /i "!ModuleName!" == "dbgrel" set match=1
|
|
|
|
if /i "!match!" == "1" (
|
|
|
|
REM Make the oem relnote cab with the oem redist.txt
|
|
REM and save it to %DOCDIR%\dbgrel_oem.CABinet
|
|
|
|
copy %DOCDIR%\redist_oem.txt %_NTTREE%\dbg\files\redist.txt > nul
|
|
|
|
call logmsg.cmd "Creating OEM release notes cab"
|
|
makecab /f %DDFDIR%\!ModuleName!.ddf > nul
|
|
if /i not exist !CABDIR!\!ModuleName!.CABinet (
|
|
call errmsg.cmd "Error creating !CABDIR!\!ModuleName!.CABinet"
|
|
set DbgErrors=yes
|
|
goto :EOF
|
|
)
|
|
|
|
copy !CABDIR!\!ModuleName!.CABinet %DOCDIR%\!ModuleName!.CABinet > nul
|
|
del /f /q !cABDIR!\!ModuleName!.CABinet
|
|
|
|
REM Now, get ready to make the public release notes cabinet
|
|
del /f /q %_NTTREE%\dbg\files\redist.txt
|
|
copy %DOCDIR%\redist_x86.txt %_NTTREE%\dbg\files\redist.txt > nul
|
|
)
|
|
|
|
set match=0
|
|
if /i "!ModuleName!" == "dbgrel.64" set match=1
|
|
|
|
if /i "!match!" == "1" (
|
|
REM Now, get ready to make the public release notes cabinet
|
|
del /f /q %_NTTREE%\dbg\files\redist.txt
|
|
copy %DOCDIR%\redist_ia64.txt %_NTTREE%\dbg\files\redist.txt > nul
|
|
)
|
|
|
|
set match=0
|
|
if /i "!ModuleName!" == "dbgtriage" set match=1
|
|
if /i "!ModuleName!" == "dbgtriage.64" set match=1
|
|
|
|
if /i "!match!" == "1" (
|
|
|
|
REM Make the private cab and save it to %DOCDIR%\dbgtriage.CABinet
|
|
|
|
copy %SDXROOT%\stress\wsstress\tools\triage\triage.ini %_NTTREE%\dbg\files\bin\triage\triage.ini > nul
|
|
copy %DOCDIR%\pooltag.pri %_NTTREE%\dbg\files\bin\triage\pooltag.txt > nul
|
|
|
|
call logmsg.cmd "Creating private triage cab"
|
|
makecab /f %DDFDIR%\!ModuleName!.ddf > nul
|
|
if /i not exist !CABDIR!\!ModuleName!.CABinet (
|
|
call errmsg.cmd "Error creating !CABDIR!\!ModuleName!.CABinet"
|
|
set DbgErrors=yes
|
|
goto :EOF
|
|
)
|
|
|
|
copy !CABDIR!\!ModuleName!.CABinet %DOCDIR%\!ModuleName!.CABinet > nul
|
|
del /f /q !CABDIR!\!ModuleName!.CABinet
|
|
|
|
REM Now, get ready to make the public dbgtriage cabinet
|
|
del /f /q %_NTTREE%\dbg\files\bin\triage\pooltag.txt
|
|
del /f /q %_NTTREE%\dbg\files\bin\triage\triage.ini
|
|
|
|
REM Now, get ready to make the public debugger doc cabinet
|
|
if not exist %DOCDIR%\pooltag.txt (
|
|
call errmsg.cmd "Public pooltag.txt must be binplaced to %DOCDIR%"
|
|
goto :EOF
|
|
)
|
|
|
|
if not exist %DOCDIR%\triage.ini (
|
|
call errmsg.cmd "Public triage.ini must be binplaced to %DOCDIR%"
|
|
goto :EOF
|
|
)
|
|
|
|
copy %DOCDIR%\pooltag.txt %_NTTREE%\dbg\files\bin\triage\pooltag.txt > nul
|
|
copy %DOCDIR%\triage.ini %_NTTREE%\dbg\files\bin\triage\triage.ini > nul
|
|
)
|
|
|
|
:EndFinishMergeModule
|
|
goto :EOF
|
|
|
|
:CreateIDTHeaders
|
|
echo Component ComponentId Directory_ Attributes Condition KeyPath>%COMPONEN%
|
|
echo s72 S38 s72 i2 S255 S72>>%COMPONEN%
|
|
echo Component Component>>%COMPONEN%
|
|
|
|
echo Directory Directory_Parent DefaultDir>%DIRECTOR%
|
|
echo s72 S72 l255>>%DIRECTOR%
|
|
echo Directory Directory>>%DIRECTOR%
|
|
|
|
echo Feature_ Component_>%FEATUREC%
|
|
echo s32 s72>>%FEATUREC%
|
|
echo FeatureComponents Feature_ Component_>>%FEATUREC%
|
|
|
|
echo File Component_ FileName FileSize Version Language Attributes Sequence>%FILE%
|
|
echo s72 s72 l255 i4 S72 S20 I2 i2>>%FILE%
|
|
echo File File>>%FILE%
|
|
|
|
echo Component ModuleID Language>%MODULECO%
|
|
echo s72 s72 i2>>%MODULECO%
|
|
echo ModuleComponents Component ModuleID Language>>%MODULECO%
|
|
|
|
echo ModuleID Language Version>%MODULESI%
|
|
echo s72 i2 s32>>%MODULESI%
|
|
echo ModuleSignature ModuleID Language>>%MODULESI%
|
|
|
|
echo Shortcut Directory_ Name Component_ Target Arguments Description Hotkey Icon_ IconIndex ShowCmd WkDir>%SHORTCUT%
|
|
echo s72 s128 l128 s128 s72 S255 L255 I2 S72 I2 I2 S72>>%SHORTCUT%
|
|
echo Shortcut Shortcut>>%SHORTCUT%
|
|
|
|
echo Registry Root Key Name Value Component_>%REGISTRY%
|
|
echo s128 i2 l255 L255 L0 s128>>%REGISTRY%
|
|
echo Registry Registry>>%REGISTRY%
|
|
|
|
goto :EOF
|
|
|
|
:CreateMSIHeaders
|
|
|
|
echo DiskId LastSequence DiskPrompt Cabinet VolumeLabel Source>%MEDIA%
|
|
echo i2 i2 L64 S255 S32 S32>>%MEDIA%
|
|
echo Media DiskId>>%MEDIA%
|
|
|
|
goto :EOF
|
|
|
|
|
|
:CreateDDFHeader
|
|
|
|
set CurDDF=%DDFDIR%\%1.ddf
|
|
echo ^.Option Explicit>%CurDDF%
|
|
|
|
echo ^.Set DiskDirectoryTemplate=%CABDIR%>>%CurDDF%
|
|
echo ^.Set CabinetName1=%1.CABinet>>%CurDDF%
|
|
echo ^.Set RptFilename=nul>>%CurDDF%
|
|
echo ^.Set InfFileName=nul>>%CurDDF%
|
|
echo ^.Set InfAttr=>>%CurDDF%
|
|
echo ^.Set MaxDiskSize=CDROM>>%CurDDF%
|
|
echo ^.Set CompressionType=MSZIP>>%CurDDF%
|
|
echo ^.Set CompressionMemory=21>>%CurDDF%
|
|
echo ^.Set CompressionLevel=1 >>%CurDDF%
|
|
echo ^.Set Compress=ON>>%CurDDF%
|
|
echo ^.Set Cabinet=ON>>%CurDDF%
|
|
echo ^.Set UniqueFiles=ON>>%CurDDF%
|
|
echo ^.Set FolderSizeThreshold=1000000>>%CurDDF%
|
|
echo ^.Set MaxErrors=300>>%CurDDF%
|
|
|
|
goto :EOF
|
|
|
|
|
|
:UpdateProductCode
|
|
|
|
REM Update the product code GUID in the property table
|
|
REM
|
|
REM %1 is the msi file
|
|
REM %2 is the msi idt directory
|
|
|
|
call logmsg "Updating the product code GUID in the property table"
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 Property
|
|
|
|
copy %2\Property.idt %2\Property.idt.old > nul
|
|
del /f %2\Property.idt
|
|
|
|
uuidgen.exe -c -o%2\productguid
|
|
for /f "tokens=1" %%a in (%2\productguid) do (
|
|
set NewGuid=%%a
|
|
)
|
|
|
|
call logmsg "ProductCode GUID = !NewGuid!"
|
|
|
|
for /f "tokens=1,2 delims= " %%a in (%2\Property.idt.old) do (
|
|
if /i "%%a" == "ProductCode" (
|
|
echo %%a {%NewGuid%}>>%2\Property.idt
|
|
) else (
|
|
echo %%a %%b>>%2\Property.idt
|
|
)
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 Property.idt
|
|
|
|
goto :EOF
|
|
|
|
:SetUpgradeCode
|
|
|
|
REM Update the upgrade code GUID in the property table
|
|
REM
|
|
REM %1 is the msi file
|
|
REM %2 is the msi idt directory
|
|
|
|
call logmsg "Setting the upgrade code GUID in the property table"
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 Property
|
|
|
|
copy %2\Property.idt %2\Property.idt.old > nul
|
|
del /f %2\Property.idt
|
|
|
|
if /i "!CurArch!" == "i386" (
|
|
set CurUpgradeGUID=AEBA607E-D79B-47EC-9C9B-4B3807853863
|
|
)
|
|
|
|
if /i "!CurArch!" == "ia64" (
|
|
set CurUpgradeGUID=DFA2AD24-BADF-475F-8FBC-DDE7CBB7BFFD
|
|
)
|
|
|
|
|
|
call logmsg "!CurArch! Upgrade Code GUID = !CurUpgradeGUID!"
|
|
|
|
for /f "tokens=1,2 delims= " %%a in (%2\Property.idt.old) do (
|
|
if /i "%%a" == "UpgradeCode" (
|
|
echo %%a {!CurUpgradeGuid!}>>%2\Property.idt
|
|
) else (
|
|
echo %%a %%b>>%2\Property.idt
|
|
)
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 Property.idt
|
|
|
|
REM Update the upgrade code GUID in the Upgrade table
|
|
call logmsg "Updating the upgrade code in the Upgrade table
|
|
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 Upgrade
|
|
|
|
copy %2\Upgrade.idt %2\Upgrade.idt.old > nul
|
|
del /f %2\Upgrade.idt
|
|
|
|
REM
|
|
REM Put the header to the file
|
|
REM Echo the first three lines to the file
|
|
set /a count=1
|
|
for /f "tokens=*" %%a in (%2\upgrade.idt.old) do (
|
|
if !count! LEQ 3 echo %%a>>%2\Upgrade.idt
|
|
set /a count=!count!+1
|
|
)
|
|
|
|
for /f "skip=3 tokens=1,2,3,4,5,6* delims= " %%a in (%2\Upgrade.idt.old) do (
|
|
echo {!CurUpgradeGuid!} %%b %%c %%d %%e %%f>>%2\Upgrade.idt
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 Upgrade.idt
|
|
|
|
goto :EOF
|
|
|
|
|
|
:UpdatePackageCode
|
|
|
|
REM
|
|
REM Update the guid for the package code in the _SummaryInformation table
|
|
REM %1 is the msi file
|
|
REM %2 is the msiidt directory
|
|
|
|
call logmsg "Updating the package code GUID in the _SummaryInformation table"
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 _SummaryInformation
|
|
|
|
copy %2\_SummaryInformation.idt %2\_SummaryInformation.idt.old > nul
|
|
del /f %2\_SummaryInformation.idt
|
|
|
|
uuidgen.exe -c -o%2\packageguid
|
|
for /f "tokens=1" %%a in (%2\packageguid) do (
|
|
set NewGuid=%%a
|
|
)
|
|
|
|
call logmsg "ProductCode GUID (package code) = !NewGuid!"
|
|
|
|
for /f "tokens=1,2 delims= " %%a in (%2\_SummaryInformation.idt.old) do (
|
|
if "%%a" == "9" (
|
|
echo %%a {%NewGuid%}>>%2\_SummaryInformation.idt
|
|
) else (
|
|
echo %%a %%b>>%2\_SummaryInformation.idt
|
|
)
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 _SummaryInformation.idt
|
|
|
|
goto :EOF
|
|
|
|
:SetVersion
|
|
|
|
REM
|
|
REM Update the version in the Property table
|
|
REM and update the version in the Upgrade Table
|
|
REM
|
|
REM %1 is the msi file
|
|
REM %2 is the msiidt directory
|
|
|
|
set ntverp=%CD%\dbg-common\dbgver.h
|
|
if NOT EXIST %ntverp% (echo Can't find dbgver.h.&goto :ErrEnd)
|
|
|
|
for /f "tokens=3 delims=, " %%i in ('findstr /c:"#define VER_PRODUCTMAJORVERSION " %ntverp%') do (
|
|
set /a ProductMajor="%%i"
|
|
set BuildNum=%%i
|
|
)
|
|
|
|
for /f "tokens=3 delims=, " %%i in ('findstr /c:"#define VER_PRODUCTMINORVERSION " %ntverp%') do (
|
|
set /a ProductMinor="%%i"
|
|
set BuildNum=!BuildNum!.%%i
|
|
)
|
|
|
|
for /f "tokens=3" %%i in ('findstr /c:"#define VER_PRODUCTBUILD " %ntverp%') do (
|
|
set /a ProductBuild="%%i"
|
|
set BuildNum=!BuildNum!.%%i
|
|
)
|
|
|
|
for /f "tokens=3" %%i in ('findstr /c:"#define VER_PRODUCTBUILD_QFE " %ntverp%') do (
|
|
set /a ProductQfe="%%i"
|
|
set BuildNum=!BuildNum!.%%i
|
|
)
|
|
|
|
|
|
call logmsg "Updating the ProductVersion to !BuildNum! in the property table"
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 Property
|
|
|
|
copy %2\Property.idt %2\Property.idt.old > nul
|
|
del /f %2\Property.idt
|
|
|
|
for /f "tokens=1,2 delims= " %%a in (%2\Property.idt.old) do (
|
|
if /i "%%a" == "ProductVersion" (
|
|
echo %%a !BuildNum!>>%2\Property.idt
|
|
) else (
|
|
echo %%a %%b>>%2\Property.idt
|
|
)
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 Property.idt
|
|
|
|
call logmsg "Updating the Maximum Upgrade version in the Upgrade table
|
|
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 Upgrade
|
|
|
|
copy %2\Upgrade.idt %2\Upgrade.idt.old > nul
|
|
del /f %2\Upgrade.idt
|
|
|
|
REM
|
|
REM Put the header to the file
|
|
REM Echo the first three lines to the file
|
|
set /a count=1
|
|
for /f "tokens=*" %%a in (%2\upgrade.idt.old) do (
|
|
if !count! LEQ 3 echo %%a>>%2\Upgrade.idt
|
|
set /a count=!count!+1
|
|
)
|
|
|
|
REM
|
|
REM Read in the lines after the header
|
|
REM There are supposed to be 7 fields, but right now the language field
|
|
REM is blank, so it gets skipped.
|
|
REM Echo the line back, but put the buildnum as token three for the maximum
|
|
REM version to upgrade. THen echo two tabs since we are skipping the language
|
|
REM field, which was field four. It was empty, so it didn't get read in as a
|
|
REM token. THen echo the other three tokens
|
|
REM
|
|
REM NOTE: I had problems saying tokens=1,2,3* and echo'ing %%d for the rest of
|
|
REM the line because an extra tab gets written out at the end of the line
|
|
REM
|
|
|
|
REM First figure out what the maximum upgrade build number i
|
|
REM It needs to be less than the current build num
|
|
|
|
if !ProductQfe! GTR 0 (
|
|
set /a ProductQfe="!ProductQfe!-1"
|
|
) else (
|
|
set /a ProductBuild="!ProductBuild!-1"
|
|
)
|
|
|
|
set UpgradeBuildNum=!ProductMajor!.!ProductMinor!.!ProductBuild!.!ProductQfe!
|
|
|
|
for /f "skip=3 tokens=1,2,3,4,5,6* delims= " %%a in (%2\Upgrade.idt.old) do (
|
|
echo %%a %%b !UpgradeBuildNum! %%d %%e %%f>>%2\Upgrade.idt
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 Upgrade.idt
|
|
|
|
goto :EOF
|
|
|
|
|
|
REM
|
|
REM This creates redist_x86.txt and redist_oem.txt in the %DOCDIR% directory
|
|
REM
|
|
|
|
:UpdateRedist
|
|
|
|
if /i "%CurArch%" == "i386" (
|
|
set redist_list=redist_x86 redist_oem
|
|
)
|
|
|
|
if /i "%CurArch%" == "ia64" (
|
|
set redist_list=redist_ia64
|
|
)
|
|
|
|
|
|
for %%a in ( %redist_list% ) do (
|
|
|
|
call logmsg "Fixing %DOCDIR%\%%a.txt to have correct file versions"
|
|
|
|
if /i "%PackageType%" == "retail" (
|
|
if not exist %DOCDIR%\redist.txt (
|
|
call errmsg "%DOCDIR%\redist.txt does not exist."
|
|
goto :EOF
|
|
)
|
|
copy %DOCDIR%\redist.txt %DOCDIR%\%%a.txt
|
|
|
|
REM get dbghelp's version number
|
|
for /f "tokens=5 delims= " %%b in ('filever %SRCDIR%\bin\dbghelp.dll') do (
|
|
set dbghelp_ver=%%b
|
|
)
|
|
call logmsg "dbghelp.dll's file version is !dbghelp_ver!"
|
|
|
|
echotime /N "===================" >> %DOCDIR%\%%a.txt
|
|
echotime /N "DBGHELP.DLL" >> %DOCDIR%\%%a.txt
|
|
echotime /N "===================" >> %DOCDIR%\%%a.txt
|
|
echo. >> %DOCDIR%\%%a.txt
|
|
echotime /N "(1) You may redistribute dbghelp.dll version !dbghelp_ver!" >> %DOCDIR%\%%a.txt
|
|
echo. >> %DOCDIR%\%%a.txt
|
|
|
|
for /f "tokens=5 delims= " %%b in ('filever %SRCDIR%\bin\symsrv.dll') do (
|
|
set symsrv_ver=%%b
|
|
)
|
|
call logmsg "symsrv.dll's file version is !symsrv_ver!"
|
|
|
|
echotime /N "===================" >> %DOCDIR%\%%a.txt
|
|
echotime /N "SYMSRV.DLL" >> %DOCDIR%\%%a.txt
|
|
echotime /N "===================" >> %DOCDIR%\%%a.txt
|
|
echo. >> %DOCDIR%\%%a.txt
|
|
echotime /N "(1) You may redistribute symsrv.dll version !symsrv_ver!" >> %DOCDIR%\%%a.txt
|
|
echo. >> %DOCDIR%\%%a.txt
|
|
|
|
if /i "%%a" == "redist_oem" (
|
|
|
|
for /f "tokens=5 delims= " %%b in ('filever %SRCDIR%\bin\dbgeng.dll') do (
|
|
set dbgeng_ver=%%b
|
|
)
|
|
call logmsg "dbgeng.dll's file version is !dbgeng_ver!"
|
|
|
|
echotime /N "===================" >> %DOCDIR%\%%a.txt
|
|
echotime /N "DBGENG.DLL" >> %DOCDIR%\%%a.txt
|
|
echotime /N "===================" >> %DOCDIR%\%%a.txt
|
|
echo. >> %DOCDIR%\%%a.txt
|
|
echotime /N "(1) You may redistribute dbgeng.dll version !dbgeng_ver!" >> %DOCDIR%\%%a.txt
|
|
echo. >> %DOCDIR%\%%a.txt
|
|
)
|
|
) else (
|
|
echotime /N "This is a Beta package and no files in it are redistributable." > %DOCDIR%\%%a.txt
|
|
|
|
)
|
|
|
|
call logmsg "%DOCDIR%\%%a.txt is finished"
|
|
)
|
|
|
|
|
|
goto :EOF
|
|
|
|
|
|
:DefaultInstallMode
|
|
|
|
REM Update the REINSTALLMODE in the property table
|
|
REM
|
|
REM %1 is the msi file
|
|
REM %2 is the msi idt directory
|
|
|
|
call logmsg "Updating the REINSTALLMODE in the property table"
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 Property
|
|
|
|
copy %2\Property.idt %2\Property.idt.old > nul
|
|
del /f %2\Property.idt
|
|
|
|
for /f "tokens=1,2 delims= " %%a in (%2\Property.idt.old) do (
|
|
if /i "%%a" == "REINSTALLMODE" (
|
|
echo %%a emus>>%2\Property.idt
|
|
) else (
|
|
echo %%a %%b>>%2\Property.idt
|
|
)
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 Property.idt
|
|
|
|
goto :EOF
|
|
|
|
:RemoveInternalExtensions
|
|
|
|
|
|
call logmsg "Removing Internal extensions from the feature table
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 Feature
|
|
|
|
copy %2\Feature.idt %2\Feature.idt.old > nul
|
|
del /f %2\Feature.idt
|
|
|
|
REM
|
|
REM Put the header to the file
|
|
REM Echo the first three lines to the file
|
|
set /a count=1
|
|
for /f "tokens=*" %%a in (%2\Feature.idt.old) do (
|
|
if !count! LEQ 3 echo %%a>>%2\Feature.idt
|
|
set /a count=!count!+1
|
|
)
|
|
|
|
REM
|
|
REM Read in the lines after the header
|
|
REM Look for DBG.DbgExts.Internal and disable it
|
|
|
|
for /f "skip=3 tokens=1,2,3,4,5,6,7* delims= " %%a in (%2\Feature.idt.old) do (
|
|
if /i "%%a" == "DBG.DbgExts.Internal" (
|
|
echo %%a %%b %%c %%d 0 0 %%g>>%2\Feature.idt
|
|
) else (
|
|
|
|
if /i "%%a" == "DBG.NtsdFix.Internal" (
|
|
echo %%a %%b %%c %%d 0 0 %%g>>%2\Feature.idt
|
|
) else (
|
|
|
|
|
|
REM Some feature don't have a parent, so print a tab for the second field
|
|
REM if the last token is a tab or equal to nothing
|
|
if /i "%%g" == " " (
|
|
echo %%a %%b %%c %%d %%e %%f>>%2\Feature.idt
|
|
) else (
|
|
if /i "%%g" == "" (
|
|
echo %%a %%b %%c %%d %%e %%f>>%2\Feature.idt
|
|
) else (
|
|
echo %%a %%b %%c %%d %%e %%f %%g>>%2\Feature.idt
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 Feature.idt
|
|
goto :EOF
|
|
|
|
|
|
:FixFeatureTable
|
|
|
|
if /i "%_BuildArch%" == "ia64" (
|
|
|
|
call logmsg.cmd "Making ia64 specific changes to the feature table"
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 Feature
|
|
|
|
if exist %2\Feature.idt.old del /q %2\Feature.idt.old
|
|
copy %2\Feature.idt %2\Feature.idt.old > nul
|
|
del /f %2\Feature.idt
|
|
|
|
REM
|
|
REM Put the header to the file
|
|
REM Echo the first three lines to the file
|
|
set /a count=1
|
|
for /f "tokens=*" %%a in (%2\Feature.idt.old) do (
|
|
if !count! LEQ 3 echo %%a>>%2\Feature.idt
|
|
set /a count=!count!+1
|
|
)
|
|
|
|
REM
|
|
REM Read in the lines after the header
|
|
REM Look for DBG.DbgExts.Internal and disable it
|
|
|
|
for /f "skip=3 tokens=1,2,3,4,5,6,7* delims= " %%a in (%2\Feature.idt.old) do (
|
|
|
|
set done=no
|
|
if /i "%%a" == "DBG.DbgExts.Nt4Chk" (
|
|
echo %%a %%b %%c %%d 0 0 %%g>>%2\Feature.idt
|
|
set done=yes
|
|
)
|
|
|
|
if /i "%%a" == "DBG.DbgExts.Nt4Fre" (
|
|
echo %%a %%b %%c %%d 0 0 %%g>>%2\Feature.idt
|
|
set done=yes
|
|
)
|
|
|
|
if /i "%%a" == "DBG.DbgExts.Nt5Chk" (
|
|
echo %%a %%b %%c %%d 0 0 %%g>>%2\Feature.idt
|
|
set done=yes
|
|
)
|
|
|
|
if /i "%%a" == "DBG.DbgExts.Nt5Fre" (
|
|
echo %%a %%b %%c %%d 0 0 %%g>>%2\Feature.idt
|
|
set done=yes
|
|
)
|
|
|
|
if /i "%%a" == "DBG.Tools.Em" (
|
|
echo %%a %%b %%c %%d 0 0 %%g>>%2\Feature.idt
|
|
set done=yes
|
|
)
|
|
|
|
if /i "%%a" == "DBG.Docs.Em" (
|
|
echo %%a %%b %%c %%d 0 0 %%g>>%2\Feature.idt
|
|
set done=yes
|
|
)
|
|
|
|
if /i "%%a" == "DBG.Tools.Adplus" (
|
|
echo %%a %%b %%c %%d 0 0 %%g>>%2\Feature.idt
|
|
set done=yes
|
|
)
|
|
|
|
if /i "!done!" == "no" (
|
|
|
|
REM Some features don't have a parent, so print a tab for the second field
|
|
REM if the last token is a tab or equal to nothing
|
|
if /i "%%g" == " " (
|
|
echo %%a %%b %%c %%d %%e %%f>>%2\Feature.idt
|
|
) else (
|
|
if /i "%%g" == "" (
|
|
echo %%a %%b %%c %%d %%e %%f>>%2\Feature.idt
|
|
) else (
|
|
echo %%a %%b %%c %%d %%e %%f %%g>>%2\Feature.idt
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 Feature.idt
|
|
)
|
|
goto :EOF
|
|
|
|
:MungeGUID
|
|
|
|
for /f "tokens=1,2,3,4,5 delims=-" %%m in ("%1") do (
|
|
set guidlet=%%m_%%n_%%o_%%p_%%q
|
|
)
|
|
|
|
goto :EOF
|
|
|
|
|
|
:FixComponentAttributes
|
|
|
|
if /i "%_BuildArch%" == "ia64" (
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 Component
|
|
copy %2\Component.idt %2\Component.idt.old > nul
|
|
del /q %2\Component.idt
|
|
|
|
echo Component ComponentId Directory_ Attributes Condition KeyPath>%2\Component.idt
|
|
echo s72 S38 s72 i2 S255 S72>>%2\Component.idt
|
|
echo Component Component>>%2\Component.idt
|
|
|
|
|
|
for /f "skip=3 tokens=1,2,3,4,5,6* delims= " %%a in (%2\Component.idt.old) do (
|
|
if /i "%%d" == "0" (
|
|
set num4=256
|
|
) else (
|
|
set num4=%%d
|
|
)
|
|
|
|
if "%%f" == "" (
|
|
set num5=
|
|
set num6=%%e
|
|
) else (
|
|
set num5=%%e
|
|
set num6=%%f
|
|
)
|
|
|
|
echotime /N "%%a %%b %%c !num4! !num5! !num6!">>%2\Component.idt
|
|
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 Component.idt
|
|
call logmsg "Set Component attributes to 256 for 64-bit install
|
|
)
|
|
|
|
goto :EOF
|
|
|
|
|
|
REM AddInstallationDependencies
|
|
REM This reads through dbgdata.txt and adds dependencies to the feature components table
|
|
REM
|
|
|
|
:AddInstallationDependencies
|
|
|
|
if exist %2\FeatureComponents.idt del /q %2\FeatureComponents.idt
|
|
if exist %2\FeatureComponents.idt.old del /q %2\Featurecomponents.idt.old
|
|
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 FeatureComponents
|
|
copy %2\FeatureComponents.idt %2\FeatureComponents.idt.old > nul
|
|
|
|
for /f "tokens=1,2,3,4,5 delims=," %%a in (%DATA%) do (
|
|
|
|
REM Decide if this is a correct dependency for this package
|
|
set DoThisDependency=no
|
|
if /i "%%a" == "dependency" (
|
|
if /i "%%b" == "32" (
|
|
if /i "%_BuildArch%" == "x86" (
|
|
set DoThisDependency=yes
|
|
)
|
|
)
|
|
if /i "%%b" == "64" (
|
|
if /i "%_BuildArch%" == "ia64" (
|
|
set DoThisDependency=yes
|
|
)
|
|
)
|
|
if /i "%%b" == "3264" set DoThisDependency=yes
|
|
)
|
|
|
|
|
|
if /i "!DoThisDependency!" == "yes" (
|
|
|
|
REM If this dependency is for a feature, add all the components of this feature
|
|
REM to the feature listed in the dependency table
|
|
|
|
for /f "skip=3 tokens=1,2,3,4* delims= " %%f in (%2\FeatureComponents.idt.old) do (
|
|
if /i "%%f" == "%%d" (
|
|
echotime /N "%%c %%g">>%2\FeatureComponents.idt
|
|
)
|
|
if /i "%%g" == "%%d" (
|
|
echotime /N "%%c %%d">>%2\FeatureComponents.idt
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 FeatureComponents.idt
|
|
goto :EOF
|
|
|
|
|
|
REM
|
|
REM Add components for all the features
|
|
REM
|
|
|
|
:AddComponentsForFeatures
|
|
|
|
call logmsg.cmd "Adding a component for each feature"
|
|
if exist %2\FeatureComponents.idt del /q %2\FeatureComponents.idt
|
|
if exist %2\Component.idt del /q %2\Component.idt
|
|
if exist %2\CreateFolder.idt del /q %2\CreateFolder.idt
|
|
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 FeatureComponents
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 Component
|
|
call cscript.exe %TOOLPATH%\wiexport.vbs //nologo %1 %2 CreateFolder
|
|
|
|
for /f "eol=; tokens=1,2,3,4* delims=," %%a in (%DATA%) do (
|
|
|
|
if /i "%%a" == "feature" (
|
|
if /i "%CurArch%" == "i386" set ThisGuid=%%c
|
|
if /i "%CurArch%" == "ia64" set ThisGuid=%%d
|
|
call :MungeGuid !ThisGuid!
|
|
|
|
echotime /N "%%b %%b.!guidlet!">>%2\FeatureComponents.idt
|
|
echotime /N "INSTDIR %%b.!guidlet!">>%2\CreateFolder.idt
|
|
echo %%b.!guidlet! {!ThisGuid!} INSTDIR 0 >>%2\Component.idt
|
|
|
|
)
|
|
)
|
|
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 FeatureComponents.idt
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 Component.idt
|
|
call cscript.exe %TOOLPATH%\wiimport.vbs //nologo %1 %2 CreateFolder.idt
|
|
|
|
goto :EOF
|
|
|
|
|
|
:DbgFinished
|
|
if /i "%DbgErrors%" == "yes" goto errend
|
|
|
|
if NOT EXIST %DESTDIR%\%MSINAME%.msi (
|
|
call errmsg "%DESTDIR%\%MSINAME%.msi is missing"
|
|
goto errend
|
|
)
|
|
goto end
|
|
|
|
|
|
REM **************************************************************************
|
|
REM Usage
|
|
REM
|
|
REM **************************************************************************
|
|
|
|
:Usage
|
|
|
|
echo Usage:
|
|
echo debuggers.cmd ^[ template ^| full ^| update ^]
|
|
echo.
|
|
echo template Builds the package without cabs
|
|
echo full Builds the full package (default)
|
|
echo update Does an incremental build of the cabs
|
|
echo.
|
|
|
|
goto errend
|
|
|
|
REM *********************
|
|
REM End of debugger code
|
|
REM *********************
|
|
|
|
REM **********************************************************
|
|
REM
|
|
REM Template
|
|
REM
|
|
REM **********************************************************
|
|
|
|
:MAIN
|
|
|
|
REM
|
|
REM Define SCRIPT_NAME. Used by the logging scripts.
|
|
REM
|
|
|
|
for %%i in (%0) do set script_name=%%~ni.cmd
|
|
|
|
REM
|
|
REM Save the command line.
|
|
REM
|
|
|
|
set cmdline=%script_name% %*
|
|
|
|
REM
|
|
REM Define LOGFILE, to be used by the logging scripts.
|
|
REM As the build rule scripts are typically invoked from wrappers (congeal.cmd),
|
|
REM LOGFILE is already defined.
|
|
REM
|
|
REM Do not redefine LOGFILE if already defined.
|
|
REM
|
|
|
|
if defined LOGFILE goto logfile_defined
|
|
if not exist %tmp% md %tmp%
|
|
for %%i in (%script_name%) do (
|
|
set LOGFILE=%tmp%\%%~ni.log
|
|
)
|
|
if exist %LOGFILE% del /f %LOGFILE%
|
|
:logfile_defined
|
|
|
|
REM
|
|
REM Create a temporary file, to be deleted when the script finishes its execution.
|
|
REM The existence of the temporary file tells congeal.cmd that this script is still running.
|
|
REM Before the temporary file is deleted, its contents are appended to LOGFILE.
|
|
REM International builds define tmpfile based on language prior to calling the US build
|
|
REM rule script, so that multiple languages can run the same build rule script concurrently.
|
|
REM
|
|
REM Do not redefine tmpfile if already defined.
|
|
REM
|
|
|
|
if defined tmpfile goto tmpfile_defined
|
|
if not exist %tmp% md %tmp%
|
|
for %%i in (%script_name%) do (
|
|
set tmpfile=%tmp%\%%~ni.tmp
|
|
)
|
|
if exist %tmpfile% del /f %tmpfile%
|
|
:tmpfile_defined
|
|
|
|
set LOGFILE_BAK=%LOGFILE%
|
|
set LOGFILE=%tmpfile%
|
|
|
|
REM
|
|
REM Mark the beginning of script's execution.
|
|
REM
|
|
|
|
call logmsg.cmd /t "START %cmdline%"
|
|
|
|
REM
|
|
REM Execute the build rule option.
|
|
REM
|
|
|
|
call :BeginBuildPackage
|
|
if errorlevel 1 (set /A ERRORS=%errorlevel%) else (set /A ERRORS=0)
|
|
|
|
REM
|
|
REM Mark the end of script's execution.
|
|
REM
|
|
|
|
call logmsg.cmd /t "END %cmdline% (%ERRORS% errors)"
|
|
|
|
set LOGFILE=%LOGFILE_BAK%
|
|
|
|
REM
|
|
REM Append the contents of tmpfile to logfile, then delete tmpfile.
|
|
REM
|
|
|
|
type %tmpfile% >> %LOGFILE%
|
|
del /f %tmpfile%
|
|
|
|
echo.& echo %script_name% : %ERRORS% errors : see %LOGFILE%.
|
|
|
|
if "%ERRORS%" == "0" goto end_main
|
|
goto errend_main
|
|
|
|
|
|
:end_main
|
|
endlocal
|
|
goto end
|
|
|
|
|
|
:errend_main
|
|
endlocal
|
|
goto errend
|
|
|
|
|
|
:ExecuteCmd
|
|
REM Do not use setlocal/endlocal:
|
|
REM for ex., if the command itself is "pushd",
|
|
REM a "popd" will be executed automatically at the end.
|
|
|
|
set cmd_bak=cmd
|
|
set cmd=%1
|
|
REM Remove the quotes
|
|
set cmd=%cmd:~1,-1%
|
|
if "%cmd%" == "" (
|
|
call errmsg.cmd "internal error: no parameters for ExecuteCmd %1."
|
|
set cmd=cmd_bak& goto errend
|
|
)
|
|
|
|
REM Run the command.
|
|
call logmsg.cmd "Running %cmd%."
|
|
%cmd%
|
|
if not "%errorlevel%" == "0" (
|
|
call errmsg.cmd "%cmd% failed."
|
|
set cmd=%cmd_bak%& goto errend
|
|
)
|
|
set cmd=cmd_bak
|
|
goto end
|
|
|
|
|
|
:errend
|
|
seterror.exe 1
|
|
goto :EOF
|
|
|
|
|
|
:end
|
|
seterror.exe 0
|
|
goto :EOF
|
|
|
|
|
|
REM END
|