20 |
20 |
21 my $sBOOTSTRAP_DIR="C:\\Apps\\FBF\\bootstrap"; |
21 my $sBOOTSTRAP_DIR="C:\\Apps\\FBF\\bootstrap"; |
22 my $sJOB_BASE_DIR="fbf_project"; |
22 my $sJOB_BASE_DIR="fbf_project"; |
23 my $nMAX_JOBDIR_AGE_SECONDS = 86400; # max number of seconds after which the letter is forcibly released |
23 my $nMAX_JOBDIR_AGE_SECONDS = 86400; # max number of seconds after which the letter is forcibly released |
24 my $nLOCK_FILE_MAX_ATTEMPTS = 5; |
24 my $nLOCK_FILE_MAX_ATTEMPTS = 5; |
|
25 my $sREMOTE_LOG_ARCHIVE="\\\\bishare\SF_builds"; |
25 my $sNUMBERS_FILE="\\\\bishare\\SF_builds\\numbers2.txt"; |
26 my $sNUMBERS_FILE="\\\\bishare\\SF_builds\\numbers2.txt"; |
26 my $sLETTERS_FILE="letters.txt"; |
27 my $sLETTERS_FILE="letters.txt"; |
27 my $nMAX_LETTER_AGE_SECONDS = 86400; # max number of seconds after which the letter is forcibly released |
28 my $nMAX_LETTER_AGE_SECONDS = 86400; # max number of seconds after which the letter is forcibly released |
28 |
29 |
29 my $sFbfProjectRepo = "\\\\bishare\\mercurial_development\\oss\\FCL\\interim\\fbf\\projects\\packages"; |
30 my $sFbfProjectRepo = "\\\\bishare\\mercurial_development\\oss\\FCL\\interim\\fbf\\projects\\packages"; |
166 $sConfigArg = "-Dsf.config.dir=$sFbfConfigDir" if ($sFbfConfigDir); |
167 $sConfigArg = "-Dsf.config.dir=$sFbfConfigDir" if ($sFbfConfigDir); |
167 my $sProjectArg = "-Dsf.project.repo=$sFbfProjectRepo"; |
168 my $sProjectArg = "-Dsf.project.repo=$sFbfProjectRepo"; |
168 $sProjectArg .= " -Dsf.project.rev=$sFbfProjectRev" if ($sFbfProjectRev); |
169 $sProjectArg .= " -Dsf.project.rev=$sFbfProjectRev" if ($sFbfProjectRev); |
169 $sProjectArg = "-Dsf.project.dir=$sFbfProjectDir" if ($sFbfProjectDir); |
170 $sProjectArg = "-Dsf.project.dir=$sFbfProjectDir" if ($sFbfProjectDir); |
170 print("hlm -f bootstrap.xml $sConfigArg $sProjectArg -Dsf.target.dir=$sJobDir\n"); |
171 print("hlm -f bootstrap.xml $sConfigArg $sProjectArg -Dsf.target.dir=$sJobDir\n"); |
171 system("hlm -f bootstrap.xml $sConfigArg $sProjectArg -Dsf.target.dir=$sJobDir"); |
172 system("hlm -f bootstrap.xml $sConfigArg $sProjectArg -Dsf.target.dir=$sJobDir >console_bootstrap_$$.txt 2>&1"); |
172 |
173 |
173 # check that $sNUMBERS_FILE exists, otherwise create it |
174 # check that $sNUMBERS_FILE exists, otherwise create it |
174 if (!-f $sNUMBERS_FILE) |
175 if (!-f $sNUMBERS_FILE) |
175 { |
176 { |
176 open FILE, ">$sNUMBERS_FILE"; |
177 open FILE, ">$sNUMBERS_FILE"; |
177 print FILE "\n"; |
178 print FILE "\n"; |
178 close FILE; |
179 close FILE; |
179 } |
180 } |
180 |
181 |
181 my $sJobNumberKey = ''; |
182 my $sJobNumberKey = ''; |
|
183 my $sPackage = ''; |
|
184 my $sPlatform = ''; |
182 my $nUnformattedNumber = 0; |
185 my $nUnformattedNumber = 0; |
183 if ($nCmdLineNumber) |
186 if ($nCmdLineNumber) |
184 { |
187 { |
185 $nUnformattedNumber = $nCmdLineNumber; |
188 $nUnformattedNumber = $nCmdLineNumber; |
186 } |
189 } |
188 { |
191 { |
189 if ($sSubProject) |
192 if ($sSubProject) |
190 { |
193 { |
191 # key = <package>_<codeline>, e.g. for subproj=MCL/os/boardsupport -> key=boardsupport_MCL |
194 # key = <package>_<codeline>, e.g. for subproj=MCL/os/boardsupport -> key=boardsupport_MCL |
192 $sSubProject =~ m,^([^/]+)/[^/]+/([^/]+)$,; |
195 $sSubProject =~ m,^([^/]+)/[^/]+/([^/]+)$,; |
|
196 $sPackage = $2; |
|
197 $sPlatform = $1; |
193 $sJobNumberKey = "$2_$1"; |
198 $sJobNumberKey = "$2_$1"; |
194 } |
199 } |
195 else |
200 else |
196 { |
201 { |
197 # key = hash of the rev.0 of the package project repo |
202 # key = hash of the rev.0 of the package project repo |
224 $sSubProjArg = "-Dsf.subproject.path=$sSubProject" if ($sSubProject); |
229 $sSubProjArg = "-Dsf.subproject.path=$sSubProject" if ($sSubProject); |
225 print("cd $sJobDir\\sf-config\n"); |
230 print("cd $sJobDir\\sf-config\n"); |
226 chdir("$sJobDir\\sf-config"); |
231 chdir("$sJobDir\\sf-config"); |
227 print "###### BUILD PREPARATION ######\n"; |
232 print "###### BUILD PREPARATION ######\n"; |
228 print("hlm sf-prep -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg\n"); |
233 print("hlm sf-prep -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg\n"); |
229 system("hlm sf-prep -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg"); |
234 system("hlm sf-prep -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg >console_sfprep_$$.txt 2>&1"); |
230 |
235 |
231 print "###### EXECUTE BUILD ######\n"; |
236 print "###### EXECUTE BUILD ######\n"; |
232 print("hlm sf-build-all -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg\n"); |
237 print("hlm sf-build-all -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg\n"); |
233 system("hlm sf-build-all -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg"); |
238 system("hlm sf-build-all -Dsf.project.type=package $sSubProjArg -Dsf.spec.job.number=$nJobNumber -Dsf.spec.job.drive=$sDriveLetter: $sTestBuildOpt $sNoPublishOpt $sJobRootDirArg >console_sfbuildall_$$.txt 2>&1"); |
|
239 |
|
240 # copy console outputs to remote log archive |
|
241 if (-d "$sREMOTE_LOG_ARCHIVE\\$sPackage\\builds\\$sPlatform\\$sPackage\_$sPlatform.$nJobNumber\\logs") |
|
242 { |
|
243 my $sTgtDir = "$sREMOTE_LOG_ARCHIVE\\$sPackage\\builds\\$sPlatform\\$sPackage\_$sPlatform.$nJobNumber\\logs\\console"; |
|
244 system("mkdir $sTgtDir"); |
|
245 system("copy /Y $sBOOTSTRAP_DIR\\console_bootstrap_$$.txt $sTgtDir"); |
|
246 system("del $sBOOTSTRAP_DIR\\console_bootstrap_$$.txt"); |
|
247 system("copy $sJobDir\\sf-config\\console_sfprep_$$.txt $sTgtDir"); |
|
248 system("copy $sJobDir\\sf-config\\console_sfbuildall_$$.txt $sTgtDir"); |
|
249 } |
234 |
250 |
235 print("cd $sBOOTSTRAP_DIR\n"); |
251 print("cd $sBOOTSTRAP_DIR\n"); |
236 chdir("$sBOOTSTRAP_DIR"); |
252 chdir("$sBOOTSTRAP_DIR"); |
237 |
253 |
238 # release the drive letter |
254 # release the drive letter |
246 if (-d "$sWORKING_DRIVE\\$sJOB_BASE_DIR\\$sJobLabel") # project dir |
262 if (-d "$sWORKING_DRIVE\\$sJOB_BASE_DIR\\$sJobLabel") # project dir |
247 { |
263 { |
248 print "rmdir /S $sWORKING_DRIVE\\$sJOB_BASE_DIR\\$sJobLabel\n"; |
264 print "rmdir /S $sWORKING_DRIVE\\$sJOB_BASE_DIR\\$sJobLabel\n"; |
249 system("rmdir /S /Q $sWORKING_DRIVE\\$sJOB_BASE_DIR\\$sJobLabel"); |
265 system("rmdir /S /Q $sWORKING_DRIVE\\$sJOB_BASE_DIR\\$sJobLabel"); |
250 } |
266 } |
251 my $sBuildLabel = $sJobNumberKey; |
267 if (-d "$sWORKING_DRIVE\\fbf_job\\$sPackage\_$sPlatform.$nJobNumber") # build drive |
252 $sBuildLabel =~ s/\.T$//; |
268 { |
253 if (-d "$sWORKING_DRIVE\\fbf_job\\$sBuildLabel.$nJobNumber") # build drive |
269 print "rmdir /S $sWORKING_DRIVE\\fbf_job\\$sPackage\_$sPlatform.$nJobNumber\n"; |
254 { |
270 system("rmdir /S /Q $sWORKING_DRIVE\\fbf_job\\$sPackage\_$sPlatform.$nJobNumber"); |
255 print "rmdir /S $sWORKING_DRIVE\\fbf_job\\$sBuildLabel.$nJobNumber\n"; |
|
256 system("rmdir /S /Q $sWORKING_DRIVE\\fbf_job\\$sBuildLabel.$nJobNumber"); |
|
257 } |
271 } |
258 } |
272 } |
259 |
273 |
260 sub mkdir_unique |
274 sub mkdir_unique |
261 { |
275 { |