|
|
# buildall.pm # # created: 8/03/99, a-jbilas # modified: #
# TODO: WINCE SUPPORT? # BETTER FAULT TOLERANCE # SCRIPT CLEANUP # ICECAP
if (!$__SPGBUILDPM ) { use spg::build; } if (!$__SPGBUILDCABSPM ) { use spg::buildcabs; } if (!$__SPGBUILDMSIPM ) { use spg::buildmsi; } if (!$__SPGRUNBVTPM ) { use spg::runbvt; }
sub BuildAll { #STD overrides $sBuildName = "Build of SAPI5 All";
$sLogDropDir = "\\\\b11nlbuilds\\sapi5\\Web.Files\\logs\\".$sShortBuildName;
@lAllowedLanguages = (); @lAllowedBuilds = ("DEBUG", "RELEASE"); #TODO: ICECAP @lAllowedComponents = ("ALLPROJ", "DATA", "BVTDLLS");
push(@lAllowedModifiers, "ALLCOMP", "SHIP", "NOAH", "BVT", "DELALL", "NOCOPY", "NOCABS", "NOMSI"); #TODO: UPDATE push(@lDefaultArgs, "ALLPROJ", "BVT", "NOCOPY", "NOCABS", "BVTDLLS");
%hOptionDescription = ( %hOptionDescription, # <----------------------------- SCREEN WIDTH -------------------------------------> (accel) ("NoMsi" => " don't build MSI/MSM files"), #NM ("NoCAbs" => " don't build CAB files"), #NC ("DELALL" => " delete all src, resync/rebuild SLM project -be careful with this-"), #DELALL ("AllProj" => " include `All` SAPI5 project from everything.dsw workspace build"), #AP ("DATA" => " include SR data file build"), #DATA ("BvtDlls" => " include BVT dependency DLLs build"), #BD );
# custom vars local(@lSampleExeDirs) = ($SAPIROOT."\\test\\audio", $SAPIROOT."\\test\\dogfood", $SAPIROOT."\\sdk\\samples\\cpp\\aoesapi", $SAPIROOT."\\sdk\\samples\\cpp\\basictts", $SAPIROOT."\\sdk\\samples\\cpp\\dictpad", $SAPIROOT."\\sdk\\samples\\cpp\\speak", $SAPIROOT."\\sdk\\samples\\cpp\\ttshello", $SAPIROOT."\\sdk\\samples\\cpp\\wintts", $SAPIROOT."\\QA\\SAPI\\Project\\apps\\SpComp\\kato", $SAPIROOT."\\QA\\SAPI\\Project\\apps\\ttsapp", # $SAPIROOT."\\QA\\SAPI\\source\\tools\\tux", $SAPIROOT."\\QA\\SAPI\\Project\\apps\\SpComp"); local(@lBVTCompKills) = (); local(@lBVTCompBFails) = ();
local($sCABIni) = $SAPIROOT."\\build\\cabs.ini"; local($sCABDir) = $SAPIROOT."\\cabs";
local($bBVTFailed) = 0;
BeginBuild($SAPIROOT, @_);
# UPDATE SECTION # check whether build needs to be built at all (if UPDATE opt selected)
if ($bOfficialBuild && IsMemberOf("UPDATE", @lArgs) && IsMemberOf("RESYNC")) { $fhSyncLog = OpenFile($sSyncLog, "read"); if ($fhSyncLog) { my($text); my($bSomethingHappened) = 0; for ( ; !$fhSyncLog->eof() ; $text = $fhSyncLog->getline()) { if ($text =~ /./) #if anything at all happened { $bSomethingHappened = 1; } }
if (!$bSomethingHappened) { PrintL("\nNo changes to SLM tree recorded (build unnecessary) ...\n\n", PL_LARGE | PL_BOLD); EndBuild(); return(1); } } CloseFile($fhSyncLog); }
# DELALL SECTION # delete all files in SAPI5 enlistment and ssync, slmck (if DELALL opt selected)
if (IsMemberOf("DELALL", @lArgs)) { PrintL("\nPerforming Full SAPI5 SLM Directory Rebuild ...\n\n", PL_LARGE | PL_BOLD);
BEGIN_NON_CRITICAL_SECTION(); BEGIN_DHTML_NODE(); if ($bOfficialBuild) { GrabCookie("r"); }
CleanUpSAPI(); PrintToFile($sSyncLog, "\n\n"."*" x (20)." DIRECTORY REBUILD LOG "."*" x (20)."\n\n"); ExecuteAndOutputToFile($cmdSync." -rf", $sSyncLog); PrintToFile($sSyncLog, "\n\n"."*" x (50)."\n\n"); ExecuteAndOutputToFile($cmdSlmck." -rf", $sSyncLog); if ($bOfficialBuild) { FreeCookie(); } END_DHTML_NODE(); END_NON_CRITICAL_SECTION(); }
# REBUILD SECTION # delete all standard build target dirs (if REBUILD opt selected)
if (IsMemberOf("REBUILD", @lArgs)) { PrintL("\nCleaning up ...\n\n", PL_LARGE | PL_BOLD); BEGIN_DHTML_NODE(); local(@lTargetDirs) = (); foreach $build (@lBuilds) { push(@lTargetDirs, $build."_".PROC); push(@lTargetDirs, $build); } DelOld(cwd(), *lTargetDirs); END_DHTML_NODE(); }
# UPDATE VERSION INFO PrintL("\nUpdating version info ...\n\n", PL_LARGE | PL_BOLD); PushD("build"); SetReadOnly("sapiver.h", 0); my($sForkNumber) = "00";
PrintL("\nUpdating version for header to ".$sForkNumber.".".$sBuildNumber."\n", PL_BOLD); EchoedUnlink("sapiver.h");
my($fhNewVersion) = OpenFile("sapiver.h", "write"); my($fhVersionHead) = OpenFile("verhead.h", "read"); if ($fhNewVersion && $fhVersionHead) { while (!$fhVersionHead->eof()) { $fhNewVersion->print($fhVersionHead->getline()); } CloseFile($fhVersionHead); $fhNewVersion->print("#define VERSION \"5.00.".$sForkNumber.".".$sBuildNumber."\"\n"); $fhNewVersion->print("#define VER_FILEVERSION_STR \"5.00.".$sForkNumber.".".$sBuildNumber."\0\"\n"); $fhNewVersion->print("#define VER_FILEVERSION 5,00,".$sForkNumber.",".$sBuildNumber."\n"); $fhNewVersion->print("#define VER_PRODUCTVERSION_STR \"5.00.".$sForkNumber.".".$sBuildNumber."\0\"\n"); $fhNewVersion->print("#define VER_PRODUCTVERSION 5,00,".$sForkNumber.",".$sBuildNumber."\n"); my($fhVersionTail) = OpenFile("vertail.h", "read"); if ($fhVersionTail) { while (!$fhVersionTail->eof()) { $fhNewVersion->print($fhVersionTail->getline()); } CloseFile($fhVersionTail); } CloseFile($fhNewVersion); SetReadOnly("sapiver.h", 1); } else { PrintL("Could not update version info\n", PL_BIGERROR); }
PopD(); #"build"
# BUILD LIST OF ARGS FOR BUILDCOMPONENTVC
local(@lBuildComponentArgs) = (); if (IsMemberOf("REBUILD", @lArgs)) { push(@lBuildComponentArgs, "REBUILD"); } if (IsMemberOf("SHIP", @lArgs)) { push(@lBuildComponentArgs, "CONFIG=SHIP"); } @lBuildComponentArgs = Union(*lBuildComponentArgs, *lBuilds); # push(@lBuildComponentArgs, PROC);
############################## PRECOPY ################################
if (!$bNoCopy) { if ($sDropDir !~ /\d\d\d\d$/) # ensure that we don't accidentally delete/copy to server root { PrintL("Fatal: Drop dir '".$sDropDir."' is not formatted correctly, skipping all copy operations\n", PL_BIGERROR); push(@lArgs, "NOCOPY"); $bNoCopy = 1; } else { if (IsDirectory($sDropDir)) { PrintL("\nDeleting old build ".$sBuildNumber." from drop share ...\n\n", PL_SUBHEADER);
BEGIN_DHTML_NODE(); Delnode($sDropDir); END_DHTML_NODE(); Execute($cmdWebUpdate); }
PrintL("\nCreating Destination Directories ...\n\n", PL_SUBHEADER); foreach $buildtype (MatchShipBuilds("DEBUG", "RELEASE")) { EchoedMkdir($sDropDir."\\".$buildtype."\\bin\\".PROC); EchoedMkdir($sDropDir."\\".$buildtype."\\cab\\".PROC); EchoedMkdir($sDropDir."\\".$buildtype."\\map_sym\\".PROC); } EchoedMkdir($sDropDir."\\release\\bvt\\".PROC); EchoedMkdir($sDropDir."\\src\\tts\\msttsdrv\\voices"); EchoedMkdir($sDropDir."\\src\\sr"); EchoedMkdir($sDropDir."\\src\\include"); EchoedMkdir($sDropDir."\\src\\sapi"); PrintL("\n\n"); } }
############################### BUILD SAPI5 ##################################
if (IsMemberOf("ALLPROJ", @lComponents)) { PrintL("\nBuilding SAPI v".$nMajorVersion.".".$nMinorVersion." ...\n\n", PL_SUBHEADER);
PushD($SAPIROOT."\\Workspaces"); BuildComponentVC("everything.dsw", "build.ini", @lBuildComponentArgs); PopD(); #$SAPIROOT."\\Workspaces"
PrintL("\nCreating the symbol files ...\n\n", PL_SUBHEADER);
PushD($SAPIROOT."\\src\\tts\\msttsdrv"); foreach $buildtype (MatchShipBuilds("DEBUG", "RELEASE")) { PushD($buildtype."_".PROC); Execute("mapsym spttseng.map"); PopD(); #$buildtype"_".$PROC } PopD(); #$SAPIROOT."\\src\\tts\\msttsdrv
PushD($SAPIROOT."\\src\\sapi"); foreach $buildtype (MatchShipBuilds("DEBUG", "RELEASE")) { PushD($buildtype."_".PROC); Execute("mapsym sapi.map"); PopD(); #$buildtype."_".$PROC } PopD(); #$SAPIROOT."\\src\\sapi" }
########################### BUILD SR DATA FILES ##############################
if (IsMemberOf("DATA", @lComponents)) { PrintL("\nBuilding SR data files ...\n\n", PL_LARGE | PL_BOLD); PushD($SAPIROOT."\\src\\sr\\engine\\datafiles"); BuildComponent("BUILDDRV=".$SAPIROOT."\\src\\sr", "SR Engine", "DEBUG"); PopD(); #$SAPIROOT."\\src\\sr\\engine\\datafiles" }
########################### BUILD BVT DLLS FILES #############################
# add BVTs here but note the directory that they are being built in # (if you need another, add it below like srengbvt)
if (IsMemberOf("BVTDLLS", @lComponents)) { PrintL("\nBuilding BVT DLLs ...\n\n", PL_SUBHEADER);
BEGIN_NON_CRITICAL_SECTION(); PushD($SAPIROOT."\\QA\\SAPI\\Project\\components"); foreach $bvt ("ctestisptokenui", "ttseng", "SRTEngine", "testengineext", "TEngAlt") { if (BuildComponentVC($bvt.".dsp", $bvt." - Win32 Debug", @lBuildComponentArgs)) { if (!$bNoCopy) { EchoedCopy($SAPIROOT."\\QA\\SAPI\\Project\\components\\debug\\".$bvt.".dll", $sDropDir."\\debug\\bin\\".PROC); } } else { push(@lBVTCompBFails, $bvt); ++$bBVTFailed; } } PopD(); #$SAPIROOT."\\QA\\SAPI\\Project\\components"
PushD($SAPIROOT."\\QA\\SAPI\\Project\\BVT"); foreach $bvt ("ttsbvt", "srbvt", "lexbvt", "rmbvt", "gramcompbvt", "cfgengbvt", "ambvt") { if (BuildComponentVC($bvt.".dsp", $bvt." - Win32 Debug", @lBuildComponentArgs)) { if (!$bNoCopy) { EchoedCopy($SAPIROOT."\\QA\\SAPI\\Project\\BVT\\debug\\".$bvt.".dll", $sDropDir."\\debug\\bin\\".PROC); } } else { push(@lBVTCompBFails, $bvt); ++$bBVTFailed; } } PopD(); #$SAPIROOT."\\QA\\SAPI\\Project\\BVT"
if (!$bNoCopy) { EchoedCopy($SAPIROOT."\\QA\\SAPI\\data\\sol*.cfg", $sDropDir."\\debug\\bin\\".PROC); EchoedCopy($SAPIROOT."\\QA\\SAPI\\data\\thankyou.cfg", $sDropDir."\\debug\\bin\\".PROC); }
PushD($SAPIROOT."\\QA\\SR\\SREngBVT"); if (BuildComponentVC("srengbvt.dsp", "srengbvt - Win32 Debug", @lBuildComponentArgs)) { if (!$bNoCopy) { EchoedCopy($SAPIROOT."\\QA\\SR\\SREngBVT\\debug\\srengbvt.dll", $sDropDir."\\debug\\bin\\".PROC); } } else { push(@lBVTCompBFails, "srengbvt"); ++$bBVTFailed; } PopD(); #$SAPIROOT."\\QA\\SR\\SREngBVT" END_NON_CRITICAL_SECTION(); }
############################## BUILD CABS ################################
if (!IsMemberOf("NOCABS", @lArgs)) { my($startTime) = time(); if (BuildCABs($sCABIni, $sCABDir)) { my($stopTime) = time(); PrintLTip("All CABs built successfully\n", "CAB Build Time: ".FmtDeltaTime($stopTime - $startTime), PL_GREEN | PL_MSG | PL_BOLD); } else { my($stopTime) = time(); PrintLTip("CABs Build FAILED\n", "CAB Build Time: ".FmtDeltaTime($stopTime - $startTime), PL_BIGERROR); # TODO: split MSI/CAB -> $bcStatus |= BC_CABFAILED; } }
############################## BUILD MSI #################################
if (!IsMemberOf("NOMSI", @lArgs)) { my($startTime) = time(); if (BuildMSI($sMSIDir)) { my($stopTime) = time(); PrintLTip("MSI Build Successful\n", "MSI Build Time: ".FmtDeltaTime($stopTime - $startTime), PL_GREEN | PL_MSG | PL_BOLD); } else { my($stopTime) = time(); PrintLTip("MSI Build FAILED\n", "MSI Build Time: ".FmtDeltaTime($stopTime - $startTime), PL_BIGERROR); $bcStatus |= BC_CABFAILED; } }
################################# COPY ###################################
if (!$bNoCopy && IsMemberOf("ALLPROJ", @lComponents)) { PrintL("\nCopying Non-MSI Files to Server\n\n", PL_SUBHEADER);
BEGIN_DHTML_NODE();
foreach $buildtype ('debug', 'release') { # Copy the core dlls EchoedCopy($SAPIROOT."\\src\\tts\\msttsdrv\\".$buildtype."_".PROC."\\*.dll", $sDropDir."\\".$buildtype."\\bin\\".PROC);
# Copy pdb files for the core dlls EchoedCopy($SAPIROOT."\\src\\tts\\msttsdrv\\".$buildtype."_".PROC."\\spttseng.pdb", $sDropDir."\\".$buildtype."\\bin\\".PROC); EchoedCopy($SAPIROOT."\\src\\sapi\\".$buildtype."_".PROC."\\sapi.pdb", $sDropDir."\\".$buildtype."\\bin\\".PROC); EchoedCopy($SAPIROOT."\\src\\sapi\\".$buildtype."_".PROC."\\*.dll", $sDropDir."\\".$buildtype."\\bin\\".PROC);
# Copy map and symbol files foreach $ext ('map', 'sym') { EchoedCopy($SAPIROOT."\\src\\tts\\msttsdrv\\".$buildtype."_".PROC."\\*.".$ext, $sDropDir."\\".$buildtype."\\map_sym\\".PROC); EchoedCopy($SAPIROOT."\\src\\sapi\\".$buildtype."_".PROC."\\*.".$ext, $sDropDir."\\".$buildtype."\\map_sym\\".PROC); }
# Copy the sample programs foreach $dir (@lSampleExeDirs) { if (!IsDirectory($dir)) { PrintL("Warning : Could not copy files from ".$dir."\n", PL_BIGWARNING); PrintMsgBlock("directory does not exist, has it moved? (update \@lSampleExeDirs in buildall.pm)\n"); } elsif (IsDirectory($dir."\\".$buildtype)) { foreach $ext ('pdb', 'exe', 'dll') { EchoedCopy($dir."\\".$buildtype."\\*.".$ext, $sDropDir."\\".$buildtype."\\bin\\".PROC); } } elsif (IsDirectory($dir."\\".$buildtype."_".PROC)) { foreach $ext ('pdb', 'exe', 'dll') { EchoedCopy($dir."\\".$buildtype."_".PROC."\\*.".$ext, $sDropDir."\\".$buildtype."\\bin\\".PROC); } } else { PrintL("Warning : Could not copy ".$dir."\\".$buildtype."\n", PL_BIGWARNING); PrintMsgBlock("no builds exist in ".$buildtype." or ".$buildtype."_".PROC." (did it fail to build?)\n"); } } }
# Copy the sources (x86 only) EchoedCopy($SAPIROOT."\\sdk\\include\\*.c", $sDropDir."\\src\\include"); EchoedCopy($SAPIROOT."\\sdk\\include\\*.h*", $sDropDir."\\src\\include"); EchoedCopy($SAPIROOT."\\ddk\\include\\*.c", $sDropDir."\\src\\include"); EchoedCopy($SAPIROOT."\\ddk\\include\\*.h*", $sDropDir."\\src\\include"); EchoedCopy($SAPIROOT."\\sdk\\idl\\*.idl", $sDropDir."\\src\\include");
foreach $fileType ("*.d*", "*.c*", "*.h*", "*.r*", "*.bmp") { EchoedCopy($SAPIROOT."\\src\\sapi\\".$fileType, $sDropDir."\\src\\sapi"); }
foreach $fileType ("*.d*", "*.c*", "*.h*", "*.r*", "*.idl") { EchoedCopy($SAPIROOT."\\src\\tts\\msttsdrv\\".$fileType, $sDropDir."\\src\\tts\\msttsdrv"); }
# TODO: internal xcopy procedure Execute("xcopy ".$SAPIROOT."\\src\\sr ".$sDropDir."\\src\\sr \/is \/exclude:".$SAPIROOT."\\build\\srex.txt");
# Copy the voice data EchoedCopy($SAPIROOT."\\src\\tts\\msttsdrv\\voices\\*.vData", $sDropDir."\\src\\tts\\msttsdrv\\voices"); EchoedCopy($SAPIROOT."\\src\\tts\\msttsdrv\\voices\\*.vDef", $sDropDir."\\src\\tts\\msttsdrv\\voices");
END_DHTML_NODE(); }
PrintL("\n");
if ($bOfficialBuild) { # Update web page now in case BVTs hang. Then update Web Page again after BVTs run. Execute($cmdWebUpdate); }
########################################## RUN BVTS ##########################################
$g_nBVTPassedPercent = 0;
if (IsMemberOf("BVT", @lArgs) && !IsMemberOf("NOMSI", @lArgs) && !($bcStatus & BC_CABFAILED)) { Execute("msiexec /x \"".$sMSIDir."\\release\\SDK\\Output\\DISK_1\\Sp5SDK.msi\" /qn"); # uninstall first Execute("msiexec /i \"".$sMSIDir."\\release\\SDK\\Output\\DISK_1\\Sp5SDK.msi\" /qn"); # install
my ($startTime) = time(); Delnode($SAPIROOT."\\bvt"); EchoedMkdir($SAPIROOT."\\bvt"); PushD($SAPIROOT."\\bvt"); if (SetLocalGlobalsAndBegin("RunBVT", "__IGNORE", "ALLCOMP", "LOCAL", "QUIET", $sBuildNumber, (IsMemberOf("MAIL", @lArgs) ? "FAILMAIL" : ""))) { PrintL("BVTs report success (".$g_nBVTPassedPercent."%)", PL_GREEN | PL_MSG | PL_BOLD); } else { PrintL("BVTs report failure (".$g_nBVTPassedPercent."%)", PL_BIGERROR); } PrintMsgBlock("<a href=\"\\\\b11nlbuilds\\sapi5\\Web.Files\\logs\\runbvt\\runbvt".PROC.$sBuildNumber.".html\">View BVT log<\/a>");
PopD(); } else { $g_nBVTPassedPercent = "SKIPPED"; #NaN, cheap fix } CheckTypos();
EndBuild();
return(!($bcStatus & BC_FAILED)); }
$__BUILDALLPM = 1; 1;
|