@echo off
REM  ------------------------------------------------------------------
REM
REM  Adminpak.cmd
REM     Make CAB files for Adminpak distribution (adminpak.msi)
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) }
Adminpak.cmd [-l <language>]

Make CAB files for Adminpak distribution (adminpak.msi)
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 ***

if not defined 386 (
   call logmsg.cmd "adminpak.cmd do nothing on non i386"
   goto :EOF    
)

REM adminpak.msi is not applicable to languages with no server products.

perl %RazzleToolPath%\cksku.pm -t:bla -l:%lang%
if %errorlevel% EQU 0 goto :ValidSKU

perl %RazzleToolPath%\cksku.pm -t:sbs -l:%lang%
if %errorlevel% EQU 0 goto :ValidSKU

perl %RazzleToolPath%\cksku.pm -t:srv -l:%lang%
if %errorlevel% EQU 0 goto :ValidSKU

perl %RazzleToolPath%\cksku.pm -t:ads -l:%lang%
if %errorlevel% EQU 0 goto :ValidSKU

perl %RazzleToolPath%\cksku.pm -t:dtc -l:%lang%
if %errorlevel% EQU 0 goto :ValidSKU

call logmsg.cmd "CABGEN: no server products for %lang%; nothing to do."
goto :EOF


:ValidSKU

REM
REM Generate cmbins.exe as it is needed below.
REM
call cmbins.cmd

REM
REM Generate adminpak.msi
REM

if not exist %_NTPostBld%\adminpak (
  call errmsg.cmd "Directory %_NTPostBld%\adminpak not found."
  goto :EOF
)

pushd %_NTPostBld%\adminpak

for %%i in (.\admin_pk.msi .\adminpak.ddf) do (
  if not exist %%i (
    call errmsg.cmd "File %_NTPostBld%\adminpak\%%i not found."
    popd& goto :EOF
  )
)

REM
REM Only run if relevant files changed
REM

if exist %_NtPostBld%\build_logs\bindiff.txt (
   for /f "skip=15 tokens=1 delims=" %%b in (adminpak.ddf) do (
       findstr /ilc:%%b %_NTPostBld%\build_logs\bindiff.txt
       if /i "!ErrorLevel!" == "0" (
          call LogMsg.cmd "%%b changed - running cab generation"
          goto :RunIt
       )
   )
   call LogMsg.cmd "No relevant files changed - ending"
   popd& goto :EOF
)


:RunIt

REM
REM Create adminpak.cab.
REM   As iexpress.exe does not set errorlevel in all error cases,
REM   base verification on adminpak.cab's existence.
REM

if exist adminpak.cab call ExecuteCmd.cmd "del /f adminpak.cab"
if errorlevel 1 popd& goto :EOF

call ExecuteCmd.cmd "start /wait /min makecab /D SourceDir=%_NTPOSTBLD% /F adminpak.ddf"

if not exist adminpak.cab (
   call errmsg.cmd "Cab creation for adminpak.cab."
   popd& goto :EOF
)

REM
REM Create adminpak.msi
REM   msifiler.exe needs the uncompressed files, so uncab adminpak.cab.
REM

call ExecuteCmd.cmd "copy admin_pk.msi adminpak.msi"
if errorlevel 1 popd& goto :EOF

REM
REM Extract the Cabs table
REM Copy the cab file into the Cabs directory
REM Import the new Cab into the Cabs directory
REM

call ExecuteCmd.cmd "msidb.exe -d .\adminpak.msi -f %_NTPostBld%\adminpak -e Cabs"
if errorlevel 1 popd& goto :EOF
call ExecuteCmd.cmd "copy /y .\adminpak.CAB .\Cabs\adminpak.CAB.ibd"
if errorlevel 1 popd& goto :EOF
call ExecuteCmd.cmd "msidb.exe -d .\adminpak.msi -f %_NTPostBld%\adminpak -i Cabs.idt"
if errorlevel 1 popd& goto :EOF

call ExecuteCmd.cmd "del .\cabs.idt"
if errorlevel 1 popd& goto :EOF
call ExecuteCmd.cmd "rd /s /q Cabs"
if errorlevel 1 popd& goto :EOF
if exist .\cabtemp call ExecuteCmd.cmd "rd /q /s .\cabtemp"
if errorlevel 1 popd& goto :EOF

call ExecuteCmd.cmd "md .\cabtemp"
if errorlevel 1 popd& goto :EOF

call ExecuteCmd.cmd "extract.exe /Y /E /L .\cabtemp adminpak.cab"
if errorlevel 1 popd& goto :EOF

REM
REM Rename some of the files in cabtemp so that
REM msifiler.exe can find them in the file table
REM and correctly update the verion and size informaiton.
REM

call ExecuteCmd.cmd "rename .\cabtemp\readme32.txt readme.txt"
call ExecuteCmd.cmd "rename .\cabtemp\template.pmc template.cmp"
call ExecuteCmd.cmd "rename .\cabtemp\template.smc template.cms"
call ExecuteCmd.cmd "rename .\cabtemp\adcon.chm adconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\secon.chm seconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\tapiconS.chm tapiconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\rsscon.chm rssconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\riscon.chm risconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\rrascon.chm rrasconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\mscscon.chm mscsconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\ntarts.chm ntart.chm"
call ExecuteCmd.cmd "rename .\cabtemp\dnscon.chm dnsconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\dhcpcon.chm dhcpconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\dfcon.chm dfconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\cscon.chm csconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\tslic_el.chm tslic.chm"
call ExecuteCmd.cmd "rename .\cabtemp\vpncon.chm vpnconcepts.chm"
call ExecuteCmd.cmd "rename .\cabtemp\winscon.chm winsconcepts.chm"

call ExecuteCmd.cmd "msifiler.exe -d .\adminpak.msi -s .\cabtemp\"
if errorlevel 1 popd& goto :EOF

rem
rem Cleanup
rem

call ExecuteCmd.cmd "del /f .\adminpak.cab"
call ExecuteCmd.cmd "rd /q /s .\cabtemp"


REM
REM Copy adminpak.msi to "retail"
REM

call ExecuteCmd.cmd "copy adminpak.msi ..\"
if errorlevel 1 popd& goto :EOF

popd