commsfwtools/preparedefaultcommsdatabase/installdefaultcommdb/group/installdefaultcommdb.pl
changeset 0 dfb7c4ff071f
child 19 0b0e9fce0b58
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwtools/preparedefaultcommsdatabase/installdefaultcommdb/group/installdefaultcommdb.pl	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,296 @@
+# Copyright (c) 2007-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
+
+use strict;
+use File::Copy;
+use File::Path;
+use File::stat;
+use Getopt::Long;
+use Cwd;
+
+if ($^O =~ /MSWin32/)
+{
+	require Win32::Mutex;
+}
+
+$::emulatorCfg = 'emulator.cfg';
+$::targetCfg = 'target.cfg';
+
+GetOptions (
+           'command=s' => \$::command,
+           'platform=s' => \$::platform,
+           'variant=s' => \$::variant,
+           'targetcfg=s' => \$::targetCfg,
+           'emulatorcfg=s' => \$::emulatorCfg,
+           'platsec!' => \$::platsec
+		   );
+
+#
+# Constants.
+#
+
+my $epocRoot = GetEpocRoot();
+
+#
+# Main.
+#
+unless ($::command and $::platform and $::variant and (scalar(@ARGV) == 0)) 
+{
+	die "InstallDefaultCommdb Error: Invalid arguments\n";
+}
+
+my $platType;
+if ($::platform =~ /^(wins|wincw)/i) 
+{
+	$platType = 'emulator';
+}
+else 
+{
+	$platType = 'target';
+}
+
+
+my $cccccc00Root;
+my $cccccc00NameCre;
+
+$cccccc00Root = "/private/10202be9/";
+$cccccc00NameCre = "cccccc00.cre";
+
+my $data = 
+{
+	target => 
+	{
+		destinationCdb => $epocRoot . 'epoc32/data/z' . $cccccc00Root . $cccccc00NameCre,
+	},
+	emulator => 
+	{
+		destinationCdb => $epocRoot . "epoc32/release/$::platform/$::variant/z" . $cccccc00Root . $cccccc00NameCre,
+	}
+};
+
+my $CdbDest;
+my $cdbOut; 
+my $cdbOutPath;
+my $cdbDatFile = $ENV{DEFAULTCOMMSDATDATAFILE};
+
+$cdbOut = '/c/defaultcommdb/';
+
+$cdbOutPath = $epocRoot. 'epoc32/winscw' . $cdbOut;
+$cdbDatFile = $cdbOutPath . 'CommsDb.dat' if (! defined $cdbDatFile);
+
+$CdbDest = $data->{$platType}->{destinationCdb};
+
+
+if ($::command eq 'build') 
+{
+	PreBuild();
+}
+elsif ($::command eq 'clean')
+{
+	Clean();
+}
+elsif ($::command eq 'releasables') 
+{
+	Releasables();
+}
+
+#
+# Subs.
+#
+
+sub PreBuild
+{
+	if ($^O =~ /MSWin32/)
+	{
+		# We cannot have more than one instance of this script's activites running at the same time on Windows, so
+		# we safeguarded everything with a Windows mutex.  Mutex name needs to be unique for every build,
+		# so we add the current working directory and EPOCROOT to the mutex name
+		
+		my $drive = Win32::GetCwd();
+		$drive =~ s/^(\D:).*/$1/;
+		my $mutexname = $drive.lc($ENV{'EPOCROOT'});
+		$mutexname =~ s/[:\\\/]+/_/g;
+		
+		my $mutex = Win32::Mutex->new(1,"CEDMUTEX_".$mutexname);
+		die "Unable to create mutex, installdefaultcommdb.pl not run" if not $mutex;
+		if ($mutex->wait())
+		{
+			Build();
+			$mutex->release();
+		}
+		else
+		{
+			die "Unable to access mutex, installdefaultcommdb.pl not run";
+		}
+	}
+	else
+	{
+		Build();
+	}
+}
+
+sub Build
+{
+	unless (-e $cdbDatFile) 
+	{
+		die "InstallDefaultCommdb Error: $cdbDatFile cannot be found: $!\n";
+	}
+
+	if (FileIsYounger($cdbDatFile, $CdbDest) or not -e $CdbDest)
+	{
+		print ("Copy $cdbDatFile to $CdbDest\n");
+		CopyFile($cdbDatFile, $CdbDest);
+	}
+}
+
+
+sub Clean 
+{
+	print("Deleting $CdbDest..\n");
+
+	# Temporary workaround as default commsdat databases are not being created.
+	#DeleteFile($CdbDest);
+}
+
+sub Releasables 
+{
+	print("$CdbDest\n");
+}
+
+sub CopyFile 
+{
+	my $file1 = shift;
+	my $file2 = shift;
+	(my $path) = SplitFileName($file2);
+	
+	unless (-e $path) 
+	{
+		mkpath ($path) or die "InstallDefaultCommdb Error: Couldn't make path \"$path\": $!\n";
+	}
+	
+	if (-e $file2 and not -w $file2) 
+	{
+		system "attrib -r $file2";
+	}
+	copy ($file1, $file2) or die "InstallDefaultCommdb Error: Couldn't copy \"$file1\" to  \"$file2\": $!\n";
+}
+
+sub MoveFile 
+{
+	my $file1 = shift;
+	my $file2 = shift;
+	(my $path) = SplitFileName($file2);
+	
+	unless (-e $path) 
+	{
+		mkpath ($path) or die "InstallDefaultCommdb Error: Couldn't make path \"$path\": $!\n";
+	}
+	move ($file1, $file2) or die "InstallDefaultCommdb Error: Couldn't move \"$file1\" to  \"$file2\": $!\n";
+}
+
+sub DeleteFile 
+{
+	my $file = shift;
+	if (-e $file) 
+	{
+		unlink ($file) or die "InstallDefaultCommdb Error: Couldn't delete \"$file\": $!\n";
+	}
+}
+
+sub SplitFileName 
+{
+	my $fileName = shift;
+	my $path = '';
+	my $base = '';
+	my $ext = '';
+	
+	if ($fileName =~ /\/?([^\/]*?)(\.[^\/\.]*)?$/) 
+	{
+		$base = $1;
+	}
+	if ($fileName =~ /^(.*\/)/) 
+	{
+		$path = $1;
+	}
+	if ($fileName =~ /(\.[^\/\.]*)$/o) 
+	{
+		$ext =  $1;
+	}
+	
+	die unless ($fileName eq "$path$base$ext");
+	return ($path, $base, $ext);
+}
+
+sub CopyIfYounger 
+{
+	my $from = shift;
+	my $to = shift;
+	unless (-e $from) 
+	{
+		die "Error: \"$from\" not found\n";
+	}
+	
+	if (FileIsYounger($from, $to)) 
+	{
+		CopyFile($from, $to);
+	}
+}
+
+sub FileIsYounger 
+{
+	my $file1 = shift;
+	my $file2 = shift;
+	return (FileModifiedTime($file1) > FileModifiedTime($file2));
+}
+
+sub FileModifiedTime 
+{
+	my $file = shift;
+	if (-e $file) 
+	{
+		my $st = stat($file) or return 0;
+		return $st->mtime;
+	}
+	return 0;
+}
+
+sub RenameFile
+{
+	my $file1 = shift;
+	my $file2 = shift;
+	
+	rename ($file1, $file2) or die "InstallDefaultCommdb Error: Couldn't rename \"$file1\" to \"$file2\": $!\n";
+}
+
+sub GetEpocRoot
+{
+	my $path = $ENV{EPOCROOT};
+
+	# replace to forward slashes
+	$path =~ s/\\/\//g;
+
+	# append trailing slash if one isn't already present
+	if($path =~ m/.*\/$/)
+	{
+		return $path;
+	}
+	else
+	{
+		return $path."\/";
+	}
+}
+