diff -r 000000000000 -r dfb7c4ff071f commsfwtools/preparedefaultcommsdatabase/installdefaultcommdb/group/installdefaultcommdb.pl --- /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."\/"; + } +} +