300 lines
8.5 KiB
Batchfile
300 lines
8.5 KiB
Batchfile
|
@if "%_echo%"=="" echo off
|
||
|
|
||
|
if "%1" == "" goto usage
|
||
|
if "%2" == "" goto usage
|
||
|
if "%3" == "" goto usage
|
||
|
if "%4" == "" goto usage
|
||
|
if "%5" == "" goto usage
|
||
|
if "%6" == "" goto usage
|
||
|
if "%7" == "" goto usage
|
||
|
if not "%8" == "" goto usage
|
||
|
|
||
|
|
||
|
rem patchpath is the root of the patch build directory.
|
||
|
|
||
|
set patchpath=f:\xppatch
|
||
|
set Product=wxp
|
||
|
set OtherReleases=2600
|
||
|
|
||
|
rem %1 = base name of this config file
|
||
|
|
||
|
rem %2 = Q######
|
||
|
|
||
|
set QNumber=%2
|
||
|
if "%QNumber:~0,1%" == "q" set QNumber=Q%QNumber:~1%
|
||
|
if not "%QNumber:~0,1%" == "Q" goto badQNumber
|
||
|
goto goodQNumber
|
||
|
|
||
|
:badQNumber
|
||
|
|
||
|
echo Unexpected QNumber "%2"
|
||
|
goto failed
|
||
|
|
||
|
:goodQNumber
|
||
|
|
||
|
rem %3 = language
|
||
|
|
||
|
set ISOLang=
|
||
|
for /f "tokens=1,2,3,4,7 delims=, " %%f in (%~dp0\language.lst) do call :CheckLanguage %3 %%f %%g %%h %%i %%j
|
||
|
if not "%ISOLang%" == "" goto goodLanguage
|
||
|
|
||
|
:badLanguage
|
||
|
|
||
|
echo Unexpected Language "%3"
|
||
|
goto failed
|
||
|
|
||
|
:goodLanguage
|
||
|
|
||
|
rem %4 = platform
|
||
|
|
||
|
set Platform=i386
|
||
|
if /i "%4" == "x86" goto goodPlatform
|
||
|
if /i "%4" == "i386" goto goodPlatform
|
||
|
set Platform=ia64
|
||
|
if /i "%4" == "ia64" goto goodPlatform
|
||
|
set Platform=nec98
|
||
|
if /i "%4" == "nec98" if %ISOLang% == JA goto goodPlatform
|
||
|
|
||
|
:badPlatform
|
||
|
|
||
|
echo Unexpected Platform "%4"
|
||
|
goto failed
|
||
|
|
||
|
:goodPlatform
|
||
|
|
||
|
rem %5 = bug#
|
||
|
|
||
|
set BugNumber=%5
|
||
|
|
||
|
rem %6 = SP#
|
||
|
|
||
|
set SPNumber=%6
|
||
|
if /i "%SPNumber:~0,2%" == "SP" set SPNumber=SP%SPNumber:~2%
|
||
|
if "%SPNumber:~0,2%" == "SP" goto goodSPNumber
|
||
|
|
||
|
:badSPNumber
|
||
|
|
||
|
echo Unexpected SPNumber "%6" (format: "SP#")
|
||
|
goto failed
|
||
|
|
||
|
:goodSPNumber
|
||
|
|
||
|
rem %7 = release code
|
||
|
|
||
|
set RelCode=test
|
||
|
if /i "%7" == "test" goto goodRelCode
|
||
|
set RelCode=beta
|
||
|
if /i "%7" == "beta" goto goodRelCode
|
||
|
set RelCode=rtm
|
||
|
if /i "%7" == "rtm" goto goodRelCode
|
||
|
|
||
|
:badRelCode
|
||
|
|
||
|
echo Unexpected release code "%7" (expected test, beta, or rtm)
|
||
|
goto failed
|
||
|
|
||
|
:goodRelCode
|
||
|
|
||
|
|
||
|
rem newbuild is the name of the directory where the current build's
|
||
|
rem compressed files can be found.
|
||
|
|
||
|
set newbuild=%ReleaseShare%\%SPNumber%\%BugNumber%\2600\free\%CPRLang%\%Platform%
|
||
|
|
||
|
rem newexe is the name of the self-extracting EXE containing the new build
|
||
|
|
||
|
set newexe=%QNumber%_%Product%_%SPNumber%_%Platform:i386=x86%_%CPRLang%.exe
|
||
|
|
||
|
rem servername is the name of the pstream server
|
||
|
rem This forms part of the URL in the built file update.url.
|
||
|
rem No build-machine entry is required here unless you will prop your
|
||
|
rem build, but to a machine other than the build machine.
|
||
|
|
||
|
set servername=%ComputerName%
|
||
|
if /i %ComputerName%==msliger0 set servername=msliger7
|
||
|
if /i %RelCode%=="rtm" set servername=ntservicepack.microsoft.com
|
||
|
|
||
|
rem psfroot is the destination path for built PSF files
|
||
|
rem A specific build-machine entry is required here only if you want to prop your build.
|
||
|
|
||
|
if /i %ComputerName%==winsebld set psfroot=d:\psfroot\xp
|
||
|
if /i %ComputerName%==msliger0 set psfroot=\\%servername%\psfroot$\xp
|
||
|
if /i %ComputerName%==msliger3 set psfroot=c:\psfroot\xp
|
||
|
|
||
|
rem wwwroot is the destination path for built EXE files
|
||
|
rem A specific build-machine entry is required here only if you want to prop your build.
|
||
|
|
||
|
if /i %ComputerName%==winsebld set wwwroot=d:\wwwroot\hotfix_xp
|
||
|
if /i %ComputerName%==msliger0 set wwwroot=\\%servername%\wwwroot$\hotfix_xp
|
||
|
if /i %ComputerName%==msliger3 set wwwroot=c:\wwwroot\hotfix_xp
|
||
|
|
||
|
rem patchbuild is the directory where the finished files will go.
|
||
|
|
||
|
set patchbuild=%patchpath%\build\%Language%\%BugNumber%\%Platform%
|
||
|
|
||
|
rem patchtemp is a directory where intermediate files are built.
|
||
|
|
||
|
set patchtemp=%patchpath%\temp\%Language%
|
||
|
|
||
|
rem logpath is the name of the directory where log files go.
|
||
|
|
||
|
set logpath=%patchbuild%\logs
|
||
|
|
||
|
rem loglinkpath is the name of the directory of the link to the latest log files.
|
||
|
|
||
|
set loglinkpath=%patchpath%\build\%Language%
|
||
|
|
||
|
rem forest is the name of the directory where all patch reference
|
||
|
rem files (from previous and current build) can be found. Ideally,
|
||
|
rem there will be a manifest file at the base of each tree in the forest.
|
||
|
|
||
|
set forest=%patchpath%\forest\%Language%\%Platform%
|
||
|
|
||
|
rem newfiles is the name of the directory where all the current
|
||
|
rem build's files (fully uncompressed) can be located. Every file named
|
||
|
rem in the sourcelist must exist in this directory.
|
||
|
|
||
|
set newfiles=%forest%\stage\%BugNumber%
|
||
|
|
||
|
rem patching is the name of the override directory where the
|
||
|
rem current build's patch-only files (update.url and patching
|
||
|
rem flavor of update.ver) can be located. Any file found in
|
||
|
rem in this directory will override the file from newfiles.
|
||
|
|
||
|
set patching=%patchtemp%
|
||
|
|
||
|
rem psfname is the full pathname of the PSF
|
||
|
|
||
|
set psfname=%patchbuild%\%QNumber%.%Platform%.%Language%.psf
|
||
|
|
||
|
rem cablist is the list of cab files which can be built from update.url
|
||
|
|
||
|
set cablist=
|
||
|
|
||
|
rem template is the full pathname of updateurl.template
|
||
|
|
||
|
set template=%bldtools%\hotfixurl.template
|
||
|
|
||
|
rem patchexe is the name of the patch EXE to be produced
|
||
|
|
||
|
set patchexe=patch.%QNumber%.%Platform%.%Language%.exe
|
||
|
if %RelCode%==test set patchexe=%patchbuild%\%patchexe%
|
||
|
if %RelCode%==beta set patchexe=%patchbuild%\beta\%patchexe%
|
||
|
if %RelCode%==rtm set patchexe=%patchbuild%\rtw\%patchexe%
|
||
|
|
||
|
rem patchddf is the name of the patch DDF to be produced.
|
||
|
|
||
|
set patchddf=%patchtemp%\patch.ddf
|
||
|
|
||
|
rem patchcab is the name of the patch CAB to be produced.
|
||
|
|
||
|
set patchcab=%patchtemp%\patch.cab
|
||
|
|
||
|
rem stubexe is the full pathname of the self-extracting stub.
|
||
|
|
||
|
rem set stubexe=%bldtools%\%ISOLang%\%platform:i386=x86%\sfxstub.exe
|
||
|
set stubexe=%bldtools%\%platform:i386=x86%\sfxmini.exe
|
||
|
|
||
|
rem server is the full URL prefix of the patch server including the
|
||
|
rem ISAPI pstream.dll name
|
||
|
|
||
|
set server=http://%servername%/isapi/pstream3.dll/xp
|
||
|
|
||
|
rem updatever is the name of the update.ver file.
|
||
|
|
||
|
set updatever=update.ver
|
||
|
|
||
|
rem sourcelist is the name of a text file containing the names of all
|
||
|
rem the files which could be downloaded. Usually derived from the
|
||
|
rem [SourceDisksFiles] sections in update.inf and update.url
|
||
|
|
||
|
set sourcelist=%patchtemp%\update\%updatever%
|
||
|
|
||
|
rem targetpool is the name of the directory where all the produced
|
||
|
rem patches will be collected. Existing contents of this directory
|
||
|
rem will be deleted.
|
||
|
|
||
|
set targetpool=%patchpath%\patches.out\%Language%
|
||
|
|
||
|
rem cache is the name of the directory where mpatches can look for
|
||
|
rem previously-built patch files. Any new patches built will be added
|
||
|
rem to this directory.
|
||
|
|
||
|
set cache=%patchpath%\PatchCache
|
||
|
|
||
|
rem psfcomment is a comment to go in the produced PSF.
|
||
|
|
||
|
set psfcomment=%newbuild% %newexe% (%COMPUTERNAME%)
|
||
|
|
||
|
rem oldsympath is the symbol path for "old" files
|
||
|
|
||
|
set strcat=
|
||
|
for %%p in (%OtherReleases%) do call :strcat %forest%\history\%%p\symbols
|
||
|
set oldsympath=%strcat%;%newfiles%\symbols
|
||
|
|
||
|
rem newsympath is the symbol path for "new" files
|
||
|
|
||
|
set strcat=%newfiles%\symbols
|
||
|
for %%p in (%OtherReleases%) do call :strcat %forest%\history\%%p\symbols
|
||
|
set newsympath=%strcat%
|
||
|
set strcat=
|
||
|
|
||
|
rem forest check
|
||
|
|
||
|
if exist %forest%\history goto :EOF
|
||
|
|
||
|
echo Error: Forest not populated for %Language%\%Platform%
|
||
|
|
||
|
goto failed
|
||
|
|
||
|
:strcat
|
||
|
|
||
|
if not "%strcat%"=="" set strcat=%strcat%;
|
||
|
set strcat=%strcat%%1
|
||
|
goto :EOF
|
||
|
|
||
|
rem :CheckLanguage <given> <Language> <Equiv1> <Equiv2> <CPRLang> <ISOLang>
|
||
|
|
||
|
:CheckLanguage
|
||
|
|
||
|
if /i "%1" == "%2" goto :SetLanguage
|
||
|
if /i "%1" == "%3" goto :SetLanguage
|
||
|
if /i "%1" == "%4" goto :SetLanguage
|
||
|
if /i "%1" == "%5" goto :SetLanguage
|
||
|
if /i "%1" == "%6" goto :SetLanguage
|
||
|
|
||
|
goto :EOF
|
||
|
|
||
|
:SetLanguage
|
||
|
|
||
|
set Language=%2
|
||
|
set ISOLang=%6
|
||
|
set CPRLang=%5
|
||
|
|
||
|
goto :EOF
|
||
|
|
||
|
:Usage
|
||
|
|
||
|
echo.
|
||
|
echo %~n0: Parameters: {verb} {config} {Q######} {language} {platform} {bug#} {SP#} {relcode}
|
||
|
echo.
|
||
|
echo verb operation to perform
|
||
|
echo config base name of this configuration file (%~n0)
|
||
|
echo Q###### Package's KB article ID, ie, "Q123456"
|
||
|
echo language any language code from in %~dp0languages.lst, ie, "EN"
|
||
|
echo platform i386/x86, ia64, nec98
|
||
|
echo bug# RAID package request bug#, ie, 22002
|
||
|
echo SP# package's pre-SP#, ie, "SP1"
|
||
|
echo relcode one of: test, beta, RTM
|
||
|
|
||
|
goto failed
|
||
|
|
||
|
:failed
|
||
|
|
||
|
set language=
|
||
|
set ISOLang=
|
||
|
set platform=
|
||
|
set forest=
|
||
|
set newbuild=
|
||
|
set server=
|
||
|
set newfiles=
|