#!/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) 2005 | |
# | |
# 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: | |
# --------- | |
# MauiInfo.pm | |
# | |
# Description: | |
# ------------ | |
# this script is used to handle MAUI related info. | |
# | |
# Auther: | |
# ------- | |
# Shinn Lin | |
# | |
# Note: | |
# ----- | |
# | |
# Log: | |
# ----- | |
# 2010/02/10 Create. | |
# | |
#BEGIN { push @INC, 'U:\\00MyPerlLib'} # add additional library path | |
package MauiInfo; | |
use strict; | |
#****************************************************************************** | |
# Global Data | |
#****************************************************************************** | |
my $f_cacheIncPath = 1; | |
my $g_prjName = ''; | |
my $g_mcuPath = "."; | |
my @g_incMods = ("plutommi", "venusmmi"); | |
my @g_incPath = (); | |
my $g_isCompileInfoReady = 0; | |
my $g_removeTempFile = 1; | |
return 1; # return true | |
#****************************************************************************** | |
# FUNCTION | |
# setInfo | |
# DESCRIPTION | |
# xxx | |
# PARAMETERS | |
# xxx | |
# RETURNS | |
# xxx | |
#****************************************************************************** | |
sub setInfo() | |
{ | |
($g_mcuPath, $g_prjName) = @_; | |
} | |
#****************************************************************************** | |
# FUNCTION | |
# setIncMods | |
# DESCRIPTION | |
# xxx | |
# PARAMETERS | |
# xxx | |
# RETURNS | |
# xxx | |
#****************************************************************************** | |
sub setIncMods() | |
{ | |
@g_incMods = @_; | |
} | |
#****************************************************************************** | |
# FUNCTION | |
# getIncPath | |
# DESCRIPTION | |
# xxx | |
# PARAMETERS | |
# xxx | |
# RETURNS | |
# xxx | |
#****************************************************************************** | |
sub getIncPath() | |
{ | |
my ($incFile) = @_; | |
if (!$g_isCompileInfoReady) | |
{ | |
&readCompileInfo(\@g_incMods, \@g_incPath, 0); | |
$g_isCompileInfoReady = 1; | |
} | |
return searchIncPath($incFile, \@g_incPath); | |
} | |
#****************************************************************************** | |
# Local Function | |
#****************************************************************************** | |
#****************************************************************************** | |
# FUNCTION | |
# searchIncPath | |
# DESCRIPTION | |
# xxx | |
# PARAMETERS | |
# xxx | |
# RETURNS | |
# xxx | |
#****************************************************************************** | |
my %incCacheHash = (); | |
sub searchIncPath() | |
{ | |
my ($incFile, $incPath_aref) = @_; | |
if ($f_cacheIncPath) | |
{ | |
return $incCacheHash{$incFile} if (defined $incCacheHash{$incFile}); | |
} | |
foreach my $incPath (@{$incPath_aref}) | |
{ | |
my $filepath = "$incPath\\$incFile"; | |
if (-e $filepath) | |
{ | |
$incCacheHash{$incFile} = $incPath if ($f_cacheIncPath); | |
return $incPath; | |
} | |
} | |
return ""; | |
} | |
#****************************************************************************** | |
# FUNCTION | |
# readCompileInfo | |
# DESCRIPTION | |
# xxx | |
# PARAMETERS | |
# xxx | |
# RETURNS | |
# xxx | |
#****************************************************************************** | |
sub readCompileInfo() | |
{ | |
my ($incMod_aref, $incPath_aref, $def_aref) = @_; | |
if ($g_prjName eq "") | |
{ | |
push @{$incPath_aref}, "."; # no project specified, just put current dir to inc path | |
print "[Warning] no compile info!\n"; | |
return; | |
} | |
my $infoFilename = "$g_mcuPath\\build\\$g_prjName\\log\\info.log"; | |
my %defHash = (); | |
my %incHash = (); | |
my $inSection; | |
if ($incPath_aref || $def_aref) | |
{ | |
# read common options and common include path from info.log | |
open(hFile, "<$infoFilename") or die "can't open $infoFilename"; | |
my @fileData = <hFile>; | |
close(hFile); | |
foreach my $line (@fileData) | |
{ | |
if ($line =~ /\[ COMMON OPTION \]/) | |
{ | |
$inSection = 1; | |
next; | |
} | |
elsif ($line =~ /\[ COMMON INCLUDE PATH \]/) | |
{ | |
$inSection = 2; | |
next; | |
} | |
if ($line =~ /(^[^\[][^\s]*)/) | |
{ | |
if ($inSection == 1) | |
{ | |
#print "$1\n"; | |
if ($def_aref && !(defined $defHash{$1})) | |
{ | |
push @{$def_aref}, $1; | |
$defHash{$1} = 1; | |
} | |
} | |
elsif ($inSection == 2) | |
{ | |
my $incPath = "$1"; | |
if ($incPath !~ /:/) | |
{ | |
$incPath = "$g_mcuPath\\$incPath"; | |
} | |
#print "$incPath\n"; | |
if ($incPath_aref && !(defined $incHash{$incPath})) | |
{ | |
push @{$incPath_aref}, $incPath; | |
$incHash{$incPath} = 1; | |
} | |
} | |
} | |
else | |
{ | |
$inSection = 0; | |
} | |
} | |
} | |
# read inc from *.inc | |
if ($incPath_aref) | |
{ | |
foreach my $myMod (@{$incMod_aref}) | |
{ | |
my @incFiles = (); | |
if (&getFileList("$g_mcuPath\\make\\$myMod\\*.inc", 1, \@incFiles) > 0) | |
{ | |
foreach my $incFilename (@incFiles) | |
{ | |
open(hFile, "<$incFilename") or die "can't open $incFilename"; | |
my @fileData = <hFile>; | |
close(hFile); | |
foreach my $line (@fileData) | |
{ | |
if ($line =~ /(^[^\s]+)([\s]*$)/) | |
{ | |
my $incPath = "$g_mcuPath\\$1"; | |
#$incPaths = "$incPaths\n-I$g_mcuPath\\$1"; | |
if (!(defined $incHash{$incPath})) | |
{ | |
push @{$incPath_aref}, $incPath; | |
$incHash{$incPath} = 1; | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
print "[Warning] can't find *.inc for $myMod\n"; | |
} | |
} | |
} | |
# read macro from *.def | |
if ($def_aref) | |
{ | |
foreach my $myMod (@{$incMod_aref}) | |
{ | |
my @defFiles = (); | |
if (&getFileList("$g_mcuPath\\make\\$myMod\\*.def", 1, \@defFiles) > 0) | |
{ | |
foreach my $defFilename (@defFiles) | |
{ | |
open(hFile, "<$defFilename") or die "can't open $defFilename"; | |
my @fileData = <hFile>; | |
close(hFile); | |
foreach my $line (@fileData) | |
{ | |
if ($line =~ /(^[^\s]+)([\s]*$)/) | |
{ | |
#$commonOptions = "$commonOptions\n-D$1"; | |
if (!(defined $defHash{$1})) | |
{ | |
push @{$def_aref}, $1; | |
$defHash{$1} = 1; | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
print "[Warning] can't find *.def for $myMod\n"; | |
} | |
} | |
} | |
} | |
#****************************************************************************** | |
# FUNCTION | |
# getFileList | |
# DESCRIPTION | |
# get file/path list for given search string | |
# PARAMETERS | |
# xxx | |
# RETURNS | |
# xxx | |
#****************************************************************************** | |
sub getFileList() | |
{ | |
my $rootDir; | |
my $incSubDir; # include sub dir (1) or not (0) | |
my $fileList_ref; | |
($rootDir, $incSubDir, $fileList_ref) = @_; | |
my @fileData = (); | |
# get file list | |
my $tmpFilename = "~tmpFile.lst"; | |
my $dirStr = "$rootDir /b"; | |
$dirStr .= " /s" if ($incSubDir); | |
system("dir ".$dirStr." > $tmpFilename"); | |
open(hFile, "<$tmpFilename") or die "[ERROR] can't open $tmpFilename\n"; | |
@fileData = <hFile>; | |
close(hFile); | |
system("del $tmpFilename") if ($g_removeTempFile); | |
foreach my $line (@fileData) | |
{ | |
my $name = $line; | |
push @{$fileList_ref}, $name if ($name !~ /^[\s]*$/); | |
#print "$name"; | |
} | |
return scalar(@{$fileList_ref}); | |
} | |