@echo off REM ------------------------------------------------------------------ REM REM smashem.cmd REM Smash locks on certain binaries 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<] Smash locks on certain binaries 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 Incremental check REM First off, clear out error level as somebody is doing weird things with it set ErrorLevel= set Bindiff=%_NTPostBld%\build_logs\bindiff.txt set Inputs=win32k.sys kernel32.dll ntdll.dll winsrv.dll if exist %Bindiff% ( set ChangedInputs=0 for %%a in (%Inputs%) do ( findstr /ilc:"%_NTPostBld%\uniproc\%%a" %BinDiff% if /i "!ErrorLevel!" == "0" set /a ChangedInputs=!ChangedInputs! + 1 ) echo !ChangedInputs! if !ChangedInputs! EQU 0 ( @echo Skipping - No inputs changed goto :EOF ) ) REM REM We do 3 steps here: REM 1. Make the %_NTPostBld%\uniproc directory REM 2. Copy some specified files into that directory from %_NTPostBld% REM 3. run smashlck.exe on those files REM REM REM 1. Make the %_NTPostBld%\uniproc directory REM if not exist %_NTPostBld%\uniproc ( call ExecuteCmd.cmd "md %_NTPostBld%\uniproc" if errorlevel 1 goto :EOF ) REM REM 2. Copy some specified files into that directory from the root of binaries. REM REM Only do this on x86 machines if /i NOT "%PROCESSOR_ARCHITECTURE%" == "x86" goto :EOF if /i "%AMD64%" == "1" goto :EOF if /i "%IA64%" == "1" goto :EOF set UNIPROC_FILES=kernel32.dll ntdll.dll win32k.sys winsrv.dll for %%i in (%UNIPROC_FILES%) do ( call ExecuteCmd.cmd "xcopy /YFR %_NTPostBld%\%%i %_NTPostBld%\uniproc\" if errorlevel 1 goto :EOF ) REM REM 3. run smashlck on those files REM REM REM if we're on a checked build machine, then don't smash locks. REM checked builds are always MP. REM if /i NOT "%_BuildType%" == "fre" goto :EOF for %%i in (%UNIPROC_FILES%) do ( call ExecuteCmd.cmd "smashlck.exe -u %_NTPostBld%\uniproc\%%i" if errorlevel 1 goto :EOF )