sub DoProductBuilds()

in build/scripts/automation/winbldroutines.pm [866:1035]


sub DoProductBuilds
{
  print "DEBUG: in DoProductBuilds()\n";
  my $this = shift;
  my $srcpath = $this->SrcPath();
  my $partner = $this->Partner();
  my $configlist = $this->ConfigList();
  my $productlist = $this->ProductList();
  my $datewisedir = $this->DatewiseDir();
  my $branchname = $this->Branch();
  my $MajorVersion = $this->GetMajorVersion();
  my $MinorVersion = $this->GetMinorVersion();
  my $buildversion = "${MajorVersion}.${MinorVersion}";
  my $pwd = $this->GetThisScriptDir();

  my ($solnfile,$project,$buildoutputdir,$logfile,$host_solnfile,$vacp_bldlogfile,$Log_bldlogfile,$hostagenthelpers_bldlogfile);
  
  foreach my $config (reverse sort @{$configlist})
  {
	my $draReturnCode = system($PowerShellPath ' -File "Copy_DRA_Binaries.ps1"', $branchname, $config );
  $draReturnCode = $draReturnCode >> 8;
    if ( $draReturnCode == 1 )
    {
        die "Failed executing Copy_DRA_Binaries.ps1.\n";
    }
	system($PowerShellPath ' -File "Copy_Vista_Drivers.ps1"', $branchname, $buildversion, $config );

	chdir "${srcpath}\\host";
	if (Log_Do("\"$msbuild_exe\" /t:restore /p:RestorePackagesConfig=true /p:Configuration=Release /p:Platform=Win32") != 0) {
		die "Failed to restore nuget pacakges for host.\n";
	}

    chdir "${srcpath}\\server";
	if (Log_Do("\"$msbuild_exe\" /t:restore /p:RestorePackagesConfig=true /p:Configuration=Release /p:Platform=x64") != 0) {
		die "Failed to restore nuget pacakges for server.\n";
	}
	chdir "$pwd";

	if (Log_Do("\"$mvss_exe\" ${srcpath}\\thirdparty\\sqlite3x\\sqlite3x.sln /project sqlite3x /build \"Release|Win32\" /out $logfile") != 0) {
		die "Failed to build Win32 sqlite3x.\n";
	}

	if (Log_Do("\"$mvss_exe\" ${srcpath}\\thirdparty\\sqlite3x\\sqlite3x.sln /project sqlite3x /build \"Release|X64\" /out $logfile") != 0) {
		die "Failed to build X64 sqlite3x.\n";
	}

	# workaround to generate the sqlite3x builds and copy to packages. this should be avoided by referring the libs from build path
	Log_Do("copy /Y ${srcpath}\\thirdparty\\sqlite3x\\sqlite3x\\lib\\win32\\Release\\sqlite3x.lib ${srcpath}\\host\\packages\\sqlite3x.0.0.6\\lib\\win32\\release\\");
	Log_Do("copy /Y ${srcpath}\\thirdparty\\sqlite3x\\sqlite3x\\lib\\win32\\Release\\sqlite3x.pdb ${srcpath}\\host\\packages\\sqlite3x.0.0.6\\lib\\win32\\release\\");
	Log_Do("copy /Y ${srcpath}\\thirdparty\\sqlite3x\\sqlite3x\\lib\\x64\\Release\\sqlite3x.lib ${srcpath}\\host\\packages\\sqlite3x.0.0.6\\lib\\x64\\release\\");
	Log_Do("copy /Y ${srcpath}\\thirdparty\\sqlite3x\\sqlite3x\\lib\\x64\\Release\\sqlite3x.pdb ${srcpath}\\host\\packages\\sqlite3x.0.0.6\\lib\\x64\\release\\");

    foreach my $product (@{$productlist})
    {
	$project = $this->GetBuildProjectName($product);
	$buildoutputdir = $this->GetBuildIssDir($product);
	$logfile = "${srcpath}\\${buildoutputdir}\\BuildLog_${product}_${config}_${partner}.txt";
	$solnfile = $this->GetSolnFileName($product);
	unlink "$logfile" if -e "$logfile";
	
	if (uc($product) eq "CX")
	{
		foreach my $projectname ("CSAuthModule")
		{
			if (Log_Do("\"$mvss_exe\" ${srcpath}\\$solnfile /project $projectname /clean \"$config|x64\" /out $logfile") == 0) {
			print "\n\n $projectname project clean successful for configuration $config for $product in $addr\n\n";
			} else {
			send_mail($failure_alert_ids,'Windows build failure',"$projectname project clean failed for configuration $config for $product in $addr",1);
			die "\n\n $projectname project clean failed for configuration $config for $product in $addr";
			}
			if (Log_Do("\"$mvss_exe\" ${srcpath}\\$solnfile /project $projectname /build \"$config|x64\" /out $logfile") == 0 ) {
				Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
				print "\n\n$config build from $branchname is successful for $product for $projectname in $addr\n\n";
			} else {
				Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
				send_mail($failure_alert_ids,'Windows build failure',"$config build from $branchname is failed for $product for $projectname in $addr",1);
				die "\n\n$config build from $branchname is failed for $product for $projectname in $addr";
			}
		}
		
	}
	
	if (uc($product) ne "PSMSI")
	{
		# Main product build
	if (Log_Do("\"$mvss_exe\" ${srcpath}\\$solnfile /project $project /build \"$config|Win32\" /out $logfile") == 0 ) {
		Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
		Log_Do("if exist $vacp_bldlogfile copy /Y $vacp_bldlogfile ${datewisedir}\\${config}\\logs");
		Log_Do("if exist $Log_bldlogfile copy /Y $Log_bldlogfile ${datewisedir}\\${config}\\logs");
		Log_Do("if exist $hostagenthelpers_bldlogfile copy /Y $hostagenthelpers_bldlogfile ${datewisedir}\\${config}\\logs");
		print "\n\n$config build from $branchname is successful for $product in $addr\n\n";			
	} else {
		Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
		Log_Do("if exist $vacp_bldlogfile copy /Y $vacp_bldlogfile ${datewisedir}\\${config}\\logs");
		Log_Do("if exist $Log_bldlogfile copy /Y $Log_bldlogfile ${datewisedir}\\${config}\\logs");
		Log_Do("if exist $hostagenthelpers_bldlogfile copy /Y $hostagenthelpers_bldlogfile ${datewisedir}\\${config}\\logs");
		send_mail($failure_alert_ids,'Windows build failure',"$config build from $branchname is failed for $product in $addr",1);
		die "\n\n$config build from $branchname is failed for $product in $addr";
	}
	}
	

	if (uc($product) eq "UA") {
			
			foreach my $projectname ("DiskFlt")
			{
				foreach my $configuration ("Win7", "Win8", "Win8.1")
				{
					Log_Do("\"$mvss_exe\" ${srcpath}\\$solnfile /project $projectname /clean \"$configuration $config|Win32\" /out $logfile");
					if (Log_Do("\"$mvss_exe\" ${srcpath}\\$solnfile /project $projectname /build \"$configuration $config|Win32\" /out $logfile") == 0 ) {
						Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
						print "\n\n$config build from $branchname is successful for $product for $projectname in $addr\n\n";
					} else {
						Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
						send_mail($failure_alert_ids,'Windows build failure',"$config build from $branchname is failed for $product for $projectname in $addr",1);
					}
					
					Log_Do("\"$mvss_exe\" ${srcpath}\\$solnfile /project $projectname /clean \"$configuration $config|x64\" /out $logfile");
					if (Log_Do("\"$mvss_exe\" ${srcpath}\\$solnfile /project $projectname /build \"$configuration $config|x64\" /out $logfile") == 0 ) {
						Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
						print "\n\n$config build from $branchname is successful for $product for $projectname in $addr\n\n";
					} else {
						Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
						send_mail($failure_alert_ids,'Windows build failure',"$config build from $branchname is failed for $product for $projectname in $addr",1);
					}
				}
			}
			
			foreach my $projectname ("cxps", "vacp", "InMageVssProvider")
			{
				if (Log_Do("\"$mvss_exe\" ${srcpath}\\$solnfile /project $projectname /clean \"$config|x64\" /out $logfile") == 0) {
                  print "\n\n $projectname project clean successful for configuration $config for $product in $addr\n\n";
                } else {
                  send_mail($failure_alert_ids,'Windows build failure',"$projectname project clean failed for configuration $config for $product in $addr",1);
                  die "\n\n $projectname project clean failed for configuration $config for $product in $addr";
                }
				if (Log_Do("\"$mvss_exe\" ${srcpath}\\$solnfile /project $projectname /build \"$config|x64\" /out $logfile") == 0 ) {
						Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
						print "\n\n$config build from $branchname is successful for $product for $projectname in $addr\n\n";
					} else {
						Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
						send_mail($failure_alert_ids,'Windows build failure',"$config build from $branchname is failed for $product for $projectname in $addr",1);
						die "\n\n$config build from $branchname is failed for $product for $projectname in $addr";
				}
	}
	
			my $ComponentDriverDITestsolnfile = 'ComponentDriverDITest.sln';
			Log_Do("\"$mvss_exe\" ${srcpath}\\host\\tests\\$ComponentDriverDITestsolnfile /clean \"$config|Win32\" /out $logfile");
			if (Log_Do("\"$mvss_exe\" ${srcpath}\\host\\tests\\$ComponentDriverDITestsolnfile /build \"$config|Win32\" /out $logfile") == 0 ) {
				Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
				print "\n\n$config build from $branchname is successful for $product for $ComponentDriverDITestsolnfile in $addr\n\n";
			} else {
				Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
				send_mail($failure_alert_ids,'Windows build failure',"$config build from $branchname is failed for $product for $ComponentDriverDITestsolnfile in $addr",1);
				die "\n\n$config build from $branchname is failed for $product for $ComponentDriverDITestsolnfile in $addr";
			}
			my $DITestsolnfile = 'DITests.sln';
			Log_Do("\"$mvss_exe\" ${srcpath}\\host\\tests\\DITests\\$DITestsolnfile /clean \"$config|Win32\" /out $logfile");
			if (Log_Do("\"$mvss_exe\" ${srcpath}\\host\\tests\\DITests\\$DITestsolnfile /build \"$config|Win32\" /out $logfile") == 0 ) {
				Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
				print "\n\n$config build from $branchname is successful for $product for $DITestsolnfile in $addr\n\n";
			} else {
				Log_Do("if exist $logfile copy /Y $logfile ${datewisedir}\\${config}\\logs");
				send_mail($failure_alert_ids,'Windows build failure',"$config build from $branchname is failed for $product for $DITestsolnfile in $addr",1);
				die "\n\n$config build from $branchname is failed for $product for $DITestsolnfile in $addr";
			}
    }
  }
}
}