280 lines
10 KiB
Batchfile
280 lines
10 KiB
Batchfile
|
@echo off
|
||
|
REM ------------------------------------------------------------------
|
||
|
REM
|
||
|
REM sfcgen.cmd
|
||
|
REM Builds sfcfiles.dll for each sku using the current infs
|
||
|
REM
|
||
|
REM Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
REM
|
||
|
REM ------------------------------------------------------------------
|
||
|
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) }
|
||
|
sfcgen [-l <language>]
|
||
|
|
||
|
Builds sfcfiles.dll for each sku using the current infs
|
||
|
USAGE
|
||
|
|
||
|
parseargs('?' => \&Usage);
|
||
|
|
||
|
|
||
|
# *** NEXT FEW LINES ARE TEMPLATE ***
|
||
|
$ENV{"_CPCMAGIC"}++;exit(system($0)>>8);
|
||
|
__END__
|
||
|
:CPCBegin
|
||
|
set _CPCMAGIC=
|
||
|
setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
|
||
|
REM *** BEGIN YOUR CMD SCRIPT BELOW ***
|
||
|
|
||
|
REM 1. go into sm\sfc\files\%lang% directory
|
||
|
REM 2. run 4 copies of filegen based on architecture
|
||
|
REM 3. when these finish, force a rebuild of sfcfiles.dll in this directory
|
||
|
REM 4. if we're on the US free build machines, checkin the proper header changes
|
||
|
|
||
|
REM preconditions
|
||
|
REM 1. sfcgen.inf is present in the dump directory
|
||
|
REM 2. infs have been generated in all binaries directories (srvinf, etc.)
|
||
|
|
||
|
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 %PROCESSOR_ARCHITECTURE%
|
||
|
REM
|
||
|
|
||
|
if not defined myarchitecture (
|
||
|
if defined _BuildArch (
|
||
|
set myarchitecture=%_BuildArch%
|
||
|
) else (
|
||
|
set myarchitecture=%PROCESSOR_ARCHITECTURE%
|
||
|
)
|
||
|
)
|
||
|
|
||
|
if not defined myarchitecture (
|
||
|
call errmsg.cmd "variable myarchitecture not defined."
|
||
|
goto end
|
||
|
)
|
||
|
|
||
|
REM Verify existence of input inf
|
||
|
|
||
|
set inputinf=%_NTPostBld%\congeal_scripts\sfcgen.inf
|
||
|
if not exist %inputinf% (
|
||
|
call errmsg.cmd "Input inf %inputinf% not found."
|
||
|
goto end
|
||
|
)
|
||
|
|
||
|
echo binaries = %_NTPostBld%
|
||
|
echo inputinf = %inputinf%
|
||
|
|
||
|
REM Verify existence of build directory
|
||
|
pushd .
|
||
|
call ExecuteCmd.cmd "if not exist %_NTPostBld%\congeal_scripts\autogen md %_NTPostBld%\congeal_scripts\autogen"
|
||
|
|
||
|
REM call ExecuteCmd.cmd "cd /d %_NTPostBld%\congeal_scripts\autogen"
|
||
|
REM if errorlevel 1 popd& goto end
|
||
|
|
||
|
cd /d %_NTPostBld%\congeal_scripts\autogen
|
||
|
|
||
|
cd
|
||
|
if errorlevel 1 popd& goto end
|
||
|
|
||
|
REM Cleanup infs in proper temp subdirectory
|
||
|
|
||
|
REM Get the product flavors (wks, per, bla, sbs, srv, ent, dtc) for the given language.
|
||
|
REM wks is applicable to all languages.
|
||
|
set prods=wks
|
||
|
|
||
|
perl %RazzleToolPath%\cksku.pm -t:pro -l:%lang%
|
||
|
if %errorlevel% EQU 0 (set prods=%prods% wks& set _WKS=1)
|
||
|
|
||
|
perl %RazzleToolPath%\cksku.pm -t:per -l:%lang%
|
||
|
if %errorlevel% EQU 0 (set prods=%prods% per& set _PER=1)
|
||
|
|
||
|
perl %RazzleToolPath%\cksku.pm -t:bla -l:%lang%
|
||
|
if %errorlevel% EQU 0 (set prods=%prods% bla& set _BLA=1)
|
||
|
|
||
|
perl %RazzleToolPath%\cksku.pm -t:sbs -l:%lang%
|
||
|
if %errorlevel% EQU 0 (set prods=%prods% sbs& set _SBS=1)
|
||
|
|
||
|
perl %RazzleToolPath%\cksku.pm -t:srv -l:%lang%
|
||
|
if %errorlevel% EQU 0 (set prods=%prods% srv& set _SRV=1)
|
||
|
|
||
|
perl %RazzleToolPath%\cksku.pm -t:ads -l:%lang%
|
||
|
if %errorlevel% EQU 0 (set prods=%prods% ent& set _ENT=1)
|
||
|
|
||
|
perl %RazzleToolPath%\cksku.pm -t:dtc -l:%lang%
|
||
|
if %errorlevel% EQU 0 (set prods=%prods% dtc& set _DTC=1)
|
||
|
|
||
|
for %%i in (%prods%) do (
|
||
|
call ExecuteCmd.cmd "if not exist %_NTPostBld%\build_logs\%myarchitecture%%%i md %_NTPostBld%\build_logs\%myarchitecture%%%i"
|
||
|
if errorlevel 1 popd& goto end
|
||
|
call ExecuteCmd.cmd "if exist %_NTPostBld%\build_logs\%myarchitecture%%%i\*.inf del /q /f %_NTPostBld%\build_logs\%myarchitecture%%%i\*.inf 2>nul"
|
||
|
)
|
||
|
|
||
|
cd
|
||
|
|
||
|
REM kickoff filegen
|
||
|
|
||
|
call logmsg.cmd /t "Running copies of filegen."
|
||
|
|
||
|
REM BUGBUG need to redirect output from filegen.exe to per product logfile
|
||
|
|
||
|
REM WKS
|
||
|
|
||
|
REM the funny for loop is so we can easily associate the product one-letter
|
||
|
REM descriptor to the three letter descriptor
|
||
|
set EventList=
|
||
|
for %%a in (Wks.w Per.p Bla.b Sbs.l Srv.s Ent.a Dtc.d) do (
|
||
|
echo Inside for loop says '%%a'
|
||
|
for /f "tokens=1,2 delims=." %%b in ('echo %%a') do (
|
||
|
set ProductType=%%b
|
||
|
set ProductLetter=%%c
|
||
|
echo ProductType is '!ProductType!'
|
||
|
echo ProductLetter is '!ProductLetter!'
|
||
|
REM kick off filegen wrapper if this product is defined
|
||
|
if defined _!ProductType! (
|
||
|
set EventList=!EventList! sfcgen.!ProductType!
|
||
|
start /min cmd /c %RazzleToolPath%\PostBuildScripts\sfcwrap.cmd !ProductType! !ProductLetter!
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
REM now wait on all events we started
|
||
|
if defined EventList perl %RazzleToolPath%\PostBuildScripts\cmdevt.pl -iwv !EventList!
|
||
|
|
||
|
|
||
|
:AllDone
|
||
|
call logmsg.cmd /t "filegen is complete."
|
||
|
|
||
|
|
||
|
REM Now that the headers are build, compare them against the checked in
|
||
|
REM (and binplaced) headers.
|
||
|
|
||
|
goto jump_for_now
|
||
|
|
||
|
REM WKS
|
||
|
fc /l /c %_NTPostBld%\congeal_scripts\%myarchitecture%_wks.h %_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_wks.h
|
||
|
if errorlevel 1 (
|
||
|
call logmsg.cmd "Warning : Checked in header (admin\published\sfclist\%myarchitecture%_wks.h) did not match autogenerated version (%_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_wks.h)."
|
||
|
call logmsg.cmd "Warning : If you added/removed files from the product, you must also update the headers under admin\published\sfclist"
|
||
|
call logmsg.cmd "Warning : Do this by verifying the autogenerated header and checking it in. Avoid hand-editing the headers."
|
||
|
set %errorlevel%=0
|
||
|
)
|
||
|
|
||
|
REM PER
|
||
|
if defined _PER (
|
||
|
fc /l /c %_NTPostBld%\congeal_scripts\%myarchitecture%_per.h %_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_per.h
|
||
|
if errorlevel 1 (
|
||
|
call logmsg.cmd "Warning : Checked in header (admin\published\sfclist\%myarchitecture%_per.h) did not match autogenerated version (%_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_per.h)."
|
||
|
call logmsg.cmd "Warning : If you added/removed files from the product, you must also update the headers under admin\published\sfclist"
|
||
|
call logmsg.cmd "Warning : Do this by verifying the autogenerated header and checking it in. Avoid hand-editing the headers."
|
||
|
set %errorlevel%=0
|
||
|
)
|
||
|
|
||
|
)
|
||
|
|
||
|
REM BLA
|
||
|
if defined _BLA (
|
||
|
fc /l /c %_NTPostBld%\congeal_scripts\%myarchitecture%_bla.h %_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_bla.h
|
||
|
if errorlevel 1 (
|
||
|
call logmsg.cmd "Warning : Checked in header (admin\published\sfclist\%myarchitecture%_bla.h) did not match autogenerated version (%_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_bla.h)."
|
||
|
call logmsg.cmd "Warning : If you added/removed files from the product, you must also update the headers under admin\published\sfclist"
|
||
|
call logmsg.cmd "Warning : Do this by verifying the autogenerated header and checking it in. Avoid hand-editing the headers."
|
||
|
set %errorlevel%=0
|
||
|
)
|
||
|
|
||
|
)
|
||
|
|
||
|
REM SBS
|
||
|
if defined _SBS (
|
||
|
fc /l /c %_NTPostBld%\congeal_scripts\%myarchitecture%_sbs.h %_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_sbs.h
|
||
|
if errorlevel 1 (
|
||
|
call logmsg.cmd "Warning : Checked in header (admin\published\sfclist\%myarchitecture%_sbs.h) did not match autogenerated version (%_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_sbs.h)."
|
||
|
call logmsg.cmd "Warning : If you added/removed files from the product, you must also update the headers under admin\published\sfclist"
|
||
|
call logmsg.cmd "Warning : Do this by verifying the autogenerated header and checking it in. Avoid hand-editing the headers."
|
||
|
set %errorlevel%=0
|
||
|
)
|
||
|
|
||
|
)
|
||
|
|
||
|
REM SRV
|
||
|
if defined _SRV (
|
||
|
fc /l /c %_NTPostBld%\congeal_scripts\%myarchitecture%_srv.h %_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_srv.h
|
||
|
if errorlevel 1 (
|
||
|
call logmsg.cmd "Warning : Checked in header (admin\published\sfclist\%myarchitecture%_srv.h) did not match autogenerated version (%_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_srv.h)."
|
||
|
call logmsg.cmd "Warning : If you added/removed files from the product, you must also update the headers under admin\published\sfclist"
|
||
|
call logmsg.cmd "Warning : Do this by verifying the autogenerated header and checking it in. Avoid hand-editing the headers."
|
||
|
set %errorlevel%=0
|
||
|
)
|
||
|
|
||
|
)
|
||
|
|
||
|
REM ENT
|
||
|
if defined _ENT (
|
||
|
fc /l /c %_NTPostBld%\congeal_scripts\%myarchitecture%_ent.h %_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_ent.h
|
||
|
if errorlevel 1 (
|
||
|
call logmsg.cmd "Warning : Checked in header (admin\published\sfclist\%myarchitecture%_ent.h) did not match autogenerated version (%_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_ent.h)."
|
||
|
call logmsg.cmd "Warning : If you added/removed files from the product, you must also update the headers under admin\published\sfclist"
|
||
|
call logmsg.cmd "Warning : Do this by verifying the autogenerated header and checking it in. Avoid hand-editing the headers."
|
||
|
set %errorlevel%=0
|
||
|
)
|
||
|
)
|
||
|
|
||
|
REM DTC
|
||
|
if defined _DTC (
|
||
|
fc /l /c %_NTPostBld%\congeal_scripts\%myarchitecture%_dtc.h %_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_dtc.h
|
||
|
if errorlevel 1 (
|
||
|
call logmsg.cmd "Warning : Checked in header (admin\published\sfclist\%myarchitecture%_dtc.h) did not match autogenerated version (%_NTPostBld%\congeal_scripts\autogen\%myarchitecture%_dtc.h)."
|
||
|
call logmsg.cmd "Warning : If you added/removed files from the product, you must also update the headers under admin\published\sfclist"
|
||
|
call logmsg.cmd "Warning : Do this by verifying the autogenerated header and checking it in. Avoid hand-editing the headers."
|
||
|
set %errorlevel%=0
|
||
|
)
|
||
|
)
|
||
|
|
||
|
call logmsg.cmd /t "comparison is complete."
|
||
|
|
||
|
:jump_for_now
|
||
|
|
||
|
cd
|
||
|
REM the next line is necessary if the build is being run in a distributed fashion
|
||
|
set __MTSCRIPT_ENV_ID=
|
||
|
build.exe -cZ
|
||
|
|
||
|
if errorlevel 1 (
|
||
|
call errmsg.cmd "Error : Building of autogenerated WFP sfcfiles.dll failed. Please investigate %_NTPostBld%\congeal_scripts\autogen\build.err."
|
||
|
popd
|
||
|
goto end
|
||
|
) else (
|
||
|
call logmsg.cmd /t "WFP Dll sfcfiles.dll was built successfully"
|
||
|
)
|
||
|
|
||
|
REM Instrument sfcfiles.dll for coverage
|
||
|
if NOT "%_COVERAGE_BUILD%" == "1" (
|
||
|
call logmsg.cmd "Not coverage postbuild: not instrumenting sfcfiles.dll"
|
||
|
goto SkipInstrSfc
|
||
|
)
|
||
|
|
||
|
REM Only run on x86fre build machines
|
||
|
if NOT "%_BuildArch%%_BuildType%" == "x86fre" (
|
||
|
call logmsg.cmd "Architecture and build type is not x86fre... not instrumenting sfcfiles.dll"
|
||
|
goto SkipInstrSfc
|
||
|
)
|
||
|
|
||
|
call %COVERAGE_SCRIPTS%\CovInstrSfcFiles.cmd
|
||
|
|
||
|
:SkipInstrSfc
|
||
|
|
||
|
call logmsg.cmd /t "sfcgen.cmd Finished."
|
||
|
|
||
|
|
||
|
popd
|
||
|
|
||
|
:end
|
||
|
seterror.exe "%errors%"& goto :EOF
|