build/tools/sw_version.pl
changeset 0 beb51793110d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build/tools/sw_version.pl	Mon Jan 18 21:35:57 2010 +0200
@@ -0,0 +1,297 @@
+#
+# 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:
+#
+#
+
+
+use strict;
+use Time::Local;
+use File::Copy;
+use Getopt::Long;
+
+
+# Parameters
+
+my $window_title;
+my @custom_version;
+my $S60_platform;
+my $S60_version;
+my $date;
+my $string;
+my $fwstring;
+my $file;
+my $bt;
+my $fwid;
+
+my $result = GetOptions(
+		'w=s' => \$window_title, 
+		'c=s' => \@custom_version, 
+		'p=s' => \$S60_platform, 
+		'pv=s' => \$S60_version,
+		'pd=s' => \$date, 
+		'bt' => \$bt,
+		'fw=s' => \$fwid);	
+if (!$result){&error_msg("Required Argument(s) are missing or wrong");}
+
+	
+#
+# Main program
+#
+if ((!defined $S60_platform) && (!scalar @custom_version) && (!defined $window_title) && (!defined $bt)) {
+	&error_msg("Required Argument(s) are missing");
+}
+
+if (defined $S60_platform) {
+	initial_s60();
+	sw_version(); 
+}
+elsif (scalar @custom_version){
+	initial_custom();
+	sw_version(); 
+}
+
+if (defined $window_title) {
+	window_title ();
+}
+
+if (defined $bt) {
+	bt_port_value();
+}
+
+if (defined $fwid) {
+	fwid_version();
+}
+
+
+#
+# S60 initialisation
+#
+sub initial_s60 (){
+	my $version_short;
+
+	if (defined $date) {
+		unless ($date=~/now/i || $date=~/today/i || $date=~/\d\d-\d\d-\d\d/ ) {  &error_msg("Wrong date format. ");}
+	}
+
+# convert platform version string to short format
+# like: S60_X_Y -> S60-XY
+	my @temp_version = split('_',$S60_platform);
+
+	foreach (@temp_version) {
+		if ($version_short eq "") {
+			$version_short = $_;
+			$version_short .= "-";
+		}
+		else {
+			$version_short .= $_;
+		}
+	}
+	
+	# create version string
+	#V S60_31_200616\n20-04-06\nS60-31\n(c)NMP
+	if (defined $date) {
+		$string='V '.$S60_platform.'_'.$S60_version.'\n*DD*-*MM*-*YY*\n'.$version_short.'\n(c)NMP';
+	}
+	else {
+		$string='V '.$S60_platform.'_'.$S60_version.'\nxx-xx-xx\nxxx-xxx\n(c)NMP';
+	}
+
+	$fwstring='V '.$S60_platform.'_'.$S60_version;
+	
+# set today to date
+	if ($date=~/now/i || $date=~/today/i) {
+		my ($time,$sek, $min, $hour, $day, $month, $year);
+	  ($sek, $min, $hour, $day, $month, $year) = (localtime)[0,1,2,3,4,5];
+	  $month += 1;
+	  $year += 1900;
+	  
+	  my $year_short=$year;
+	  $year_short=~s/.*(\d\d)$/-$1/;
+	  $date=$day.'-'.$month.$year_short
+	}
+	
+	$string=~s/\*DD\*-\*MM\*-\*YY\*/$date/; 
+}
+
+#
+# Custom initialisation
+#
+sub initial_custom (){
+	foreach (@custom_version) {
+		if ($string eq "") {
+			$string=$_;
+		}
+		else {
+			$string.='\n';
+			$string.=$_;
+		}
+	}
+}
+
+#
+# Write new version information for Version project
+#
+sub sw_version (){
+	$file="\\sf\\os\\deviceplatformrelease\\version\\data\\sw.txt";
+  open (to_file,">$file") || die " Cannot create $file Reason: $!\n";
+  #
+  # Writing the version string in the unicode format.
+  #
+  print to_file "\xFF\xFE";
+  for (my $i = 0; $i < length($string); $i++) {
+    printf to_file "%s\0", substr($string,$i, 1);
+  }
+  close (to_file);
+}
+
+
+#
+# Write new fwid version information to fwid files
+#
+sub fwid_version (){
+# $fwid (is path to fwid files) = \\s60_RnD\build_RnD\version_rnd\data\
+
+	my $fwid_file=$fwid."fwid1.txt";
+	write_unicode ($fwid_file, "id=core", "version=".$fwstring );
+
+	my $fwid_file=$fwid."fwid2.txt";
+	write_unicode ($fwid_file, "id=language", "version=".$fwstring." lang" );
+
+	my $fwid_file=$fwid."fwid3.txt";
+	write_unicode ($fwid_file, "id=customer", "version=".$fwstring." cust" );
+}
+
+#
+# Writing the version string in the unicode format.
+#
+
+sub write_unicode (){
+  my $unicode_file = shift;
+  my @unicode_lines = @_;
+
+
+  open (to_file,">$unicode_file") || die " Cannot create $unicode_file Reason: $!\n";
+	binmode to_file;
+
+  print to_file "\xFF\xFE";
+	my $size = scalar(@unicode_lines);
+
+	foreach my $l (@unicode_lines) {
+	  for (my $i = 0; $i < length($l); $i++) {
+     printf to_file "%s\0", substr($l,$i, 1);
+ 	  }
+
+  	$size--;
+
+		if ($size) {
+	  	print to_file "\x0D\x00\x0A\x00";
+	  }
+	}	
+  close (to_file);
+}
+
+#
+# Change window title for s60config project
+# Set new window title to epoc*.ini files 
+#
+sub window_title ($){
+  my(@files);
+  # read configuration files from epoc.ini
+	my $epoc_ini_file="\\s60\\mw\\uiresources\\uiconfig\\s60config\\src\\epoc.ini";
+  open(INI,$epoc_ini_file) or die "Cannot open $epoc_ini_file\n";
+  while (<INI>) {
+	  chomp; #Remove line feed and carriage return  
+	  if (/^configuration /) {
+      $_ =~ s/^configuration //;
+      push @files, $_;
+    }
+	}
+  close INI;
+
+# change window title to each configuration file
+	foreach my $input_file (@files) {
+	  my @lines;
+		$file="\\s60\\mw\\uiresources\\uiconfig\\s60config\\src\\$input_file";
+	  open(IN,$file) or die "Cannot open $file";
+	  @lines=<IN>;
+	  close IN;
+	
+	  foreach (@lines){
+	  	$string = $_;
+	    if (/^\s*WindowTitle\s+\S+/i) {
+	      $_ = "WindowTitle ".$window_title."\n";
+	    }
+		}
+		
+	  open (OUT,">$file") || die "Cannot open $file for overwriting!\n";
+	  print OUT @lines;
+	  close OUT;
+	}
+}
+
+#
+# Change correct port value to allow emulator booting
+#
+sub bt_port_value(){
+  my @lines;  
+  my $bt_string;
+	$file="\\epoc32\\release\\WINSCW\\UDEB\\Z\\private\\101f7989\\Esock\\bt.bt.esk";
+  open(IN,$file) or die "Cannot open $file";
+  @lines=<IN>;
+  close IN;
+
+  foreach (@lines){
+  	$bt_string = $_;
+    if (/^\s*port=\s+\S+/i) {
+      $_ = "port= -1\n";
+    }
+	}
+	
+  open (OUT,">$file") || die "Cannot open $file for overwriting!\n";
+  print OUT @lines;
+  close OUT;
+}
+
+
+sub error_msg ($){
+  my($ErrorMsg);
+  ($ErrorMsg)=@_;
+  my $given_command=$0;
+  $given_command =~ s/.*\\(\w+\.\w+)$/$1/;
+  print "";
+  print "\n";
+  print "Error: $ErrorMsg \n";
+  print "\n";  
+  print "Usage: $given_command [options]\n\n";
+  print "  Options for change version information\n";
+  print "    -p S60_platform [optional with -c]\n";
+  print "    -pv S60_version [optional, require -p]\n";
+  print "    -pd date [optional, require -p]\n";
+  print "    -c custom_version [optional with -p]\n\n";
+  print "  Option for change emulator window title\n";
+  print "    -w window_title [optional]\n\n";
+  print "  Option for change bt port to -1 for emulator\n";
+  print "    -bt [optional]\n";
+  print "    -fwid [optional](To update fwid files for Fota in rnd)\n"; 
+  print "\n\n";  
+  print "DATE uses dd-mm-yy format or you can give now/today\n\n";  
+  print "Example: $given_command -p S60_3_1 -pv 200616 -pd now\n";  
+  print "Example: $given_command -w 92_200614 -p S60_3_1 -pv 200616 -pd now -bt\n";  
+  print "Example: $given_command -w 92_200614 -p S60_3_1 -pv 200616 -pd 26-04-06\n";  
+  print "Example: $given_command -c \"custom\" -c \"version\"\n";  
+  print "Example: $given_command -fw \s60_RnD\build_RnD\version_rnd\data\"\n";  
+  die "\n";    
+}
+