diff -r 9f25be3da657 -r fa7a3cc6effd sbsv1/abld/platform/e32variant.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv1/abld/platform/e32variant.pm Fri Jun 25 17:29:25 2010 +0800 @@ -0,0 +1,156 @@ +# Copyright (c) 2004-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: +# + +package E32Variant; + +require Exporter; + +@ISA = qw(Exporter); + +@EXPORT = qw(Variant_GetMacroList Variant_GetMacroHRHFile Variant_GetMacro); + +use Pathutl; + +# using $FindBin::Bin to figure out the location of the epoc32\tools directory as +# IDE doesn't understand env{EPOCROOT} + +my $PerlBinPath; # fully qualified pathname of the directory containing this script + +BEGIN { + require 5.005_03; # check user has a version of perl that will cope + $PerlBinPath = $FindBin::Bin; # X:/epoc32/tools + $PerlBinPath =~ s/\//\\/g; # X:\epoc32\tools +} + +# get epocroot if it is set +my $epocroot = $ENV{EPOCROOT}; +my $toolspath; + +#if epocroot is not set figure it out +if(!$epocroot){ + $epocroot = $PerlBinPath . "\\..\\..\\" ; #infer epocroot + $toolspath = $PerlBinPath; +}else{ + $toolspath = $epocroot . "epoc32\\tools\\"; +} + +$epocroot=~s/^(.:)//io; # remove drive letter +$epocroot=&Path_Strip($epocroot); # collapse + +my $cfgFile = $toolspath . "variant\\variant.cfg"; # default location +$cfgFile =~ /^(.:)/i; # match the drive +my $MacroHRHLocation_Drive = lc($1); # save the drive + +sub Variant_GetMacroHRHFile{ + my $file; + if(-e $cfgFile){ + open(FILE, $cfgFile) || die "\nCould not open: " . $cfgFile ."\n"; + while () { + # strip comments + s/^([^#]*)#.*$/$1/o; + # skip blank lines + if (/^\s*$/o) { + next; + } + # get the hrh file + if($_ =~ /\.hrh/xi){ + $file = $_; + last; + } + } + close FILE; + die "\nERROR: No variant file specified in $cfgFile!\n" unless $file; + $file =~ s/\s+//g; + $file=~s/^(.:)//io; # remove drive letter + my $paths_drive = lc($1); + + $file = Path_MakeEAbs($epocroot."EPOC32\\", $epocroot, $file); # assume relative to EPOCROOT + + if($paths_drive){ + die "\nERROR: Variant file specified in $cfgFile is not on the same drive as \\epoc32\\\n" + unless ($paths_drive eq $MacroHRHLocation_Drive); + } + if(!(-e $file)) { + die "\nERROR: $cfgFile specifies $file which doesn't exist!\n"; + } + + # make sure it is in dos syntax + $file=~ s/\//\\/g; + } + return $file; +} + + +# returns the variant specific macro definitions as a list +sub Variant_GetMacroList{ + + my @macros = (); + my $vfile = Variant_GetMacroHRHFile(); + + if($vfile) + { + my $VariantFilePath = Path_Split('Path',$vfile); + chop( $VariantFilePath ); + $VariantFilePath = &Path_PrefixWithDriveAndQuote($VariantFilePath); + $vfile = &Path_PrefixWithDriveAndQuote($vfile); + my $e32Path = &Path_PrefixWithDriveAndQuote($epocroot."epoc32\\include"); + + open CPPPIPE,"cpp -I $e32Path -I $VariantFilePath -undef -dM $vfile |" or die "ERROR: Can't invoke CPP.EXE\n"; + while(){ + if($_ =~ /(\#define)(\s+)(.+)/){ + push @macros, $3; + } + } + close CPPPIPE; + } + return @macros; +} + +sub Variant_GetMacro{ + + my $file; + if(-e $cfgFile){ + open(FILE, $cfgFile) || die "\nCould not open: " . $cfgFile ."\n"; + while () { + # strip comments + s/^([^#]*)#.*$/$1/o; + # skip blank lines + if (/^\s*$/o) { + next; + } + # get the hrh file + if($_ =~ /^ENABLE_ABIV2_MODE$/xi){ + close FILE; + return 1; + } + } + close FILE; + } + return 0; +} + +1; + + + + + + + + + + + +