get_log.pl 5.1 KB
#!/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) 2008
#
#  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:
#* ---------
#*   get_log.pl
#*
#* Project:
#* --------
#*   Maui_Software
#*
#* Description:
#* ------------
#*   This script will parse compile logs and dump them to a single log file.
#*
#* Author:
#* -------
#*   Frank Wu  (mtk01760)
#*
#*============================================================================
#*             HISTORY
#* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
#*------------------------------------------------------------------------------
#*
#*------------------------------------------------------------------------------
#* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
#*============================================================================
#****************************************************************************/

my $LOG_FILE = $ARGV[0];
my $LOG_PATH = $ARGV[1];
if (defined $ARGV[2]) {
  $HEADER_REF = $ARGV[2];
}

my $line = 0;
my %errFile;
open LOG_FILE,"<$LOG_FILE" or die "cannot open $LOG_FILE:$!\n";
while(<LOG_FILE>) {
  $line++;
  next if($line == 1);
  if ($_ =~ /.+\*\*\*.+\[(.+)\.obj\].+/ig) {
  	$errFile{uc($1)}=1;
  }
}
close LOG_FILE;

# Get original header file paths from tools\copy_mmi_inlude_h.bat
if (defined $ARGV[2]) {
	if(-e $HEADER_REF){
    open HEADER_REF,"<$HEADER_REF" or die "Cannot open tools\\copy_mmi_inlude_h.bat";
    while(<HEADER_REF>) {
      if ($_ =~ /\.\\(.+)\\(.+\.h)/) {
        $path{$2} = "$1\\$2";
        push @header, $2;
      }
    }
    close HEADER_REF;
  }
}

our  @LOGFILES;

if (opendir(LOGDIR, $LOG_PATH)) {
  @LOGFILES = sort readdir(LOGDIR);
  closedir(LOGDIR);
}

open LOG_FILE,"<$LOG_FILE" or die "cannot open $LOG_FILE:$!\n";
my $newlog;
my $printlog;
my $file;
my $log;
my $filename;
$line = 0;
while(<LOG_FILE>) {
  $line++;
  if ($line == 1) {
  	$newlog.=$_;
  	$printlog = 1;
  } else {
    if ($printlog == 1) {
      foreach $file (@LOGFILES) {
        next if ($file eq ".");
        next if ($file eq "..");
        $file =~ /(.+)\.log/;
        $filename = $1;
        next if ($errFile{uc($filename)} == 1);
      
        open f,"<$LOG_PATH\\$file" or die "cannot open $LOG_PATH\\$file:$!\n";
        my $backup= $/;
        undef $/;
        $log .= <f>;
        $/ = $backup;
        close f;
      }
      if (defined $ARGV[2]) {
        foreach $h(@header){
          $log =~ s/header_temp\\$h/$path{$h}/ig;
        }
      }
      $printlog = 0;
    
      $newlog.=$log;

      $log = "";
    }
    if ($_ =~ /.+\*\*\*.+\[(.+)\.obj\].+/ig) {
      if (-e "$LOG_PATH\\$1\.log") {
    	  open f,"<$LOG_PATH\\$1\.log" or die "cannot open $LOG_PATH\\$1\.log:$!\n";
    	  my $backup= $/;
        undef $/;
        $log = <f>;
        $/ = $backup;
        close f;
        if (defined $ARGV[2]) {
          foreach $h(@header){
            $log =~ s/header_temp\\$h/$path{$h}/ig;
          }
        }
        $newlog.=$log;
      }
    }
    $newlog.=$_;
  }
}

open LOG_FILE,"+<$LOG_FILE" or die "cannot open $LOG_FILE:$!\n";
  # clear all file content
  truncate(LOG_FILE,0);
  # then insert the content of $LOG_FILE
  seek(LOG_FILE,0,0);
  print LOG_FILE $newlog;  
close LOG_FILE;