blob: 34cb8a82090b925410fa44393985b6800919e0b7 [file] [log] [blame]
#!/usr/bin/perl
#
# Copyright Statement:
# --------------------
# This software is protected by Copyright and the information contained
# herein is confidential. The software may not be copied and the information
# contained herein may not be used or disclosed except with the written
# permission of MediaTek Inc. (C) 2007
#
# BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
# NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
# SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
#
# BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
# LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
#
# THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
# WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
# LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
# RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
# THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
#
#*****************************************************************************
#
# Filename:
# ---------
# operator_check.pl
#
# Description:
# ------------
# To call operator_feature_check.pl to pre-process operator header files for
# generating warning messages when customer macros were modified by operator
# header files.
#
# Auther:
# -------
# Frank Wu
#
# Note:
# -----
# none.
#
# Log:
# -----
# 2007/04/01 Create.
#
#use strict;
use Fcntl;
use File::Basename;
#Open operator_checklist.txt
open(optr_check,"$ARGV[2]") || die "Cannot open $ARGV[2]. Error:$!";
my $CUSTOMER = $ARGV[0];
my $PROJECT = $ARGV[1];
my $theMF = "make\\$CUSTOMER\_$PROJECT.mak";
my $CC = "$ARGV[3]";
my $VIA = "$ARGV[4]";
my $operator_path = "";
my $DoCheck = 0;
my $flag = 0;
my $operator_macro = "";
my @logname = ();
my @macroname = ();
my $logs = "";
my $macro = "";
my @extlist = qw(.log);
my $base = "";
my $MMI_switch_path = "";
my $seg_name = "";
# remove temp file or not
my $removeTempFile = 1;
open (FILE_HANDLE, "<$theMF") or die "Cannot open $theMF\n";
while (<FILE_HANDLE>) {
if (/^(\S+)\s*=\s*(\S+)/) {
my $keyname = lc($1);
defined($${keyname});
$${keyname} = uc($2);
}
}
close FILE_HANDLE;
$ARGV[2] =~ /(.+)\\operator_checklist/;
my $operator_path = $1;
$operator_path =~ /.+\\.+\\(.+?)\\(.+?)\\.+/;
my $operator_name = uc($1);
my $spec_version = $2;
if ($optr_spec =~ /.+_TECH/)
{
$optr_spec =~ /.+_.+_(.+)_TECH/;
$seg_name = $1;
}
else
{
$optr_spec =~ /.+_.+_(.+)/;
$seg_name = $1;
}
if (-e "$operator_path\\operator_check.log"){
system("del /F /Q $operator_path\\operator_check.log");
}
sysopen(log_file,"$operator_path\\operator_check.log",O_CREAT|O_RDWR|O_APPEND) || die "Error:$!";
print log_file "[Messages from operator header files]\n";
while(<optr_check>){
if (index($_,"OPERATOR RELATED FILES")>=0 || index($_,"OPERATOR MACRO")>=0){
next;
}
$_ =~ s/{BOARD_VER}/$board_ver/;
$_ =~ s/{OpName}/$operator_name/;
$_ =~ s/{VerNum}/$spec_version/;
$_ =~ s/{SegName}/$seg_name/;
$DoCheck = $_ =~ /(.+?)[\s]+(.+?)[\s]+(.+?)[\s]+([\S]+)/;
if ($DoCheck){
if(index($2,"MMI_features_switch")>=0){
$MMI_switch_path = "$1\\$2";
} elsif (index($2,"MMI_features.h")>=0) {
$MMI_switch_path = "$1\\$2";
$MMI_switch_path =~ s/.h/_switch.h/;
}
my $dummyHeaderFile = splitFilename($3, 0)."_dummy".".h";
CreateDummyHeaderFile($3, $dummyHeaderFile, $4, $1, $2, 1);
CreateDummyHeaderFile($3, "original_".$dummyHeaderFile, $4, $1, $2, 0);
system("perl .\\pcore\\tools\\operator_feature_check.pl $CUSTOMER . $dummyHeaderFile $3 $1 $4 1 $CC $VIA");
system("perl .\\pcore\\tools\\operator_feature_check.pl $CUSTOMER . original_$dummyHeaderFile $3 $1 $4 0 $CC $VIA");
push @logname, ".\\".splitFilename($3, 0)."_dummy"."_$CUSTOMER".".log";
if ($removeTempFile)
{
system("del /F /Q $4\\*_dummy.h");
}
} elsif ($_ =~ /([\w]+?)[\s]?/) {
$operator_macro = $_;
chomp($operator_macro);
push @macroname, $operator_macro;
}
}
close(optr_check);
#*******************************************************************
# Start to parse the log files.
#*******************************************************************
foreach $logs (@logname){
open(read_log,"$logs") || die "Cannot open $logs. Error:$!";
$base = basename($logs, @extlist);
$base =~ s/_dummy_$CUSTOMER/.h/;
while(<read_log>){
$line = $_;
chomp($line);
$line =~ /([\w]+)\'s/;
my $macro = $1;
my $originalValue = getValue($macro, $base, 0);
my $resultValue = getValue($macro, $base, 1);
if ($originalValue eq ""){
$originalValue = "Undefined or NULL";
} elsif ($resultValue eq "") {
$resultValue = "Undefined or NULL";
}
#To get __ON__, __OFF__ and __DEFAULT__ definitions from MMI_features_switch.h
if ($base eq "operator_mmi.h") {
open(mmi_switch,"$MMI_switch_path") || die "Cannot open $MMI_switch_path. Error:$!\n";
while(<mmi_switch>){
$_ =~ /^([\s]*)(#define[\s]+)([\w_]+)([\s]*)(.+)/;
if($3 eq "__ON__"){
if (index("\($originalValue\)",$5)>=0){
$originalValue = "__ON__";
} elsif (index("\($resultValue\)",$5)>=0) {
$resultValue = "__ON__";
}
} elsif ($3 eq "__OFF__") {
if (index("\($originalValue\)",$5)>=0){
$originalValue = "__OFF__";
} elsif (index("\($resultValue\)",$5)>=0) {
$resultValue = "__OFF__";
}
} elsif ($3 eq "__DEFAULT__") {
if (index("\($originalValue\)",$5)>=0){
$originalValue = "__DEFAULT__";
} elsif (index("\($resultValue\)",$5)>=0) {
$resultValue = "__DEFAULT__";
}
} elsif ($3 eq "__AUTO__") {
if (index("\($originalValue\)",$5)>=0){
$originalValue = "__AUTO__";
} elsif (index("\($resultValue\)",$5)>=0) {
$resultValue = "__AUTO__";
}
}
}
close(mmi_switch);
}
print log_file ($line," from \"",$originalValue,"\" to \"",$resultValue,"\" according to"," $operator_name"," Specification Version ","$spec_version"," by File"," \"$base\"",".\n");
}
close(read_log);
}
print log_file "\n";
close(log_file);
#*******************************************************************
#To merge makefile warning messages from make\~warning.tmp
#*******************************************************************
if(-e "make\\\~warning.tmp"){
system("echo [Messages from operator.mak]>>$operator_path\\operator_check.log");
system("type make\\\~warning.tmp >>$operator_path\\operator_check.log");
}
print "\nPlease check the Operator Log: $operator_path\\operator_check.log\n";
if ($removeTempFile)
{
system("del /F /Q .\\*_dummy_$CUSTOMER.log");
system("del /F /Q .\\*_OriginalValue.log");
system("del /F /Q .\\*_ResultValue.log");
}
#*******************************************************************
sub splitFilename()
{
my $filename;
my $refSubFilename = "";
my $mainFilename = "";
($filename, $refSubFilename) = @_;
if ($filename =~ /([^\s]*)(\.)([^\.]*$)/)
{
$mainFilename = "$1";
if ($refSubFilename != 0)
{
$$refSubFilename = "$3";
}
}
return $mainFilename;
}
sub CreateDummyHeaderFile()
{
my $operatorHeaderFile;
my $outputFile = "";
my $operatorPath = "";
my $filePath = "";
my $customerHeaderFile = "";
my $IfCreateOpMacro;
($operatorHeaderFile, $outputFile, $operatorPath, $filePath, $customerHeaderFile, $IfCreateOpMacro) = @_;
open(readfile,"$operatorPath\\$operatorHeaderFile") || die "Cannot open $operatorPath\\$operatorHeaderFile. Error:$!";
if (-e "$operatorPath\\$outputFile"){
system("del $operatorPath\\$outputFile");
}
sysopen(writefile,"$operatorPath\\$outputFile",O_CREAT|O_RDWR|O_APPEND) || die "Error:$!";
if ($IfCreateOpMacro){
print writefile "#include \"$customerHeaderFile\"";
print writefile "\n";
while(<readfile>){
print writefile $_;
}
close(writefile);
close(readfile);
} else {
open(readCustH,"$filePath\\$customerHeaderFile") || die "Cannot open $filePath\\$customerHeaderFile. Error:$!";
$customerHeaderFile =~ /(.+?)\.h/;
my $dummyCustomerHeaderFile = $1."_dummy.h";
open(writeCustDummyH,">$operatorPath\\$dummyCustomerHeaderFile") || die "Error:$!";
while(<readCustH>){
if(index($_,"$operatorHeaderFile")>=0){
print writeCustDummyH "";
} else {
print writeCustDummyH $_;
}
}
close(writeCustDummyH);
close(readCustH);
print writefile "#include \"$dummyCustomerHeaderFile\"";
print writefile "\n";
while(<readfile>){
if ($_ =~ /^([\s]*)(#define[\s]+)([\w_]+)([\s]*)/){
print writefile "//{",$3,"}","\n";
}
}
close(writefile);
close(readfile);
}
}
sub getValue() {
my $macroN = "";
my $OpHeadF = "";
my $IfReuslt = "";
my $result = "";
($macroN, $OpHeadF, $IfResult) = @_;
$OpHeadF =~ /(.+)\./;
$OpHeadBase = $1;
if ($IfResult){
open(FH, "$OpHeadBase\_ResultValue.log") || die "Error:$!";
while(<FH>){
if (index($_, $macroN)==0){
$_ =~ /.+=[\s](.+)/;
$result = $1;
}
}
close(FH);
} else {
open(FH, "$OpHeadBase\_OriginalValue.log") || die "Error:$!";
while(<FH>){
if (index($_, $macroN)==0){
$_ =~ /.+=[\s](.+)/;
$result = $1;
}
}
close(FH);
}
return $result;
}