--- a/bldsystemtools/commonbldutils/startbuild.pl Fri Apr 16 16:10:01 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,295 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-#!perl -w
-#
-# StartBuild.pl
-#
-# Script to bootstrap the starting of Daily and Test builds
-# Uses a config file containing details of which test source is needed.
-# Performs a delta sync to the baseline changelist number, copies only the
-# necessary files to clean-src, then syncs down any other files specified
-# in the config file into clean-src.
-
-use strict;
-use File::Copy;
-use Getopt::Long;
-use FindBin;
-use Sys::Hostname;
-use lib "$FindBin::Bin/..";
-use BxCopy;
-use PreBldChecks;
-use BuildLaunchChecks;
-
-use PC_P4Table;
-my $gXMLEnvRef; # Reference to hash containing environment data read from the XML file
-my %gBuildSpec;
-
-# default opts are daily manual
-my $CFG_BUILD_SUBTYPE = "Daily";
-
-# Process the commandline
-my ($iBuildSubTypeOpt) = ProcessCommandLine();
-
-my $hostname = &GetHostName();
-
-my $PUBLISH_LOCATION_DAILY = "\\\\builds01\\devbuilds";
-my $PUBLISH_LOCATION_TEST = "\\\\builds01\\devbuilds\\test_builds";
-my $BUILDS_LOCAL_DIR = "d:\\builds";
-
-# Define the source root directory (assumes it's 3 levels up)
-my $sourcedir = Cwd::abs_path("$FindBin::Bin\\..\\..\\..\\..");
-
-# Define the pathnames for the XML files
-my $BuildLaunchXML = "$sourcedir\\os\\buildtools\\bldsystemtools\\commonbldutils\\BuildLaunch.xml";
-my $PostBuildXML = "$sourcedir\\os\\buildtools\\bldsystemtools\\commonbldutils\\PostBuild.xml";
-
-sub main() {
-
- print "Starting\n ";
-
- prepBuildLaunch();
- doLoadEnv(); # populate gBuildEnv with ENV
- doSubstDrive();
- doLogsDirCreate();
- doManualBuild(); # spawn build clients and do build
-}
-
-# load the env from BuildLaunch.xml
-sub doLoadEnv() {
-
- # User may have edited environment variables above (see call to Notepad)
- # So re-read the XML file and store current values in %$gXMLEnvRef
- $gXMLEnvRef = PreBldChecks::XMLEnvironment($BuildLaunchXML);
-
- $gBuildSpec{'Product'} = $gXMLEnvRef->{'Product'};
- $gBuildSpec{'SnapshotNumber'} = $gXMLEnvRef->{'SnapshotNumber'};
- $gBuildSpec{'ChangelistNumber'} = $gXMLEnvRef->{'ChangelistNumber'};
- $gBuildSpec{'BuildsDirect'} = $gXMLEnvRef->{'BuildsDirect'};
- $gBuildSpec{'Platform'} = $gXMLEnvRef->{'Platform'};
- $gBuildSpec{'BuildBaseName'} = 'Symbian_OS_v'.$gBuildSpec{'Product'};
- $gBuildSpec{'ThisBuild'} = $gBuildSpec{'SnapshotNumber'}."_".$gBuildSpec{'BuildBaseName'};
- $gBuildSpec{'LogsDir'} = $gXMLEnvRef->{'LogsDir'};
- $gBuildSpec{'BuildDir'} = $gXMLEnvRef->{'BuildDir'}; # substed drive letter
- $gBuildSpec{'BuildsDirect'} = $gXMLEnvRef->{'BuildsDirect'}; # build dir
- $gBuildSpec{'ThisBuildDir'} = $gBuildSpec{'BuildsDirect'} . $gBuildSpec{'ThisBuild'};
- $gBuildSpec{'Type'} = $gXMLEnvRef->{'Type'};
- $gBuildSpec{'CurrentCodeline'} = $gXMLEnvRef->{'CurrentCodeline'};
- $gBuildSpec{'BuildSubType'} = $gXMLEnvRef->{'BuildSubType'};
- $gBuildSpec{'SubstDir'} = $gXMLEnvRef->{'SubstDir'};
- $gBuildSpec{'CleanSourceDir'} = $gXMLEnvRef->{'CleanSourceDir'};
-
- doValidate();
-}
-
-#
-# Output warnings for any missing attributes. If any
-# are missing, the output a RealTimeBuild ERROR to halt the build
-#
-sub doValidate() {
-
- # 1. validate all env vars are set
- # Note: Validate of TestBuild.cfg, not done here
- my $iWarnCount = 0;
- my $key;
- my $value;
-
- while(($key, $value) = each(%gBuildSpec)) {
-
- # do something with $key and $value
- if ($value eq "") {
- print "\nWARNING: Attribute $key is missing from Specification ";
- $iWarnCount++;
- }
- }
-
- die "\nERROR: RealTimeBuild: Attributes missing from BuildLaunch.xml" if $iWarnCount > 0;
-}
-
-# Create Logs dir
-sub doLogsDirCreate() {
-
- if (!(-e $gBuildSpec{'LogsDir'})) {
-
- print "=== CREATING LOGS DIRECTORY ===\n";
-
- my $cmd = "mkdir $gBuildSpec{'LogsDir'}";
- system($cmd);
-
- } else {
- print "REMARK: Logs dir " .$gBuildSpec{'LogsDir'}."already exists!\n";
- }
-}
-
-#
-sub doSubstDrive() {
-
- # Ensure trailing backslashes are removed
- my $iSubstDrv = $gBuildSpec{'BuildDir'};
-
- $iSubstDrv =~ s/\\{1}$//;
-
- print "=== CREATING BUILD DIRECTORY ===\n";
-
- mkdir($gBuildSpec{'SubstDir'}, 0666) or die "ERROR: Could not create \"$gBuildSpec{'SubstDir'}\": $!";
-
- print "=== SUBST'ING BUILD DIRECTORY ===\n";
- `subst $iSubstDrv /d 2>&1`;
- system "subst $iSubstDrv $gBuildSpec{'SubstDir'} 2>&1" and die "ERROR: Could not subst \"$gBuildSpec{'SubstDir'}\" to \"substdrive\" : $!";
-
-
-}
-
-# Perform the manual build by running
-# 1. BuildLaunch.xml
-# 2. Core/Glue xml
-# 3. PostBuild.xml
-#
-sub doManualBuild() {
-
- # Start the BuildClients
- print "Starting the BuildClients\n";
- my $profile = 1;#($gProfile ? "-p" : "");
- system "start \"Launch BuildClient\" cmd /k perl $sourcedir\\os\\buildtools\\bldsystemtools\\buildsystemtools\\BuildClient.pl -d localhost:15000 -d localhost:15001 -d localhost:15002 -w 5 -c Launch $profile";
-
- #
- # BUILDING
- #
- print "=== Build started ===\n";
-
- # Start the BuildServer for the main build
- print "Starting the Launch BuildServer\n";
- my $command = "perl $sourcedir\\os\\buildtools\\bldsystemtools\\buildsystemtools\\buildserver.pl -p 15000 -p 15001 -p 15002 -t 5 -c 5 -d $BuildLaunchXML -l $gBuildSpec{'LogsDir'}\\".$gBuildSpec{'ThisBuild'}.".log";
- system ($command) and die "Error: $!";
-
- print "Starting the Glue BuildServer\n";
- my $gGlueXMLFile = $gBuildSpec{'BuildDir'} . '\\clean-src' . '\\os\\deviceplatformrelease\\symbianosbld\\cedarutils\\Symbian_OS_v' . $gBuildSpec{'Product'} . '.xml';
- $command = "perl $sourcedir\\os\\buildtools\\bldsystemtools\\buildsystemtools\\buildserver.pl -p 15000 -p 15001 -p 15002 -t 5 -c 5 -d $gGlueXMLFile -e $BuildLaunchXML -l $gBuildSpec{'LogsDir'}\\".$gBuildSpec{'BuildBaseName'}.".log";
- system ($command) and die "Error: $!";
-
- print "Starting the Postbuild BuildServer\n";
- $PostBuildXML = $gBuildSpec{'CleanSourceDir'} . '\\os\\buildtools\\bldsystemtools\\commonbldutils\\PostBuild.xml';
- $command = "perl $sourcedir\\os\\buildtools\\bldsystemtools\\buildsystemtools\\buildserver.pl -p 15000 -p 15001 -p 15002 -t 5 -c 5 -d $PostBuildXML -e $BuildLaunchXML -l $gBuildSpec{'LogsDir'}\\postbuild.log";
- system ($command) and die "Error: $!";
-
- print "=== Build finished ===\n";
-
- exit 0;
-}
-
-#
-sub prepBuildLaunch() {
-
- my %BuildLaunchCheckData;
-
- #
- # PREPARATION
- #
-
- # Make XML file writable
- print "Making BuildLaunch XML file writable\n";
- chmod(0666, $BuildLaunchXML) || warn "Warning: Couldn't make \"$BuildLaunchXML\" writable: $!";
-
- ($BuildLaunchCheckData{'Product'},
- $BuildLaunchCheckData{'SnapshotNumber'},
- $BuildLaunchCheckData{'PreviousSnapshotNumber'},
- $BuildLaunchCheckData{'ChangelistNumber'},
- $BuildLaunchCheckData{'CurrentCodeline'},
- $BuildLaunchCheckData{'Platform'},
- $BuildLaunchCheckData{'Type'}) = BuildLaunchChecks::GetUserInput();
-
- $BuildLaunchCheckData{'BCToolsBaseBuildNo'} = BuildLaunchChecks::GetBCValue(\%BuildLaunchCheckData);
-
- $BuildLaunchCheckData{'BuildsDirect'} = $BUILDS_LOCAL_DIR;
- $BuildLaunchCheckData{'BuildSubType'} = $CFG_BUILD_SUBTYPE;
- $BuildLaunchCheckData{'PreviousBuildPublishLocation'} = $PUBLISH_LOCATION_DAILY;
-
- # set publish location according to Build SubType
- if ($CFG_BUILD_SUBTYPE eq "Test") {
- $BuildLaunchCheckData{'PublishLocation'} = $PUBLISH_LOCATION_TEST;
- } else {
- $BuildLaunchCheckData{'PublishLocation'} = $PUBLISH_LOCATION_DAILY;
- }
-
- # validate and write any updates
- my($Warnings) = BuildLaunchChecks::CheckData(\%BuildLaunchCheckData);
- BuildLaunchChecks::UpdateXML($BuildLaunchXML, \%BuildLaunchCheckData, "");
-
- # Open XML file for verification
- print "Opening XML file(s) for verification\n";
- my $command = "start /wait notepad.exe ".$BuildLaunchXML;
- system($command) and die "Error: $!";
-}
-
-# Return hostname of this machine
-sub GetHostName
-{
- my ($iHost) = &hostname() =~ /(\S+?)\./;
- if (!defined($iHost))
- {
- # Not a fully qualified Hostname, use use raw name
- $iHost = &hostname();
- }
- return ($iHost);
-}
-
-
-# new process command line
-sub ProcessCommandLine {
- my ($iHelp);
-
- GetOptions('h' => \$iHelp,
- 't:s' => \$iBuildSubTypeOpt);
-
- if (($iHelp)) {
- Usage();
- } else {
-
- if ((defined $iBuildSubTypeOpt)) {
- $CFG_BUILD_SUBTYPE= "Test";
- }
- }
-
- return ($iBuildSubTypeOpt);
-}
-
-
-sub Usage {
- print <<USAGE_EOF;
-
- Usage: startbuild.pl [option]
-
- options:
-
- -h -- help
- -t [optional] Perform a TestBuild.
-
- - Additional source based upon testbuild.cfg will be
- obtained from Perforce. If testbuild.cfg is not correctly filled out
- it will fail during the syncsource stage.
- - TestBuild will be published to TestBuild area on devbuilds and to Test CBR Archive
-
-
-
-USAGE_EOF
- exit 1;
-}
-
-
-#########################################
-# s t a r t
-#########################################
-main();
-