Windows2003-3790/tools/postbuildscripts/drvcabck.cmd
2020-09-30 16:53:55 +02:00

319 lines
10 KiB
Batchfile

@REM -----------------------------------------------------------------
@REM
@REM drvcabck.cmd - VijeshS
@REM Generates drvindex.inf files for each sku
@REM
@REM Copyright (c) Microsoft Corporation. All rights reserved.
@REM
@REM -----------------------------------------------------------------
@if NOT defined HOST_PROCESSOR_ARCHITECTURE set HOST_PROCESSOR_ARCHITECTURE=%PROCESSOR_ARCHITECTURE%
@if defined _CPCMAGIC goto CPCBegin
@perl -x "%~f0" %*
@goto :EOF
#!perl
use strict;
use lib $ENV{RAZZLETOOLPATH} . "\\PostBuildScripts";
use lib $ENV{RAZZLETOOLPATH};
use PbuildEnv;
use ParseArgs;
sub Usage { print<<USAGE; exit(1) }
drvcabck [-l <language>]
Generates drvindex.inf files for each sku
USAGE
parseargs('?' => \&Usage);
# *** TEMPLATE CODE ***
$ENV{"_CPCMAGIC"}++;exit(system($0)>>8);
__END__
@:CPCBegin
@set _CPCMAGIC=
@setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
@if not defined DEBUG echo off
@REM *** CMD SCRIPT BELOW ***
REM 1. Run INFSCAN per platform into <plat>.lst
REM 2. Run cabcheck.exe taking as input <plat>.lst and the prod specific layout.inf for each product to give you the generated prod specific drvindex.gen.
REM 3. Finally generate excdosnt.inf and copy drvindex.inf to the binaries directory.
REM
REM Note that winnt32/winnt is not smart enough to not copy files present in the driver cab
REM when processing the [Files] section. However, it will still look for files when looking at
REM BootFiles or the other sections associated with boot files.
REM preconditions
REM 1. infs have been generated in all binaries directories (srvinf, etc.)
REM 2. ideally the PNF's have been generated for all the INF's
REM BUGBUG "myarchitecture" is used inconsistantly below and should probably be removed
REM cksku without -a defaults to _BuildArch
REM ArchSwitch is based on _BuildArch
REM Define "myarchitecture" as the architecture that we're processing.
REM
REM we use the %_BuildArch% variable if it's set, otherwise we fall back on
REM %HOST_PROCESSOR_ARCHITECTURE%
REM
if not defined myarchitecture (
if defined _BuildArch (
set myarchitecture=%_BuildArch%
) else (
set myarchitecture=%HOST_PROCESSOR_ARCHITECTURE%
)
)
if not defined myarchitecture (
call errmsg.cmd "variable myarchitecture not defined."
goto end
)
REM
REM this should expand into one of NTx86 NTamd64 NTia64
REM new architectures require modification to infscan
REM
set InfScanSwitch=/V NT%_BuildArch%
REM
REM Do any per-arch overrides and setup ArchSwitch here
REM
if /i "%_BuildArch%" == "x86" (
set ArchSwitch=i
)
if /i "%_BuildArch%" == "amd64" (
set ArchSwitch=a
)
if /i "%_BuildArch%" == "ia64" (
set ArchSwitch=m
)
REM
REM now for common options
REM ignore errors
REM build out of date PNF's first (incremental hit)
REM use 20 threads
REM
set InfScanSwitch=%InfScanSwitch% /I /G /T 1
echo %myarchitecture%
echo binaries = %_NTPostBld%
REM Verify existence of build directory
pushd .
set scratchdir=%_NTPostBld%\congeal_scripts\drvgen
call ExecuteCmd.cmd "if not exist %scratchdir% md %scratchdir%"
cd /d %scratchdir%
cd
call ExecuteCmd.cmd "if exist ** del /f /q **"
if errorlevel 1 popd& goto end
set scratchsubdir=%scratchdir%\%lang%\%myarchitecture%
call ExecuteCmd.cmd "if not exist %scratchsubdir% md %scratchsubdir%"
if errorlevel 1 popd& goto end
cd /d %scratchsubdir%
cd
call ExecuteCmd.cmd "if exist ** del /f /q **"
REM
REM Get the product flavors (per, bla, sbs, srv, ent, dtc) for the given language.
REM Get the INF list for each product flavor
REM (PRO is applicable to all languages.)
REM
cd /d %Razzletoolpath%\postbuildscripts
cd
if not exist %_NTPOSTBLD%\layout.inf (
call errmsg.cmd "%_NTPOSTBLD%\Layout.Inf doesn't exist."
popd
goto end
)
set prods=
echo Beginning INF Scanning
call logmsg.cmd /t "Beginning INF Scanning"
call logmsg.cmd "Scanning PRO INF's"
call ExecuteCmd.cmd "infscan.exe %InfScanSwitch% /S %scratchsubdir%\pro.lst %_NTPOSTBLD%"
if errorlevel 1 goto failscan
perl %RazzleToolPath%\cksku.pm -t:per -l:%lang%
if %errorlevel% EQU 0 (
set prods=%prods% per
REM get perinflayout.inf for later
if exist %_NTPOSTBLD%\perinf\layout.inf (
copy %_NTPOSTBLD%\perinf\layout.inf %scratchsubdir%\perinflayout.inf
) else (
copy %_NTPOSTBLD%\layout.inf %scratchsubdir%\perinflayout.inf
)
call logmsg.cmd "Scanning PER INF's"
call ExecuteCmd.cmd "infscan.exe %InfScanSwitch% /S %scratchsubdir%\per.lst /O perinf %_NTPOSTBLD%"
if errorlevel 1 goto failscan
)
perl %RazzleToolPath%\cksku.pm -t:srv -l:%lang%
if %errorlevel% EQU 0 (
set prods=%prods% srv
REM get srvinflayout.inf for later
if exist %_NTPOSTBLD%\srvinf\layout.inf (
copy %_NTPOSTBLD%\srvinf\layout.inf %scratchsubdir%\srvinflayout.inf
) else (
copy %_NTPOSTBLD%\layout.inf %scratchsubdir%\srvinflayout.inf
)
call logmsg.cmd "Scanning SRV INF's"
call ExecuteCmd.cmd "infscan.exe %InfScanSwitch% /S %scratchsubdir%\srv.lst /O srvinf %_NTPOSTBLD%"
if errorlevel 1 goto failscan
)
perl %RazzleToolPath%\cksku.pm -t:bla -l:%lang%
if %errorlevel% EQU 0 (
set prods=%prods% bla
REM get blainflayout.inf for later
if exist %_NTPOSTBLD%\blainf\layout.inf (
copy %_NTPOSTBLD%\blainf\layout.inf %scratchsubdir%\blainflayout.inf
) else if exist %_NTPOSTBLD%\srvinf\layout.inf (
copy %_NTPOSTBLD%\srvinf\layout.inf %scratchsubdir%\blainflayout.inf
) else (
copy %_NTPOSTBLD%\layout.inf %scratchsubdir%\blainflayout.inf
)
call logmsg.cmd "Scanning BLA INF's"
call ExecuteCmd.cmd "infscan.exe %InfScanSwitch% /S %scratchsubdir%\bla.lst /O blainf /O srvinf %_NTPOSTBLD%"
if errorlevel 1 goto failscan
)
perl %RazzleToolPath%\cksku.pm -t:sbs -l:%lang%
if %errorlevel% EQU 0 (
set prods=%prods% sbs
REM get sbsinflayout.inf for later
if exist %_NTPOSTBLD%\sbsinf\layout.inf (
copy %_NTPOSTBLD%\sbsinf\layout.inf %scratchsubdir%\sbsinflayout.inf
) else if exist %_NTPOSTBLD%\srvinf\layout.inf (
copy %_NTPOSTBLD%\srvinf\layout.inf %scratchsubdir%\sbsinflayout.inf
) else (
copy %_NTPOSTBLD%\layout.inf %scratchsubdir%\sbsinflayout.inf
)
call logmsg.cmd "Scanning SBS INF's"
call ExecuteCmd.cmd "infscan.exe %InfScanSwitch% /S %scratchsubdir%\sbs.lst /O sbsinf /O srvinf %_NTPOSTBLD%"
if errorlevel 1 goto failscan
)
perl %RazzleToolPath%\cksku.pm -t:ads -l:%lang%
if %errorlevel% EQU 0 (
set prods=%prods% ent
REM get entinflayout.inf for later
if exist %_NTPOSTBLD%\entinf\layout.inf (
copy %_NTPOSTBLD%\entinf\layout.inf %scratchsubdir%\entinflayout.inf
) else if exist %_NTPOSTBLD%\srvinf\layout.inf (
copy %_NTPOSTBLD%\srvinf\layout.inf %scratchsubdir%\entinflayout.inf
) else (
copy %_NTPOSTBLD%\layout.inf %scratchsubdir%\entinflayout.inf
)
call logmsg.cmd "Scanning ADS INF's"
call ExecuteCmd.cmd "infscan.exe %InfScanSwitch% /S %scratchsubdir%\ent.lst /O entinf /O srvinf %_NTPOSTBLD%"
if errorlevel 1 goto failscan
)
perl %RazzleToolPath%\cksku.pm -t:dtc -l:%lang%
if %errorlevel% EQU 0 (
set prods=%prods% dtc
REM get dtcinflayout.inf for later
if exist %_NTPOSTBLD%\dtcinf\layout.inf (
copy %_NTPOSTBLD%\dtcinf\layout.inf %scratchsubdir%\dtcinflayout.inf
) else if exist %_NTPOSTBLD%\entinf\layout.inf (
copy %_NTPOSTBLD%\entinf\layout.inf %scratchsubdir%\dtcinflayout.inf
) else if exist %_NTPOSTBLD%\srvinf\layout.inf (
copy %_NTPOSTBLD%\srvinf\layout.inf %scratchsubdir%\dtcinflayout.inf
) else (
copy %_NTPOSTBLD%\layout.inf %scratchsubdir%\dtcinflayout.inf
)
call logmsg.cmd "Scanning DTC INF's"
call ExecuteCmd.cmd "infscan.exe %InfScanSwitch% /S %scratchsubdir%\dtc.lst /O dtcinf /O entinf /O srvinf %_NTPOSTBLD%"
if errorlevel 1 goto failscan
)
call logmsg.cmd /t "INF Scanning is complete"
echo Running cabcheck
REM Call cabcheck.exe to generate the drvindex.inf that we think is right
REM PRO - The workstation case
call ExecuteCmd.cmd "cabcheck.exe %_NTPostBld%\layout.inf %scratchsubdir%\pro.lst %scratchsubdir%\drvindex.gen /%ArchSwitch%"
if errorlevel 1 (
call errmsg.cmd "Cabcheck.exe Failed to auto-generate the drvindex.inf file"
popd
goto end
)
REM Copy the generated files to its final location.
call ExecuteCmd.cmd "copy /Y %scratchsubdir%\drvindex.gen %_NTPostBld%\drvindex.inf"
if errorlevel 1 (
call errmsg.cmd "Could not copy generated drvindex.inf to %_NTPostBld%"
popd
goto end
)
REM generate the appropriate excdosnt.inf
call ExecuteCmd.cmd "xdosnet %_NTPostBld%\layout.inf %_NTPostBld%\drvindex.inf 1 %scratchsubdir%\foodosnt %myarchitecture% %_NTPostBld%\excdosnt.inf %_NTPostBld%\exclude.inf"
REM Now do the other products - PER BLA SBS SRV ENT DTC
for %%i in (%prods%) do (
call ExecuteCmd.cmd "cabcheck.exe %scratchsubdir%\%%iinflayout.inf %scratchsubdir%\%%i.lst %scratchsubdir%\%%iinfdrvindex.gen /%ArchSwitch%"
if errorlevel 1 (
call errmsg.cmd "Cabcheck.exe Failed to auto-generate the drvindex.inf file"
popd
goto end
)
REM Copy the generated files to its final location.
call ExecuteCmd.cmd "copy /Y %scratchsubdir%\%%iinfdrvindex.gen %_NTPostBld%\%%iinf\drvindex.inf"
if errorlevel 1 (
call errmsg.cmd "Could not copy generated %%iinfdrvindex.gen to %_NTPostBld%\%%iinf\drvindex.inf"
popd
goto end
)
REM generate the appropriate excdosnt.inf
call ExecuteCmd.cmd "xdosnet %scratchsubdir%\%%iinflayout.inf %_NTPostBld%\%%iinf\drvindex.inf 1 %scratchsubdir%\foodosnt %myarchitecture% %_NTPostBld%\%%iinf\excdosnt.inf %_NTPostBld%\%%iinf\exclude.inf"
)
cd
call logmsg.cmd /t "drvindex.inf generation complete"
goto end
:failscan
call errmsg.cmd "Failed running infscan - Run tools\postbuildscripts\drvcabck by itself to debug."
popd
goto end
:end
seterror.exe "%errors%"& goto :EOF