#!/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; | |
} |