diff -r 000000000000 -r 83f4b4db085c misccomponents/emulatorlauncher/perl/epoc.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/misccomponents/emulatorlauncher/perl/epoc.pl Tue Feb 02 01:39:43 2010 +0200 @@ -0,0 +1,256 @@ +# Copyright (c) 1999-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: +# Launcher for the Symbian Emulator, including +# functionality to read the $ENV{EPOCROOT}epoc32\data\BuildInfo.txt +# file to find out information regarding the current Emulator. +# Depends on the current working directory providing +# the drive of the currently used SDK. +# +# + +use Cwd; + +# +# Check the argument(s), if any. +# +$numArgs = $#ARGV + 1; + +if($numArgs == 0) + { + &launchEmulator("udeb","winscw"); + exit(0); + } + +if($numArgs > 2) + { + &printHelp; + die "ERROR: Too many arguments.\n"; + } + +if($numArgs == 1) + { + if(lc($ARGV[0]) eq "-rel") + { + &launchEmulator("urel","winscw"); + exit(0); + } + + if (lc($ARGV[0]) eq "-version") + { + &printVersion; + exit(0); + } + + if(lc($ARGV[0]) eq "-wins") + { + &launchEmulator("udeb", "wins"); + exit(0); + } + + if(lc($ARGV[0]) eq "-winscw") + { + &launchEmulator("udeb", "winscw"); + exit(0); + } + + if(lc($ARGV[0]) eq "-help") + { + &printHelp; + exit(0); + } + } + +if ($numArgs == 2) + { + if(lc($ARGV[0]) eq "-rel") + { + if (lc($ARGV[1]) eq "-wins") + { + &launchEmulator("urel","wins"); + exit(0); + } + + if (lc($ARGV[1]) eq "-winscw") + { + &launchEmulator("urel","winscw"); + exit(0); + } + } + + if (lc($ARGV[0]) eq "-winscw") + { + if (lc($ARGV[1] eq "-rel")) + { + &launchEmulator("urel","winscw"); + exit(0); + } + } + + if (lc($ARGV[0]) eq "-wins") + { + if (lc($ARGV[1] eq "-rel")) + { + &launchEmulator("urel","wins"); + exit(0); + } + } + } + +# Error, unknown argument. +&printHelp; +die "ERROR: Unknown argument " . "\"" . $ARGV[0] . "\".\n"; + +sub launchEmulator +{ + my ($type,$win) = @_; + + my $epocroot = &getEpocroot; + my $drive = &getDrive; + my $emu = $drive . $epocroot . "epoc32" . "\\" + . "release\\" . $win . "\\" . $type . "\\" . "epoc.exe"; + -e $emu || + die "ERROR: File \"$emu\" not found.\n\n" . + "The EPOCROOT environment variable does not identify\n" . + "a valid Symbian emulator installation on this drive.\n" . + "EPOCROOT must be an absolute path to an existing\n" . + "directory - it should have no drive qualifier and\n" . + "must end with a backslash.\n"; + # If the execute is successful, this never returns. + exec("\"" . $emu . "\"") || die "Failed to execute the emulator \"$emu\": $!"; +} + +sub printHelp +{ + print "Symbian Platform Emulator Launcher\n"; + print "Syntax :\tepoc [-rel] [-wins|-winscw] [-version] [-help]\n"; + print "(no options)\tLaunch active winscw debug emulator\n"; + print "-rel\t\tLaunch active release emulator\n"; + print "-wins\t\tLaunch active wins emulator\n"; + print "-winscw\t\tLaunch active winscw emulator\n"; + print "-version\tDisplay active emulator details\n"; + print "-help\tOutput this help message\n"; +} + +sub printVersion +{ + my $epocroot = &getEpocroot; + my $drive = &getDrive; + + my $binfo = $drive . $epocroot . "epoc32" . "\\" + . "data" . "\\" . "BuildInfo.txt"; + + -e $binfo || die "ERROR: File \"" . $binfo . "\" does not exist.\n"; + open(IFILE, $binfo) || + die "ERROR: Failed to open file \"" . $binfo . "\": $!"; + + my $DeviceFamily = ""; + my $DeviceFamilyRev = ""; + my $ManufacturerSoftwareRev = ""; + my $ManufacturerSoftwareBuild = ""; + + while() { + if(/DeviceFamily\s+(.*\S)\s*$/i) { + $DeviceFamily = $1; + } + if(/DeviceFamilyRev\s+(.*\S)\s*$/i) { + $DeviceFamilyRev = $1; + } + if(/ManufacturerSoftwareRev\s+(.*\S)\s*$/i) { + $ManufacturerSoftwareRev = $1; + } + if(/ManufacturerSoftwareBuild\s+(.*\S)\s*$/i) { + $ManufacturerSoftwareBuild = $1; + } + } + + close(IFILE); + + # + # Verify that we got everything we should have. + # + $DeviceFamily ne "" || + die "ERROR: Device family not specified in file \"" . $binfo . + "\".\n"; + $DeviceFamilyRev ne "" || + die "ERROR: Device family revision not specified in file \"" . $binfo . + "\".\n"; + $ManufacturerSoftwareBuild ne "" || + die "ERROR: Manufacturer software build not specified in file \"" . + $binfo . "\".\n"; + + $Revision = (($ManufacturerSoftwareRev eq "")?($DeviceFamilyRev): + ($ManufacturerSoftwareRev)); + + $DeviceFamily = getDFRDName($DeviceFamily); + + # + # Make the standard revision representation prettier, + # but leave other representations untouched. + # + if($Revision =~ /^0x([0-9])([0-9][0-9])$/) { + $Revision = $1 . "." . $2; + } + + print $DeviceFamily . " " . + "version " . $Revision . " " . + "build " . $ManufacturerSoftwareBuild . "\n"; +} + +# +# Determines, validates, and returns EPOCROOT. +# +sub getEpocroot +{ + my $epocroot = $ENV{EPOCROOT}; + die "ERROR: Must set the EPOCROOT environment variable.\n" + if (!defined($epocroot)); + $epocroot =~ s-/-\\-go; # for those working with UNIX shells + die "ERROR: EPOCROOT must be an absolute path, " . + "not containing a drive letter.\n" if ($epocroot !~ /^\\/); + die "ERROR: EPOCROOT must not be a UNC path.\n" if ($epocroot =~ /^\\\\/); + die "ERROR: EPOCROOT must end with a backslash.\n" if ($epocroot !~ /\\$/); + die "ERROR: EPOCROOT must specify an existing directory.\n" + if (!-d $epocroot); + return $epocroot; +} + +# +# Determines and returns the current drive, if any. +# +sub getDrive +{ + my $wd = cwd; + my $drive; + if($wd =~ /^([a-zA-Z]:)/) { + $drive = $1; + } else { + # Perhaps we're on a machine that has no drives. + $drive = ""; + } + return $drive; +} + +# +# The DFRD may be represented by a numeric value, as defined by HAL. +# Changes known numeric values to the name of the DFRD, +# and leaves all other values untouched. +# +sub getDFRDName +{ + my $dfrd = shift; + return "Crystal" if $dfrd eq "0"; + return "Pearl" if $dfrd eq "1"; + return "Quartz" if $dfrd eq "2"; + return $dfrd; # as fallback +}