LocalBuild 工作脚本
2009-11-08 18:53
183 查看
LocalBuild 工作脚本
#version: 2008-10-25 #***************************** CONSTANTS ******************************# my $SUCCESS = 1; my $FAILURE = 0; my $TRUE = 1; my $FALSE = 0; my $IL93_SERVER = "IL93"; my $CA25_LINUX_SERVER = "CA25_LINUX"; my $CA25_SOLARIS_SERVER = "CA25_SOLARIS"; my $WTT_NAME = "Watertown"; my $VGS_NAME = "Vegas"; my $RASP_NAME = "Raspberry"; my $CORAL_NAME = "Coral"; my $LANDSCAPE_NAME = "Landscape"; #***************************** GLOBAL VARIABLES ******************************# my $usrID = "a21755"; #change to your CoreID my $usrName = "Ming.He"; #change to your name #my $BUILD_SERVER = $IL93_SERVER; #my $BUILD_SERVER = $CA25_LINUX_SERVER; my $BUILD_SERVER = $CA25_SOLARIS_SERVER; my $BASE_VER = "31R"; my $DEST_VER = "52R"; my @g_configSpecAry = (); #my $bDEBUG = $TRUE; my $bDEBUG = $FALSE; #my $bBuild_DebugVer = $TRUE; my $bBuild_DebugVer = $FALSE; #build debug version of obigo/obigo_browser and phone code my $startPhase = "1"; #starting phase of this script my $bSendToTeam = $TRUE; #Transend the build to team instead of myself my $bApplyMotLabel = $FALSE; #Apply_MOT label to obigo my $SENDCEDAT_CMD = "/home/$usrID/cedat/sendcedat"; my $SENDCEDAT_UNIX_CMD = "/home/$usrID/cedat/unix/sendcedat"; my @labelName_wtt = ("61R", #Moto baseline version "WATER2_X_00", #Moto baseline label "TELECA_OBIGO_P5_3.20", #Teleca baseline version "", #comments "1", #starting phase of this product ); my @labelName_vgs = ("61R", "VEGAS2_X_00", "TELECA_OBIGO_P6_3.20", "", "1", #starting phase of this product ); my @labelName_rasp = ("24R", "RASPB2_X_00", "TELECA_OBIGO_P8_1.14", "", "1", #starting phase of this product ); my $labelName_coral = "CORAL2_X_00"; #++++++++++++++++++++++++++++++ my @baselineDepAry = ( ); #---------------------------------------------------------------------# my $branchName = ""; my $baselineVer = ""; my $telecaRelVer = ""; my $comment = ""; #my $DEST_VER_NUM = ""; #($DEST_VER=~m//d+/ig)[0]; my $SOUR_BUILD_NAME = "standalone_env_$BASE_VER"; my $DEST_BUILD_NAME = "standalone_env_$DEST_VER"; my $LOCAL_BUILD_HOME = "/home/$usrID/teleca_build_env/"; my $SOUR_CODE_FNAME = "/"c source files/""; my $BRH_FNAME = "/"brh files/""; my $TRANS_FOLDER = "/vobs/k_apps/code/TransFolder"; my $buildCmd = ""; my $buildSript = ""; my $copyCmd; if ($BUILD_SERVER eq $IL93_SERVER) { $copyCmd = "/usr/bin/cp"; } elsif ($BUILD_SERVER eq $CA25_LINUX_SERVER || $BUILD_SERVER eq $CA25_SOLARIS_SERVER) { $copyCmd = "/bin/cp"; } else { die "Unknown build server!"; } my $motLabelName = "TELECA_OBIGO_$telecaRelVer/_MOT"; my $phoneCodeName = ""; #"phone_$comment.shx"; my $obigoPath = "/vobs/k_apps/thirdpty/brew/teleca/obigo/"; my $DEBUG_ON = ""; if ($bBuild_DebugVer) { $DEBUG_ON = "DEBUG_ON=1"; } my $BuildVegasFlag = ""; my $ProductName = $WTT_NAME; #flags passed in command line my $bTrans = $TRUE; my $bSetCS = $FALSE; my $bOnlySetCS = $FALSE; my $bBuildCS = $FALSE; my $sour_csFName = ""; my $bBuildIPhoneExt = $FALSE; #*****************************AUXILIARY FUNCTIONS****************************# sub DEBUG_INFO { #if ($bDEBUG) if (1) { if (defined(@_)) { print "@_/n"; } else { print "Not Defined!/n"; } } } sub D { DEBUG_INFO(@_); } sub CCase_INFO { #print "bDEBUG is: $bDEBUG/n"; my $result; if ($bDEBUG) { print "@_/n/n"; return $SUCCESS; } else { print "@_/n/n"; if (0 == system("@_")) { return $SUCCESS; } else { printf("Error occurs when executing command: @_"); #die; return $FAILURE; } } } sub LOG_FILE { my($fileName, $bAppData, @logPara) = @_; #bAppData -- append date to file or overwrite file #DEBUG_INFO($fileName, $bAppData); $fileName =~ s'//'/'ig; my @pathAry = split('/', $fileName); my $tmpPath = ""; for (my $i=0; $i<scalar(@pathAry)-1; $i++) { $tmpPath .= $pathAry[$i] . '/'; #DEBUG_INFO($tmpPath); mkdir($tmpPath, 0111) if (! -d $tmpPath); } if ($bAppData) { $fileName = ">> " . $fileName; #append data } else { $fileName = "> " . $fileName; } open(tmpLogFile, $fileName) || die "Cannot open log file: $fileName!/n"; foreach (@logPara) { print tmpLogFile $_; print tmpLogFile "/n"; } close(tmpLogFile); } sub DIED_AT { my($dieInfo, ) = @_; #$dieInfo=~s" |//"_"ig; # my $dieInfoFName = "/home/$usrID/$dieInfo"; # LOG_FILE($dieInfoFName, $FALSE, " /n"); # CCase_INFO("gzip $dieInfoFName ; "); # TransToMe("$dieInfoFName.gz"); # #CCase_INFO("rm $dieInfoFName.gz "); my $mailCmd = "mail -t $usrID/@motorola.com/r/n"; #CCase_INFO($mailCmd); $mailCmd .= "Subject:Build Fails in $0!/r/n"; #$mailCmd .= $dieInfo; $mailCmd .= "."; CCase_INFO($mailCmd); $mailCmd = "."; CCase_INFO($mailCmd); #die "$dieInfo"; } sub trim($) { my $string = shift; $string =~ s/^/s+//; $string =~ s//s+$//; return $string; } sub isEmptyStr { my ($str) = @_; #D("str is: $str"); my $result = 0; if (!defined($str) || $str eq "" || $str=~m/^/s+$/ig ) { $result = 1; } return $result; } #---------------------------- TRANSEND BY CEDAT ------------------------------------ sub TransToMe { my($fileName) = @_; return TransTo($fileName, $usrName, "$usrID/@motorola.com"); #CCase_INFO("cd $fileFolder; sendcedat -N $usrName -E $usrID/@motorola.com -n MOTOROLA -c $usrName -e $usrID/@motorola.com -f $fileName "); } sub TransToTeam { my($fileName) = @_; return TransTo($fileName, "AMS & Browser Team", "AMSBRWS/@motorola.com"); #CCase_INFO("cd $fileFolder; sendcedat -N $usrName -E $usrID/@motorola.com -n MOTOROLA -c /"AMS & Browser Team/" -e AMSBRWS/@motorola.com -f $fileName "); } sub TransTo { my($fileName, $receiverName, $receiverEMail) = @_; my ($fileFolder, ) = (); my $result = $TRUE; if ($TRUE==$bTrans && $FALSE==$bDEBUG) { die "/nInvalid file name $fileName to trans!/n" if (!defined($fileName) || ! -e $fileName); } $receiverName = $usrName if (!defined($receiverName)); $receiverEMail = "$usrID/@motorola.com" if (!defined($receiverEMail)); $fileFolder = substr($fileName, 0, rindex($fileName, '/')); $fileName = substr($fileName, rindex($fileName, '/')+1); DEBUG_INFO("Folder Name: $fileFolder/tFile Name: $fileName/tReceiver Name: $receiverName/tReceiver Email: $receiverEMail "); if ($TRUE == $bTrans) { my $sendCEDAT; if (($BUILD_SERVER eq $IL93_SERVER) || ($BUILD_SERVER eq $CA25_LINUX_SERVER) ) { $sendCEDAT = $SENDCEDAT_CMD; } elsif ($BUILD_SERVER eq $CA25_SOLARIS_SERVER) { $sendCEDAT = $SENDCEDAT_UNIX_CMD; } $result = CCase_INFO("cd $fileFolder; $sendCEDAT -N /"$usrName/" -E $usrID/@motorola.com -n MOTOROLA -c /"$receiverName/" -e $receiverEMail -f $fileName "); } return $result; } sub TransFile { my ($fileName) = @_; $fileName = trim($fileName); my $result = $TRUE; if ($bSendToTeam) { $result = TransToTeam("$fileName"); # || DIED_AT("Fail to trans file $fileName to team"); } else { $result = TransToMe("$fileName"); # || DIED_AT("Fail to trans file $fileName to me"); } return $result; } sub TransFolder { return $TRUE if ($bDEBUG); my $transFName = "/vobs/k_apps/code/LocalBuild_Files_$DEST_VER/_$ProductName.zip"; opendir(DH, $TRANS_FOLDER) || die "Cannot open directory $TRANS_FOLDER!"; my @files = grep(!/^/./.?$/, readdir DH); closedir(DH); if (scalar(@files) > 0) { #CCase_INFO("cd /vobs/k_apps/code; tar -cvf $transFName $TRANS_FOLDER ; gzip $transFName ; "); CCase_INFO("cd $TRANS_FOLDER; rm $transFName; zip -r $transFName ./* ; "); TransFile("$transFName"); } } sub CopyMoveToTrans { my ($fileName, $isCopy) = @_; CCase_INFO("mkdir $TRANS_FOLDER ") if (! -d $TRANS_FOLDER); if ($isCopy) { CCase_INFO("cp -f $fileName $TRANS_FOLDER/ "); } else { CCase_INFO("cp -f $fileName $TRANS_FOLDER/ ; rm -f $fileName "); } } sub CopyToTrans { CopyMoveToTrans(@_, $TRUE); } #---------------------------- TRANSEND BY CEDAT END ------------------------------------ sub parse_arguments { DEBUG_INFO("All Arguments: @_"); my $arg = ""; for (my $i=0; $i<scalar(@ARGV); $i++) { $arg = $ARGV[$i]; if ($arg =~ /^-setcs$/i) { $bSetCS = $TRUE; DEBUG_INFO("bSetCS is set to $bSetCS..."); # } if ($arg =~ /^-nosetcs$/i) { # $bSetCS = $FALSE; # DEBUG_INFO("bSetCS is set to $bSetCS..."); } elsif ($arg =~ /^-setcs_only$/i) { $bOnlySetCS = $TRUE; DEBUG_INFO("bOnlySetCS is set to $bOnlySetCS..."); #setOriginalCS(); #exit "Set Original config spec over!"; } elsif ($arg =~ /^-notrans$/i) { $bTrans = $FALSE; DEBUG_INFO("bTrans is set to $bTrans..."); } elsif ($arg =~ /^-buildcs$/i) { $bBuildCS = $TRUE; $sour_csFName = $ARGV[$i+1]; $i++; DEBUG_INFO("bBuildCS is set to $bBuildCS..."); } elsif ($arg =~ /^-telecacode$/i) { TransTelecaCode(); exit "Trans Teleca code over!"; } else { #do nothing; } } } sub phaseIsOver { my ($info) = @_; print "$info/n"; TransFolder(); die "$info"; } sub print_usage { print"/n"; printf("********** Build TOOL *********/n"); printf("* 1. Build in Debug Mode? (N) */n"); printf("*******************************/n"); printf("/nChoose An Option: "); } sub select_product { print"/n"; printf("***** SELECT BUILD PRODUCT *****/n"); printf("* 1. Coral / Raspberry (Default) */n"); printf("* 2. Vegas */n"); printf("* 3. Watertown */n"); printf("* 4. Vegas Landscape */n"); printf("**********************************/n"); printf("/nChoose An Option: "); } sub select_receiver { print"/n"; printf("****** SELECT BUILD RECEIVER *********/n"); printf("* 1. To Yourself (Default) */n"); printf("* 2. To AMS & Browser Team */n"); printf("**************************************/n"); printf("/nChoose An Option: "); } #*****************************MAIN FUNCTIONS****************************# sub setOriginalCS { my $configFName = "$LOCAL_BUILD_HOME/sourTmp.cs"; CCase_INFO("rm $configFName; "); LOG_FILE($configFName, $FALSE, @g_configSpecAry); CCase_INFO("cleartool setcs $configFName ") || die "setcs $configFName"; DEBUG_INFO("set original config spec is over!"); } sub convertConfigSpec { return $TRUE if ($bDEBUG); my $configFName = "/vobs/k_apps/code/destTmp.cs"; unlink $configFName if (-e $configFName); CCase_INFO("cleartool catcs > $configFName "); open(hFileHandle, $configFName) || die "Cannot open file: $configFName!/n"; my @sourCS = (); while ($_=<hFileHandle>) { chomp $_; $_ =~ s/^/s+/s+$//ig; #trim heading and ending spaces @sourCS = (@sourCS, $_); } DEBUG_INFO(@destCS); close(hFileHandle); my $csOK = $FALSE; my $rule = ""; my @destCS = (); foreach $rule (@sourCS) { if ( ($rule=~m:^#element : || $rule=~m:^element :) && ($rule=~m:engine_cdma2000/code/dmss/data/data/: || $rule=~m:engine_cdma2000/code/dmss/services/:) ) { $rule =~ s/^#element/element/; $csOK = $TRUE; } #DEBUG_INFO($rule); @destCS = (@destCS, $rule); } DEBUG_INFO(@destCS); if ($csOK) { unlink $configFName if (-e $configFName); LOG_FILE ($configFName, $FALSE, @destCS); CCase_INFO("cleartool setcs $configFName "); } else { die "/n** SKT rules in config spec is missing! **/n"; } } sub convertFilePath { return $TRUE if ($bDEBUG); my ($sourFName) = @_; my $destFName = ""; my $i = 0; do { $i++; $destFName = "$LOCAL_BUILD_HOME/convertPath$i.tmp"; } while (-e $destFName); my @dataAry = (); open(hFileHandle, $sourFName) || die "Cannot open file: $sourFName!/n"; while ($_=<hFileHandle>) { chomp $_; if (m'/vobs/.*/') { s'/vobs/.*/''i; } if ( /GROUP /(2,0x00000000,0x0FFFFFFF,DATA, combo_file_pkg.s /)/ ) { s/0x0FFFFFFF/0x07FFFFFF/ig; } @dataAry = (@dataAry, $_); } close(hFileHandle); DEBUG_INFO(@dataAry); LOG_FILE($sourFName, $FALSE, @dataAry); #CCase_INFO("cp -f $destFName $sourFName ; rm -f $destFName "); } sub copySourceCode { my $copyDest = "/vobs/k_apps/code/"; CCase_INFO("cd $copyDest ; mkdir ./$SOUR_CODE_FNAME/ ; $copyCmd -f /vobs/k_apps/code/brew/mot/inative_ext/src/INativeBrowser.c ./$SOUR_CODE_FNAME/ ; $copyCmd -f /vobs/k_apps/code/brew/mot/inative_ext/src/INativeFavLnchr.c ./$SOUR_CODE_FNAME/ ; $copyCmd -f /vobs/k_apps/code/brew/mot/inative_ext/src/INativeFavLnchr.c ./$SOUR_CODE_FNAME/ ; $copyCmd -f /vobs/k_apps/code/brew/mot/inative_ext/src/INativeFeatureDb.c ./$SOUR_CODE_FNAME/ ; $copyCmd -f /vobs/k_apps/code/brew/mot/inative_ext/src/INativeMainMenu.c ./$SOUR_CODE_FNAME/ ; $copyCmd -f /vobs/k_apps/code/brew/mot/inative_ext/src/INativeRDC.c ./$SOUR_CODE_FNAME/ ; $copyCmd -f /vobs/k_apps/code/brew/mot/inative_ext/src/INativeSettings.c ./$SOUR_CODE_FNAME/ ; $copyCmd -f /vobs/k_apps/code/brew/mot/inative_ext/src/INativeSignIn.c ./$SOUR_CODE_FNAME/ ; $copyCmd -f /vobs/k_apps/code/brew/mot/oem/src/OEMAppFuncs.c ./$SOUR_CODE_FNAME/ ; $copyCmd -f /vobs/cdma_wlan_cm/code/TargetLayer/Rex/Target_SQA.c ./$SOUR_CODE_FNAME/ ; "); CCase_INFO("cd $copyDest ; mkdir ./$BRH_FNAME ; $copyCmd -f /vobs/k_apps/code/brew/mot/ui_toolkit/cml_media/media_128x160/inc/icon_anim.brh ./$BRH_FNAME/ ; $copyCmd -f /vobs/k_apps/code/brew/mot/ui_toolkit/cml_media/media_240x320/inc/icon_anim1.brh ./$BRH_FNAME/ ; $copyCmd -f /vobs/k_apps/code/brew/mot/ui_toolkit/cml_skin/main_screen/inc/sk_graphics.brh ./$BRH_FNAME/ ; "); my $tranFName = "c_source_files_$ProductName.zip"; CCase_INFO("cd $copyDest; rm $tranFName; zip -r $tranFName $SOUR_CODE_FNAME/* ; ") || die "cp_src1.pl"; CopyToTrans("$copyDest/$tranFName"); $tranFName = "brh_files_$ProductName.zip"; CCase_INFO("cd $copyDest; rm $tranFName; zip -r $tranFName $BRH_FNAME/* ; ") || die "cp_src2.pl"; CopyToTrans("$copyDest/$tranFName"); } sub copyEngine2K { my ($DEST_FNAME) = @_; #$DEST_FNAME .= "_$ProductName"; CCase_INFO("cd /vobs/k_apps/code/ ; mkdir ./$DEST_FNAME ; $copyCmd -f /vobs/platform2000/code/engine_cdma2000a.a /vobs/platform2000/code/engine_cdma2000b.a /vobs/platform2000/code/engine_cdma2000_iguana.a /vobs/platform2000/code/engine_cdma2000_QCLibs.a ./$DEST_FNAME/ "); CCase_INFO("cd /vobs/k_apps/code/ ; rm $DEST_FNAME.zip; zip -r $DEST_FNAME.zip $DEST_FNAME/*;") || die "cp_engine2k_1.pl"; CCase_INFO("cd /vobs/k_apps/code/ ; rm $DEST_FNAME/*;") || die "cp_engine2k_2.pl"; CopyToTrans("/vobs/k_apps/code/$DEST_FNAME.zip"); } sub TransTelecaCode { my $tranFName = "$telecaRelVer/_code.tar"; CCase_INFO("cd /vobs/teleca_sow1; rm -f $telecaRelVer/_code* ; tar -cvf $tranFName code ; gzip $tranFName ;"); TransToMe("/vobs/teleca_sow1/$tranFName.gz"); } ##################################################################### sub Build_LocalBuild { my $tranFName = ""; my @fileNames = (); #CCase_INFO("cd $TRANS_FOLDER; rm * ; ") if (-d $TRANS_FOLDER); if ($bBuildIPhoneExt) { my $option; while (1) { DEBUG_INFO("/nAre you sure to start local build specially for IPhoneExt ? "); $option = <STDIN>; chomp $option; if ($option eq 'y' || $option eq 'Y') { last; } elsif ($option eq 'n' || $option eq 'N') { DEBUG_INFO("** Local build should NOT have bBuildIPhoneExt=$bBuildIPhoneExt, try again!"); exit 1; } }#while } if ($startPhase ne "1") { my $option; while (1) { DEBUG_INFO("/nAre you sure to start build from Phase_$startPhase instead of Phase_1 ?"); $option = <STDIN>; chomp $option; if ($option eq 'y' || $option eq 'Y') { last; } elsif ($option eq 'n' || $option eq 'N') { DEBUG_INFO("** Wrong build starting phase, try again!"); exit 1; } }#while } DEBUG_INFO("** Start build Local Build from Phase: $startPhase **/n"); goto "PHASE$startPhase"; ########### PHASE1: D("+++ Enter Phase_1!"); ########### if ($bSetCS) { setOriginalCS(); #hem } #phaseIsOver("PHASE 1 over!"); ########### PHASE2: D("+++ Enter Phase_2!"); ########### CCase_INFO("rm -f /vobs/platform2000/code/* ;"); CCase_INFO("cd /vobs/platform2000/code/; $buildCmd ") || die "build cdma_1x_phone"; if ($bBuildIPhoneExt) { my $shxFName = "PhoneCode_$DEST_VER/_$ProductName.shx"; CCase_INFO("cd /vobs/platform2000/code/; rm $shxFName*; /vobs/engine_boot/tools/create_phone_shx ; mv phone.shx $shxFName ; gzip $shxFName "); TransFile("/vobs/platform2000/code/$shxFName.gz"); } #-------- #PHASE2_5: #-------- #phaseIsOver("PHASE 2 over!"); ########### PHASE3: D("+++ Enter Phase_3!"); ########### CCase_INFO("cd /vobs/k_apps/code/; rm -rf template ; rm -r $SOUR_BUILD_NAME.* ; $copyCmd -f $LOCAL_BUILD_HOME/$SOUR_BUILD_NAME.tar.gz . ; gunzip $SOUR_BUILD_NAME.tar.gz; tar -xvf $SOUR_BUILD_NAME.tar ; ") || die "copy $SOUR_BUILD_NAME to /vobs/k_apps/code/"; if ($BUILD_SERVER eq $CA25_SOLARIS_SERVER) { CCase_INFO("cp -f $LOCAL_BUILD_HOME/bak/build_phone_ca25.ksh /vobs/k_apps/code/template/build_phone.ksh ;") } #-------- PHASE3_1: #-------- if ($ProductName eq $RASP_NAME || $ProductName eq $LANDSCAPE_NAME) { CCase_INFO("cp -f $LOCAL_BUILD_HOME/bak/Makefile_Rasp /vobs/k_apps/code/template/Makefile ; cp -f $LOCAL_BUILD_HOME/bak/elfweaver.exe /vobs/k_apps/code/template/win32/ ; cp -f $LOCAL_BUILD_HOME/bak/quartz_cfg_M.xml /vobs/k_apps/code/template/ "); } CCase_INFO("cd /vobs/k_apps/code/template/; rm config_record; chmod 755 *; ksh build_phone.ksh clean_all; rm -f archives; mkdir archives; ksh build_phone.ksh copy_binaries ; ") || die "rm config_record..."; CCase_INFO("cd /vobs/k_apps/code/template/; $copyCmd -f /vobs/atso_tools/build/lib/memmap_M.cfg /vobs/atso_tools/build/lib/m6800B_M_rom_nand.scl /vobs/engine_cdma2000/code/dmss/mot/hw_config.h /vobs/engine_boot/tools/cdma2000_ramflash.s /vobs/engine_boot/tools/cdma1x_combo_file.pmf /vobs/engine_boot/tools/gen_phone_file.txt /vobs/cdma2000_integration/tools/arm9_jtag_nand/partition.mbn /vobs/atso_tools/build/lib/startup.script /vobs/platform2000/code/smbrlaz.reloc /vobs/engine_boot/code/ota_update_agent/release/ua.bin /vobs/k_apps/code/template/; rm /vobs/k_apps/code/template/smbrlaz.reloc; ") || die "copy files..."; # old CCase_INFO("cd /vobs/k_apps/code/template/; $copyCmd -f /vobs/engine_cdma2000/code/dmss/build/ms/memmap_M.cfg /vobs/engine_cdma2000/code/dmss/build/ms/m6800B_M_rom_nand.scl /vobs/engine_cdma2000/code/dmss/mot/hw_config.h /vobs/engine_boot/tools/cdma2000_ramflash.s /vobs/engine_boot/tools/cdma1x_combo_file.pmf /vobs/engine_boot/tools/gen_phone_file.txt /vobs/cdma2000_integration/tools/arm9_jtag_nand/partition.mbn /vobs/atso_tools/build/lib/startup.script /vobs/platform2000/code/smbrlaz.reloc /vobs/engine_boot/code/ota_update_agent/release/ua.bin /vobs/k_apps/code/template/; rm /vobs/k_apps/code/template/smbrlaz.reloc; ") || die "copy files..."; #--------- PHASE3_5: #--------- CCase_INFO("rm /vobs/k_apps/code/template/6800_build.bat ;"); CCase_INFO("$copyCmd -f $LOCAL_BUILD_HOME/bak/$buildSript /vobs/k_apps/code/template/$buildSript ; ") || die "copy 6800_build.bat"; if (! ($ProductName eq $RASP_NAME || $ProductName eq $LANDSCAPE_NAME)) { CCase_INFO("$copyCmd -f $LOCAL_BUILD_HOME/bak/m6800B_M_rom_nand.scl /vobs/k_apps/code/template/m6800B_M_rom_nand.scl; ") || die "copy m6800B_M_rom_nand.scl"; } #CCase_INFO("$copyCmd -f $LOCAL_BUILD_HOME/gen_phone_file.txt /vobs/k_apps/code/template/gen_phone_file.txt; ") || die "copy gen_phone_file.txt"; convertFilePath("/vobs/k_apps/code/template/gen_phone_file.txt") || die "convertFilePath for gen_phone_file.txt"; convertFilePath("/vobs/k_apps/code/template/cdma1x_combo_file.pmf") || die "convertFilePath for cdma1x_combo_file.pmf"; #--------- PHASE3_6: #--------- $tranFName = "$DEST_BUILD_NAME/_$ProductName.tar"; CCase_INFO("cd /vobs/k_apps/code; rm -r $tranFName/*; tar -cvf $tranFName template; gzip $tranFName ") || die "tar $DEST_BUILD_NAME.tar"; TransFile("/vobs/k_apps/code/$tranFName/.gz"); # || die "Trans2Me $DEST_BUILD_NAME.tar.gz" ; #phaseIsOver("PHASE 3 over!"); goto PHASE7 if ($bBuildIPhoneExt); ########### PHASE4: D("+++ Enter Phase_4!"); ########### $tranFName = "File_List_$ProductName.zip"; CCase_INFO("cd /vobs/k_apps/code/ ; rm hdr_list; rm bid_list_cap; rm bid_list; cleartool find -avobs -cview -name /"*.h/" -print > hdr_list; cleartool find -avobs -cview -name /"*.BID/" -print > bid_list_cap; cleartool find -avobs -cview -name /"*.bid/" -print > bid_list; zip $tranFName hdr_list bid_list_cap bid_list ") || die "copy hdr_list, bid_list_cap, bid_list "; CopyToTrans("/vobs/k_apps/code/$tranFName"); ########### PHASE5: D("+++ Enter Phase_5!"); ########### #remove bidlist and hdrlist folder first my $sourDir = "/vobs/k_apps/code/"; opendir(DH, $sourDir) || die "Cannot open directory $sourDir!"; @fileNames = grep(!/^/./.?$/, readdir DH); closedir(DH); foreach my $fileName (@fileNames) { if ($fileName =~ m/[bid|hdr]-/d{8}-/d{4}/) { CCase_INFO("cd $sourDir ; rm -rf $fileName ; "); #remove bid/hdr folder&files in last time build #DEBUG_INFO("ready to remove $sourDir//$fileName... "); } } CCase_INFO("cd /vobs/k_apps/code/; cp $LOCAL_BUILD_HOME/bak/bidlist . ; bash $LOCAL_BUILD_HOME/script/genbid bidlist"); CCase_INFO("cd /vobs/k_apps/code/; cp $LOCAL_BUILD_HOME/bak/hdrlist . ; bash $LOCAL_BUILD_HOME/script/genhdr hdrlist"); opendir(DH, $sourDir) || die "Cannot open directory $sourDir!"; @fileNames = grep(!/^/./.?$/, readdir DH); closedir(DH); CCase_INFO("cd $TRANS_FOLDER ; rm hdr-*; rm bid-*; "); foreach my $fileName (@fileNames) { #DEBUG_INFO("File or Folder Name is: $fileName"); if ((-d $sourDir .'/'. $fileName) && $fileName=~m/[bid|hdr]-/d{8}-/d{4}/ ) { $tranFName = "$fileName/_$ProductName"; CCase_INFO("cd $sourDir ; rm -f $fileName.tar* ; rm -f $tranFName.tar* ; tar -cvf $tranFName.tar $fileName ; gzip $tranFName.tar ; ") || die "tar $fileName.tar"; CopyMoveToTrans("$sourDir/$tranFName.tar.gz", $FALSE); #move file instead of copy } } #phaseIsOver("PHASE 5 over!"); ########### PHASE6: D("+++ Enter Phase_6!"); ########### copySourceCode(); #phaseIsOver("PHASE 6 over!"); ########### PHASE7: D("+++ Enter Phase_7!"); ########### #Change config spec to enable SKT rules then rebuild the phone code convertConfigSpec(); CCase_INFO("rm -f /vobs/platform2000/code/* ;"); CCase_INFO("cd /vobs/platform2000/code/; $buildCmd ") || die "build cdma_1x_phone"; #--------- PHASE7_4: #--------- my $sktFName = "PhoneCode_$DEST_VER/_SKT_$ProductName.shx"; CCase_INFO("cd /vobs/platform2000/code/; rm $sktFName*; /vobs/engine_boot/tools/create_phone_shx ; mv phone.shx $sktFName ; gzip $sktFName "); TransFile("/vobs/platform2000/code/$sktFName.gz"); # old CCase_INFO("cd /vobs/platform2000/code/; /usr/global/share/submit '/vobs/atso_tools/build/bin/acmake' PRODUCT=cdma2000_6800 LAB_BUILD=TRUE MW=TRUE MW_CONFIG_H=MW_Config_Suapi.h MRSF_CONFIG_H=/vobs/synergy_device_layer/code/dl_mrsf/ProductConfig.h cdma_1x_phone ") || die "build cdma_1x_phone"; #--------- PHASE7_5: #--------- my $DEST_FNAME = "engine_cdma2000"; copyEngine2K("$DEST_FNAME/_$ProductName"); if ($bBuildIPhoneExt) { TransFile("/vobs/k_apps/code/$DEST_FNAME/_$ProductName.zip"); goto PHASE100; } #phaseIsOver("PHASE 7 over!"); ########### PHASE8: D("+++ Enter Phase_8!"); ########### my $logFName = ""; my $viewName = $ENV{"CLEARCASE_ROOT"}; $viewName = substr($viewName, rindex($viewName, '/')+1); DEBUG_INFO("View Name is: $viewName"); my $buildDir = "/home/$usrID/bldlogs/"; opendir(DH, "$buildDir") || die "Cannot open directory $buildDir!"; @fileNames = grep(!/^/./.?$/, readdir DH); closedir(DH); foreach my $fileName (@fileNames) { DEBUG_INFO("File or Folder Name is: $fileName"); if ($fileName=~m/$viewName.*/.gz$/ ) { $fileName =~ s/.gz$//i; $logFName = $fileName; } } if (! isEmptyStr($logFName)) { $fileName = $logFName; DEBUG_INFO("/nLog File Name is: $fileName"); $logFName = "BuildLog_$DEST_VER/_teleca_$ProductName.log"; CCase_INFO("cd $buildDir; rm $logFName.gz; cp $fileName/.gz $logFName.gz; "); CCase_INFO("cd $buildDir; rm $logFName; gunzip $logFName.gz ; gzip $logFName "); CopyToTrans("$buildDir/$logFName/.gz"); } ########### PHASE90: ########### TransFolder(); ########### PHASE100: ########### print "/n/n+++ Local Build Env of $ProductName for Teleca complete! +++/n/n"; } ############################################################################### sub compTelecaRelease { my @compResultAry = (); my $comparDirName = "/vobs/teleca_sow1/code/"; my ($sourLabel, $destLabel, $fileNum, $dirNum) = ($labelName_wtt[2], $labelName_vgs[2], 0, 0); my $resultFName = "/home/$usrID/code/result.txt"; unlink $resultFName if (-e $resultFName); comparFiles($comparDirName, $sourLabel, $destLabel, /@compResultAry, /$fileNum, /$dirNum); DEBUG_INFO("compare result is: @compResultAry"); DEBUG_INFO("FileNum is $fileNum, DirNum is: $dirNum"); LOG_FILE($resultFName, $FALSE, "/n*** Compare Result of $sourLabel & $destLabel under $comparDirName ***/n"); LOG_FILE($resultFName, $TRUE, "". scalar(@compResultAry)/3 ." files are different in $fileNum files and $dirNum directories./n"); LOG_FILE($resultFName, $TRUE, @compResultAry); } sub comparFiles { my ($folderName, $label1, $label2, $compResultAry, $fileNum, $dirNum) = @_; DEBUG_INFO("Folder Name is: $folderName /tLabel1 is: $label1 /tLabel2 is: $label2"); my ($verFile1, $verFile2) = ("/home/$usrID/code/ver1.txt", "/home/$usrID/code/ver2.txt"); my ($ver1, $ver2) = ("", ""); my $compValue = 0; opendir(DH, $folderName) || die "Cannot open directory $folderName!"; my @fileNames = grep(!/^/./.?$/, readdir DH); closedir(DH); my $fileName; foreach $fileName (@fileNames) { if (-d "$folderName/$fileName") { $$dirNum++; comparFiles("$folderName/$fileName", $label1, $label2, $compResultAry, $fileNum, $dirNum); } else { $$fileNum++; #$result = CCase_INFO("cleartool find $folderName/$fileName -version 'lbtype($DEST_TELECA_VER)' -exec 'cleartool diff -option /"-qui -b/" $folderName/$fileName /$CLEARCASE_XPN' "); CCase_INFO("cleartool find $folderName/$fileName -version 'lbtype($label1)' -print > $verFile1 "); CCase_INFO("cleartool find $folderName/$fileName -version 'lbtype($label2)' -print > $verFile2 "); open(hFileHandle, $verFile1); $ver1=<hFileHandle>; close(hFileHandle); chomp $ver1; open(hFileHandle, $verFile2); $ver2=<hFileHandle>; close(hFileHandle); chomp $ver2; #DEBUG_INFO("Ver1 is: $ver1/tVer2 is: $ver2"); $compValue = 0; trim(ver1); trim(ver2); if (ver1 ne "" && ver2 ne "" && ver1=~//S*/ && ver2=~//S*/) { $compValue = CCase_INFO("cleartool diff -option /"-status_only -b/" $ver1 $ver2"); } if (1 == $compValue) { #DEBUG_INFO("/n$ver1 and $ver2 are identical!"); } else { #DEBUG_INFO("/n$ver1 and $ver2 are different!"); @$compResultAry = (@$compResultAry, $ver1, $ver2, "/n"); } } } } sub getEnvVariables { my $envVarFName = "/home/$usrID/env_vars.txt"; unlink $envVarFName if (-e $envVarFName); my $result; my @keyNames = keys(%ENV); foreach my $keyName (@keyNames) { $result .= "$keyName/t:" . $ENV{$keyName} . "/n"; } DEBUG_INFO("Result is:/n$result"); LOG_FILE($envVarFName, $FALSE, $result); } sub getBuildServerConfig { my $hostName = $ENV{HOSTNAME}; $hostName = $ENV{HOST} if ($hostName eq ""); DEBUG_INFO("Host Name is: $hostName"); if ($hostName =~ m/panther/i) { $BUILD_SERVER = $IL93_SERVER; } elsif ($hostName =~ m/ca25log/i) { $BUILD_SERVER = $CA25_SOLARIS_SERVER; } elsif ($hostName =~ m/ca25rhe/i) { $BUILD_SERVER = $CA25_LINUX_SERVER; die "*** Cannot make local build env on Linux servers! ***/nBecause Local Build Env script does NOT work in Linux!"; } else { die "Unknown build server!" if (!$bDEBUG); } DEBUG_INFO("Build Server is: $BUILD_SERVER"); } #--------------------------------------------------------------------------------------------- sub Test { #DEBUG_INFO("Clearcase ROOT is: $CLEARCASE_ROOT $0"); #my $result; #$result = CCase_INFO("cd /vobs/teleca_sow1/code/browser/OBIGO-q05a/applet/mod/obigo/usr_data/skins/; cleartool diff SprintStandardQVGA.ows@@/main/par_x_teleca_p6_vegas/2 SprintStandardQVGA.ows@@/main/par_x_teleca_p6_vegas/2"); #$result = CCase_INFO("cleartool diff -options /"-qui -b/" /vobs/teleca_sow1/code/browser/IPhoneExt/IPhoneExt.c@@/main/par_x_teleca_p6_vegas/4 /vobs/teleca_sow1/code/browser/IPhoneExt/IPhoneExt.c@@/main/par_x_teleca_p6_vegas/4"); #DEBUG_INFO("result 1 is: $result!"); #$result = CCase_INFO("cd /vobs/teleca_sow1/code/browser/OBIGO-q05a/applet/mod/obigo/usr_data/skins/; cleartool diff SprintStandardQVGA.ows@@/main/par_x_teleca_p6_vegas/2 SprintStandardQVGA.ows@@/main/par_x_teleca_p6_vegas/1"); #$result = CCase_INFO("cleartool diff -option /"-qui -b/" /vobs/teleca_sow1/code/browser/IPhoneExt/IPhoneExt.c@@/main/par_x_teleca_p6_vegas/4 /vobs/teleca_sow1/code/browser/IPhoneExt/IPhoneExt.c@@/main/par_x_teleca_p6_vegas/3 "); #DEBUG_INFO("result 2 is: $result!"); # CCase_INFO("cleartool find /vobs/teleca_sow1/code/browser/IPhoneExt/IPhoneExt.c -version 'lbtype(TELECA_OBIGO_P5_3.7)' -print"); # $result = $CLEARCASE_XPN; # DEBUG_INFO("result 3 is: $result!"); # $result = CCase_INFO("cleartool find /vobs/teleca_sow1/code/browser/IPhoneExt/IPhoneExt.c -version 'lbtype(TELECA_OBIGO_P5_3.6)' -print"); # DEBUG_INFO("result 4 is: $result!"); #convertConfigSpec(); #setOriginalCS(); #convertFilePath("/vobs/k_apps/code/template/gen_phone_file.txt") || die "convertFilePath for gen_phone_file.txt"; #convertFilePath("/vobs/k_apps/code/template/cdma1x_combo_file.pmf") || die "convertFilePath for cdma1x_combo_file.pmf"; #my $sourDir = "/vobs/k_apps/code/"; #opendir(DH, $sourDir) || die "Cannot open directory $sourDir!"; #my @fileNames = grep(!/^/./.?$/, readdir DH); #my $fileName; #foreach $fileName (@fileNames) { # #DEBUG_INFO("File or Folder Name is: $fileName"); # if ((-e "$sourDir//$fileName") && $fileName=~m/[bid|hdr]-/d{8}-/d{4}/ ) { # CCase_INFO("cd $sourDir; rm -f $fileName.tar* ; tar -cvf $fileName.tar $fileName ; gzip $fileName.tar ; ") || die "tar $fileName.tar"; # TransFile("$sourDir/$fileName.tar.gz"); # } #} #closedir(DH); #DIED_AT("build fails here!/n r u ready?"); exit 1; } ##################################################################### parse_arguments(@ARGV); getBuildServerConfig(); print_usage(); my $option = <STDIN>; chomp $option; if ($option eq 'y' || $option eq 'Y') { $bDEBUG = $TRUE; } else { $bDEBUG = $FALSE; } ##################################################################### sub main { while (1) { select_product(); $option = <STDIN>; chomp $option; if (3==$option) { #for Watertown product $ProductName = $WTT_NAME; $DEST_VER = $labelName_wtt[0]; $telecaRelVer = $labelName_wtt[2]; $comment = $labelName_wtt[3]; $baselineVer= "WATER2_X_00." . ($DEST_VER=~m//d+/ig)[0] . ".00R/n"; $startPhase = $labelName_wtt[4]; $buildSript = "6800_build_wtt.bat"; last; } elsif (2==$option) { #for Vegas product $ProductName = $VGS_NAME; $DEST_VER = $labelName_vgs[0]; $telecaRelVer = $labelName_vgs[2]; $comment = $labelName_vgs[3]; $baselineVer= "VEGAS2_X_00." . ($DEST_VER=~m//d+/ig)[0] . ".00R/n"; $startPhase = $labelName_vgs[4]; $buildSript = "6800_build_vgs.bat"; last; } else { #for Raspberry / Coral product $DEST_VER = $labelName_rasp[0]; # my $verNum = substr($DEST_VER, 0, index($DEST_VER, "R")); # D("VerNum is: $verNum"); # if ($verNum >= 23) if ($DEST_VER > "22R") { $labelName_rasp[1] = $labelName_coral; #product name changes to Coral since 23R $RASP_NAME = $CORAL_NAME; } $telecaRelVer = $labelName_rasp[2]; $comment = $labelName_rasp[3]; $baselineVer= $labelName_rasp[1] . "." . ($DEST_VER=~m//d+/ig)[0] . ".00R/n"; $startPhase = $labelName_rasp[4]; $buildSript = "6800_build_rasp.bat"; #$bSetCS = $FALSE; if (4==$option) { #for Vegas product landscape version $ProductName = $LANDSCAPE_NAME; } else { $ProductName = $RASP_NAME; } last; } } DEBUG_INFO("/n*** Ready to build for $ProductName product! ***/n"); if ($ProductName eq $VGS_NAME) { $BuildVegasFlag = "MAKE_SPRINT_VEGAS_SPECIFIC=TRUE"; } else { $BuildVegasFlag = ""; } $DEST_BUILD_NAME = "BuildEnv_$DEST_VER" . "$comment"; DEBUG_INFO("DEST_BUILD_NAME is: $DEST_BUILD_NAME"); if ($ProductName eq $RASP_NAME || $ProductName eq $LANDSCAPE_NAME) { @g_configSpecAry = ( "/nelement * CHECKEDOUT", "", "#For SKT (Coral / Raspberry)", "#element /vobs/engine_cdma2000/code/dmss/data/data/ps_ppp_auth.c /main/par_x_raspberry_r90.2/dbg_il93e_a21755_skt_teleca_korea/1", "#element /vobs/engine_cdma2000/code/dmss/services/diag/nvdiag.c /main/par_x_qualcomm_amss6800/par_x_qualcomm_amss6800_5x/dbg_il93e_a21755_skt_teleca_korea/1", "#element /vobs/engine_cdma2000/code/dmss/services/nv/nvio.c /main/par_x_raspberry_r90.2/dbg_il93e_a21755_skt_teleca_korea/1", ); if ($ProductName eq $LANDSCAPE_NAME) { @g_configSpecAry = ( @g_configSpecAry, "", "#For Watertown & Vegas HW only!!!!", "element /vobs/engine_boot/tools/... .../libpp23316_ca25_mdtc67_56p5_rasp_boot/LATEST", "element /vobs/cdma2000_integration/tools/arm9_jtag_nand/... .../libpp23316_ca25_mdtc67_56p5_rasp_boot/LATEST", "element /vobs/engine_boot/tools/... BOOT6800_X_R39.2_V2.00.00R", "element /vobs/cdma2000_integration/tools/arm9_jtag_nand/... BOOT6800_X_R39.2_V2.00.00R", "element /vobs/engine_boot/tools/... .../libpp23316_ca25_e11456_56p2_rasp_boot_0d/LATEST", "element /vobs/cdma2000_integration/tools/arm9_jtag_nand/... .../libpp23316_ca25_e11456_56p2_rasp_boot_0d/LATEST", "element /vobs/engine_boot/tools/... BOOT6800_X_R39.2_V1.0D.00R", "element /vobs/cdma2000_integration/tools/arm9_jtag_nand/... BOOT6800_X_R39.2_V1.0D.00R", ) } } else { #SKT version rules for WTT & VGS @g_configSpecAry = ( "/nelement * CHECKEDOUT", "", "#For SKT (WTT & VGS)", "#element /vobs/engine_cdma2000/code/dmss/data/data/ps_ppp_auth.c /main/par_x_cheyn_r39.2/dbg_il93g_a21952_skt_teleca_korea/1", "#element /vobs/engine_cdma2000/code/dmss/services/diag/nvdiag.c /main/par_x_qualcomm_amss6800/par_x_qualcomm_amss6800_5x/par_x_qualcomm_amss6800_r5.3/dbg_il93g_a21952_skt_teleca_korea/1", "#element /vobs/engine_cdma2000/code/dmss/services/nv/nvio.c /main/par_x_cheyn_r39.2/dbg_il93g_a21952_skt_teleca_korea/5", ); } if ($bSetCS && scalar(@baselineDepAry) > 0) { my $option; while (1) { DEBUG_INFO("/nAre you sure to start local build with baseline dependency ? "); $option = <STDIN>; chomp $option; if ($option eq 'y' || $option eq 'Y') { last; } elsif ($option eq 'n' || $option eq 'N') { DEBUG_INFO("** Local build should not have /@baselineDepAry, try again!"); exit 1; } }#while #for (my $i=0; $i<scalar(@baselineDepAry); $i++) { @g_configSpecAry = (@g_configSpecAry, "/n", @baselineDepAry); } if ($BUILD_SERVER eq $CA25_LINUX_SERVER) { @g_configSpecAry = ( @g_configSpecAry, #"/n#0D BOOTLOADER RULES/BRANCHES", #"element /vobs/engine_boot/tools/... BOOT6800_X_R39.2_V1.0D.00R", #"element /vobs/cdma2000_integration/tools/arm9_jtag_nand/... BOOT6800_X_R39.2_V1.0D.00R", "", #"element /vobs/atso_tools/perl5/... PERL_N_05.88.0BI", #"element /vobs/atso_tools/util/... PERL_N_05.88.0BI", #"element /vobs/atso_tools/perl5/... PERL_N_05.88.0BI_LINUX", #"element /vobs/atso_tools/util/... PERL_N_05.88.0BI_LINUX", "element /vobs/arm_development_suite/... ADS_1.2_BUILD848_ALL", "element /vobs/atso_tools/perl5/... PERL_N_05.88.0BI_LINUX", "element /vobs/atso_tools/util/ruby/... RUBY_N_01.84.05I_LINUX", "element /vobs/wsd_cmtools/... PYTHON_N_02.04.03I_LINUX", ); } @g_configSpecAry = ( @g_configSpecAry, "/n##############################################", "# $DEST_VER Baseline", "##############################################", "", "element /vobs/teleca_sow1/... $telecaRelVer/n", #"element * ATHNS2_X_00.$DEST_VER_NUM.00R/n", "element * $baselineVer/n", ); #foreach my $cs (@g_configSpecAry) {DEBUG_INFO($cs);} if ($TRUE == $bOnlySetCS) { setOriginalCS(); exit "Set Original config spec over!"; } if ($ProductName eq $LANDSCAPE_NAME) { my $vgsHwBuildFlag_landscape = "HW_VEGAS=TRUE"; $vgsHwBuildFlag_landscape = " HW_RASP=FALSE $vgsHwBuildFlag_landscape " ; die "Cannot use $vgsHwBuildFlag_landscape for non-Raspberry product!/n" if ($ProductName ne $LANDSCAPE_NAME); $BuildVegasFlag = $BuildVegasFlag . " $vgsHwBuildFlag_landscape"; DEBUG_INFO("BuildVegasFlag is: $BuildVegasFlag/n"); } DEBUG_INFO("** Branch Name is: $branchName/tTeleca Ver is: $telecaRelVer"); DEBUG_INFO("comments is: $comment "); if ($BUILD_SERVER eq $IL93_SERVER) { $buildCmd = "/usr/global/share/submit '/vobs/atso_tools/build/bin/acmake' PRODUCT=cdma2000_6800 LAB_BUILD=TRUE MW=TRUE MW_CONFIG_H=/vobs/synergy_device_layer/code/dl_mw/ProductConfig.h MRSF_CONFIG_H=/vobs/synergy_device_layer/code/dl_mrsf/ProductConfig.h $BuildVegasFlag cdma_1x_phone "; } elsif ($BUILD_SERVER eq $CA25_SOLARIS_SERVER) { $buildCmd = "bsub -q ca25-sunbld -Ip '/vobs/atso_tools/build/bin/acmake' PRODUCT=cdma2000_6800 LAB_BUILD=TRUE MW=TRUE MW_CONFIG_H=/vobs/synergy_device_layer/code/dl_mw/ProductConfig.h MRSF_CONFIG_H=/vobs/synergy_device_layer/code/dl_mrsf/ProductConfig.h $BuildVegasFlag cdma_1x_phone "; } elsif ($BUILD_SERVER eq $CA25_LINUX_SERVER) { $buildCmd = "bsub -q ca25-lnxbld -Ip '/vobs/atso_tools/build/bin/acmake' PRODUCT=cdma2000_6800 LAB_BUILD=TRUE MW=TRUE MW_CONFIG_H=/vobs/synergy_device_layer/code/dl_mw/ProductConfig.h MRSF_CONFIG_H=/vobs/synergy_device_layer/code/dl_mrsf/ProductConfig.h $BuildVegasFlag cdma_1x_phone "; } else { die "Unknown / Unsupported build server!"; } while (1) { select_receiver(); $option = <STDIN>; chomp $option; if (2==$option) { $bSendToTeam = $TRUE; last; } else { $bSendToTeam = $FALSE; ##send to myself by default last; } } ##################### # BUILD_LocalBuild: ##################### printf"!** It is going to build DEBUG version for $ProductName product **!/n" if ($bBuild_DebugVer); Build_LocalBuild(); } ##################################################################### #Test(); exit 1; #compTelecaRelease(); exit 1; #getEnvVariables(); exit 1; main(); #TransTelecaCode();
相关文章推荐
- JavaScript与JSP(服务器端脚本)间的协同工作
- SIGPIPE导致cronttab和shell脚本等工作异常
- linux小脚本用到工作上
- 8个工作使用而有趣的linux脚本
- Shell脚本与vi编辑器:vi启动与退出、工作模式、命令大全
- robot脚本__在工作中曾试用过的一个脚本
- 日常工作经常使用到的脚本或技术
- linux 脚本 之 简化工作
- 终于用PYTHON作了一个实用于工作的脚本啦----通过邮件定时发送服务器空闲空间
- linux系统初始化——启动脚本是如何工作的
- mac下快速挂在实验室工作盘和远程登录脚本
- 用脚本来简化iOS美术同学的工作
- 通过脚本改变当前的工作路径
- 辨析:工作路径与脚本路径
- [BAT]批处理脚本双击可运行,但在定时计划任务中无法执行(当前工作路径不对导致的)
- loadrunner 11 录制脚本时提示IE浏览器已停止工作
- voting doesnot work by two Domain name两个域名同时指向Pligg站点出现:投票脚本不能工作(cross domain problem?)
- 工作需要,Linux下自动FTP备份并上传备份服务器的脚本
- Maximo工作流程相关表结构分析与工作流迁移脚本
- Linux下使用Shell脚本改变当前工作路径