deprecated/buildtools/buildsystemtools/BuildServer.pl
changeset 655 3f65fd25dfd4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/BuildServer.pl	Mon Oct 18 16:16:46 2010 +0800
@@ -0,0 +1,125 @@
+# Copyright (c) 2003-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:
+# Script to send commands to 1 or more Build Clients to perform parallel builds
+# 
+#
+
+use strict;
+use FindBin;    # for FindBin::Bin
+use Getopt::Long;
+use File::Copy;
+
+# Add the directory contain this perl script into the path to find modules
+use lib $FindBin::Bin;
+
+use BuildServer;
+use ParseXML;
+
+# Turn on per command Buffering of STDOUT, so the log files are not so far behind what is actually happening
+$| = 1;
+
+# Process the commandline
+my ($iDataSource, $iPort, $iLogFile, $iEnvSource, $iConnectionTimeout, $iSocketConnections) = ProcessCommandLine();
+
+# Create socket to server
+&BuildServer::Start($iDataSource, $iPort, $iLogFile, $iEnvSource, $iConnectionTimeout, $iSocketConnections);
+
+
+# ProcessCommandLine
+#
+# Inputs
+#
+# Outputs
+# $iPort (Port to listen on for Build Clients)
+#
+# Description
+# This function processes the commandline
+
+sub ProcessCommandLine {
+  my ($iHelp, @iPort, $iDataSource, $iLogFile, $iEnvSource, $iConnectionTimeout, $iSocketConnections);
+  GetOptions('h' => \$iHelp, 'd=s' =>\$iDataSource, 'p=i' => \@iPort, 'l=s' => \$iLogFile, 'e=s' =>\$iEnvSource, 't=s' =>\$iConnectionTimeout, 'c=s' =>\$iSocketConnections);
+
+  if (($iHelp) || (scalar(@iPort) < 0) || (!defined $iDataSource) || (!defined $iLogFile))
+  {
+    Usage();
+  } elsif (! -e $iDataSource) {
+    die "Cannot open $iDataSource";
+  }
+  if ((defined $iEnvSource) && (! -e $iEnvSource))
+  {
+    die "Cannot open $iEnvSource";
+  }
+  
+  &backupFile($iLogFile) if (-e $iLogFile);
+  
+  return($iDataSource,\@iPort,$iLogFile, $iEnvSource, $iConnectionTimeout, $iSocketConnections);
+}
+
+# backupFile
+#
+# Inputs
+# $iFile - filename to backup
+#
+# Outputs
+#
+# Description
+# This function renames a file with the .baknn extension
+sub backupFile
+{
+  my ($iFile) = @_;
+  
+  my ($iBak) = $iFile.".bak";
+  my ($i, $freefilename);
+  # Loop until you find a free file name by increamenting the number on the end of the .bak extension
+  while (!$freefilename)
+  {
+    if (-e $iBak.$i)
+    {
+      $i++;
+    } else {
+      $iBak .= $i;
+      $freefilename = 1;
+    }
+  }
+  print "WARNING: $iFile already exists, creating backup of orignal with new name of $iBak\n";
+  move($iFile,$iBak) or die "Could not backup $iFile to $iBak because of: $!\n";
+}
+
+# Usage
+#
+# Output Usage Information.
+#
+
+sub Usage {
+  print <<USAGE_EOF;
+
+  Usage: BuildServer.pl [options]
+
+USAGE_EOF
+print "  Version: ".&BuildServer::GetServerVersion()."\n";
+print <<USAGE_EOF;
+
+  options:
+
+  -h  help
+  -p  Port number to listen on for Build Clients [Multiple allowed]
+  -t  Time between connection attempts [Optional - default 0 seconds]
+  -c  Number of connection attempts per port [Optional - default infinite]
+  -d  Data Source (XML command file)
+  -l  Log file for output from commands run on the Build Client
+  -e  Use Environment of this data source (XML command file)
+      The Environment in the main data source takes precedence
+USAGE_EOF
+  exit 1;
+}