#!/usr/local/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). | |
# process argument | |
($project, $modem, $flavor) = @ARGV; | |
die "Please specify the project name.\n" if ($project eq ""); | |
die "please specify the modem type.\n" if ($modem eq ""); | |
# get the conf file | |
$daily_build_conf_file_path = "\\\\mtkrs12\\Software_Management_Material\\Script\\3rd_party\\Scripts"; | |
#check branch in verno file | |
$verno_path = "make\\common"; | |
$verno_file = $verno_path."\\Verno_".$project.".bld"; | |
if (!-e $verno_file){ | |
$verno_file = $verno_path."\\Verno.bld"; | |
} | |
-e $verno_file or die "Verno file does NOT exist!\nPlease check.\n"; | |
# read the verno file | |
open FILE, $verno_file; | |
foreach $line (<FILE>){ | |
if ($line =~ /BRANCH\s*=\s*(\S*)/){ | |
$branch = $1; | |
break; | |
} | |
} | |
#get the daily build conf file according to the branch | |
$daily_build_conf_file_name = "daily_build_".$branch."_conf.ini"; | |
$daily_build_conf_file = $daily_build_conf_file_path."\\".$daily_build_conf_file_name; | |
-e $daily_build_conf_file or die "Config file: $daily_build_conf_file does NOT exist!\nPlease check.\n"; | |
# read the conf file | |
open FILE, $daily_build_conf_file; | |
foreach $line (<FILE>){ | |
if ($line =~ /^OF_BUILD_PATH\s*=\s*(\S*)/){ | |
$of_build_path = $1; | |
} | |
elsif ($line =~ /^CODE_BASE_WEEK\s*=\s*(\S*)/){ | |
$code_base_week = $1; | |
# get the latest version if the week is not specified. | |
if ($code_base_week eq ""){ | |
$code_base_week = &getLatestCodebaseWeek(); | |
} | |
} | |
elsif ($line =~ /^DEFAULT_PROJECT_GSM\s*=\s*(\S*)/){ | |
$default_project_gsm = $1; | |
} | |
elsif ($line =~ /^DEFAULT_PROJECT_GPRS\s*=\s*(\S*)/){ | |
$default_project_gprs = $1; | |
} | |
elsif ($line =~ /^DEFAULT_PROJECT_UMTS\s*=\s*(\S*)/){ | |
$default_project_umts = $1; | |
} | |
elsif ($line =~ /^DEFAULT_MODEM_GSM\s*=\s*(\S*)/){ | |
$default_modem_gsm = $1; | |
} | |
elsif ($line =~ /^DEFAULT_MODEM_GPRS\s*=\s*(\S*)/){ | |
$default_modem_gprs = $1; | |
} | |
elsif ($line =~ /^DEFAULT_MODEM_UMTS\s*=\s*(\S*)/){ | |
$default_modem_umts = $1; | |
} | |
elsif ($line =~ /^DEFAULT_FLAVOR_GSM\s*=\s*(\S*)/){ | |
$default_flavor_gsm = $1; | |
} | |
elsif ($line =~ /^DEFAULT_FLAVOR_GPRS\s*=\s*(\S*)/){ | |
$default_flavor_gprs = $1; | |
} | |
elsif ($line =~ /^DEFAULT_FLAVOR_UMTS\s*=\s*(\S*)/){ | |
$default_flavor_umts = $1; | |
} | |
elsif ($line =~ /^DEFAULT_STAGE_GSM\s*=\s*(\S*)/){ | |
$default_stage_gsm = $1; | |
} | |
elsif ($line =~ /^DEFAULT_STAGE_GPRS\s*=\s*(\S*)/){ | |
$default_stage_gprs = $1; | |
} | |
elsif ($line =~ /^DEFAULT_STAGE_UMTS\s*=\s*(\S*)/){ | |
$default_stage_umts = $1; | |
} | |
} | |
# find the latest codebase in stage0/stage1/stage2 folders | |
@stages = qw(Stage0 Stage1 Stage2); | |
foreach $stage (@stages){ | |
if ($flavor eq ""){ | |
$codebase_path = $of_build_path ."\\".$code_base_week."_".$stage."\\".$project."_".$modem.".".$code_base_week."\\mcu"; | |
} | |
else{ | |
$codebase_path = $of_build_path ."\\".$code_base_week."_".$stage."\\".$project."(".$flavor.")_".$modem.".".$code_base_week."\\mcu"; | |
} | |
#print "try to find the codebase : $codebase_path\n"; | |
if (-d $codebase_path){ | |
$codebase_found = 1; | |
print "codebase found: $codebase_path\n"; | |
last; | |
} | |
} | |
# can not find the same project in latest official build, using the default project. | |
if (!$codebase_found){ | |
print "codebase not found, try to find the default project path.\n"; | |
if ($modem =~ /gsm/i){ | |
$project = $default_project_gsm; | |
$modem = $default_modem_gsm; | |
$flavor = $default_flavor_gsm; | |
$stage = $default_stage_gsm; | |
} | |
elsif ($modem =~ /gprs/i){ | |
$project = $default_project_gprs; | |
$modem = $default_modem_gprs; | |
$flavor = $default_flavor_gprs; | |
$stage = $default_stage_gprs; | |
} | |
else{ #UMTS , HSPA | |
$project = $default_project_umts; | |
$modem = $default_modem_umts; | |
$flavor = $default_flavor_umts; | |
$stage = $default_stage_umts; | |
} | |
if ($flavor eq ""){ | |
$codebase_path = $of_build_path ."\\".$code_base_week."_".$stage."\\".$project."_".$modem.".".$code_base_week."\\mcu"; | |
} | |
else{ | |
$codebase_path = $of_build_path ."\\".$code_base_week."_".$stage."\\".$project."(".$flavor.")_".$modem.".".$code_base_week."\\mcu"; | |
} | |
#print "try to find the the default codebase : $codebase_path\n"; | |
die "Can not find default $modem project path at $codebase_path." if (!-d $codebase_path); | |
} | |
# find codegen pstrace_db folder | |
$codegen_path = "tst"; | |
@codegen_db_folders = qw(database database_classb database_classb_umts); | |
$pstrace_db = "pstrace_db"; | |
foreach $folder (@codegen_db_folders){ | |
if (-d $codebase_path."\\".$codegen_path."\\".$folder."\\".$pstrace_db){ | |
$pstrace_path = $codebase_path."\\".$codegen_path."\\".$folder."\\".$pstrace_db; | |
$db_folder = $folder; | |
print "pstrace folder : $pstrace_path\n"; | |
last; | |
} | |
} | |
die "pstrace folder does NOT exist in $codebase_path\\$codegen_path!\nPlease check.\n" if ($pstrace_path eq ""); | |
# identify local path | |
chomp($current_path = `cd`); | |
print "GET LOCAL PATH: $current_path\n"; | |
#$p = Win32::GetCwd(); | |
if ($current_path =~ /(.*)\\mcu(.*)/){ | |
$local_root_path = $1."\\mcu"; | |
} | |
#for LSF | |
elsif($current_path =~ /E:\\temp\\(MAUI|10A|11A)/){ | |
$local_root_path = $current_path; | |
} | |
#delete the log file generated before | |
system("del -Q $local_root_path\\copy_latest_codegen.log"); | |
$local_pstrace_path = $local_root_path."\\".$codegen_path."\\".$db_folder."\\".$pstrace_db; | |
#print "local pstrace path : $local_pstrace_path\n"; | |
# copy pstrace folder if do not have | |
if (!-d $local_pstrace_path){ | |
$need_to_copy = 1; | |
} | |
else{ | |
opendir (DIR, $local_root_path."\\".$codegen_path."\\".$db_folder); | |
@files = readdir DIR; | |
close DIR; | |
$need_to_copy = 1; | |
foreach $file (@files){ | |
if ($file =~ /BPLGUInfo(.*)/){ | |
$need_to_copy = 0; | |
last; | |
} | |
} | |
} | |
if ($need_to_copy){ | |
print ("Copy the latest codegen result.\n"); | |
print ("xcopy /E /Y \"$pstrace_path\\\*\" \"$local_pstrace_path\\\*\"\n"); | |
system("xcopy /E /Y \"$pstrace_path\\\*\" \"$local_pstrace_path\\\*\" >nul"); | |
# write a file to identify do the copy latest codegen | |
open FILE, ">$local_root_path\\copy_latest_codegen.log"; | |
close FILE; | |
} | |
else{ | |
print ("Do codegen successfully. Do nothing.\n"); | |
} | |
######################################################################################### | |
sub getLatestCodebaseWeek{ | |
#TODO: need to filter out files | |
opendir (DIR, $of_build_path); | |
@folders = reverse sort readdir DIR; | |
close DIR; | |
foreach $folder (@folders){ | |
if ($folder =~ /W(\w*)\.(\w*)_(.*)/){ | |
$code_base_week = "W".$1.".".$2; | |
last; | |
} | |
} | |
return $code_base_week; | |
} |