Windows-Server-2003/tools/deltacat.cmd

191 lines
5.5 KiB
Batchfile

@echo off
setlocal ENABLEEXTENSIONS
setlocal ENABLEDELAYEDEXPANSION
if DEFINED _echo echo on
if DEFINED verbose echo on
REM testing
REM ------------------------------------------------
REM Get command-line options
REM ------------------------------------------------
set quiet_mode=
if /I "%1" == "/q" set quiet_mode=1
if /I "%1" == "-q" set quiet_mode=1
if "%quiet_mode%" == "1" shift
set Version=5.2
if /I "%1" == "/5.0" set Version=5.0
if /I "%1" == "-5.0" set Version=5.0
if /I "%1" == "/5.1" set Version=5.1
if /I "%1" == "-5.1" set Version=5.1
if NOT "%Version%" == "5.2" shift
set UpdateFile=
if /I "%1" == "/f" set UpdateFile=%2
if /I "%1" == "-f" set UpdateFile=%2
if defined UpdateFile shift
if defined UpdateFile shift
for %%a in (./ .- .) do if ".%1." == "%%a?." goto Usage
if "%1" == "" goto Usage
if "%_NTBINDIR%"=="" echo please set "_NTBINDIR" = to your nt drive, e.g. _NTBINDIR=d:\nt&goto usage
REM ------------------------------------------------
REM Set environment variables, make temp directories,
REM delete stale files
REM ------------------------------------------------
set infflag=
set mydir=%1
set workdir=
for /l %%a in (1,1,100) do (
mkdir %temp%\deltacat.%%a
if not errorlevel 1 (
set workdir=%temp%\deltacat.%%a
goto haveworkdir
)
)
echo unable to find a working directory
goto end
:haveworkdir
set cdf=%workdir%\cdf
set log=%workdir%\log
if NOT exist %cdf% md %cdf%
if NOT exist %log% md %log%
if exist %cdf%\delta.cdf del %cdf%\delta.cdf
if exist %cdf%\delta.log del %log%\delta.log
pushd %mydir%
if exist delta.cat del delta.cat
if exist layout.inf set infflag=1
if exist syssetup.inf set infflag=1
if "%quiet_mode%" == "1" goto skiphelp
if "%infflag%"=="1" call :nt5inf
:skiphelp
REM ------------------------------------------------
REM Prepare a cdf file
REM ------------------------------------------------
echo Creating the delta.cdf ...
REM Put the header on and output it as a CDF
echo ^[CatalogHeader^]> %cdf%\delta.CDF
echo Name=delta>> %cdf%\delta.CDF
echo PublicVersion=0x0000001>> %cdf%\delta.CDF
echo EncodingType=0x00010001>> %cdf%\delta.CDF
echo CATATTR1=0x10010001:OSAttr:2:!Version!>> %cdf%\delta.CDF
REM Get extra attributes from UpdateFile if necessary
if defined UpdateFile (
for /f "tokens=1,2 delims=," %%a in (%UpdateFile%) do (
echo CATATTR%%b=0x10010001:%%a>>%cdf%\delta.CDF
)
)
echo ^[CatalogFiles^]>> %cdf%\delta.CDF
for /f %%a in ('dir /a-d /b %mydir%') do (
if NOT "%%a"=="" echo ^<hash^>%mydir%\%%a=%mydir%\%%a>>%cdf%\delta.cdf)
REM ------------------------------------------------
REM Make the catalog and test sign it
REM ------------------------------------------------
echo Making the delta.cat ...
REM popd and pushd just in case some sneaky dlls are hanging around in
REM the user passed %mydir%
popd
makecat -v %cdf%\delta.cdf > %log%\delta.log
copy delta.cat %mydir%
copy %cdf%\delta.cdf %mydir%
pushd %SDXROOT%
echo Signing delta.cat ...
signtool sign %SIGNTOOL_SIGN% "%mydir%\delta.CAT"
echo Done.
popd
rd /s/q %workdir%
goto end
:nt5inf
echo IF you have either layout.inf or syssetup.inf
echo in your signing directory. Deltacat will not
echo sign these files which must be signed in nt5inf.cat.
echo.
echo Let deltacat run then do the following:
echo 1. Copy nt5inf.ca_ to your signing directory
echo from wherever your are installing, e.g.
echo \\ntbuilds\release\usa\latest.tst\x86\fre.wks,
echo or, e.g. e:\i386.
echo 2. Make sure you have the most recent updcat.exe
echo in your %windir%\idw directory
echo 3. Run infsign.cmd
echo 4. Then run winnt32 with /m:signing directory
echo.
echo These instructions are also in the help for
echo deltacat.cmd and infsign.cmd
echo.
pause
goto :eof
REM ------------------------------------------------
REM Display Usage:
REM ------------------------------------------------
:usage
echo Deltacat.cmd [q] [5.0] [/f text file with extra catalog attributes] ^<path to bins^>
echo.
echo [/q] [-q] Quiet mode
echo [/5.0] [-5.0] Nt 5 version - NT 5.2 is default
echo [/5.1] [-5.1] Nt 5.1 version - NT 5.2 is default
echo ^<path to bins^> FULL PATH to bins. Do not run in bins directory.
echo.
echo.
echo Creates a catalog file, "delta.cat" for files in the directory
echo passed as input. For example: If you have ntoskrnl.exe and pci.sys
echo in a directory "d:\BINARIES," running "deltacat d:\BINARIES"
echo will create a delta.cat and place it in the d:\BINARIES directory.
echo.
echo Then to setup test your binaries use the /m switch with winnt32
echo get your binaries and catalog file from d:\BINARIES. For example,
echo run \\ntubilds\release\usa\latest.tst\x86\fre.wks\winnt32
echo \winnt32.exe /m:d:\BINARIES.
echo.
echo IF you have either LAYOUT.INF or SYSSETUP.INF
echo in your signing directory. Deltacat will not
echo sign these files which must be signed in nt5inf.cat.
echo.
echo Let deltacat run then do the following:
echo 1. Copy nt5inf.ca_ to your signing directory
echo from wherever your are installing, e.g.
echo \\ntbuilds\release\usa\latest.tst\x86\fre.wks,
echo or, e.g. e:\i386.
echo 2. Make sure you have the most recent updcat.exe
echo in your %windir%\idw directory
echo 3. Run infsign.cmd
echo 4. Then run winnt32 with /m:signing directory
echo.
:end
@ENDLOCAL