blob: d476936dc371041eae738444e9b5762289121804 [file] [log] [blame]
#!/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;
}