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