blob: 04ca9fba156a257d4cdb3576abfaea96e9e836ee [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) 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});
}