41 --> |
41 --> |
42 <target name="ido-create-ado-mapping"> |
42 <target name="ido-create-ado-mapping"> |
43 <mkdir dir="${build.output.dir}/build"/> |
43 <mkdir dir="${build.output.dir}/build"/> |
44 <mkdir dir="${temp.build.dir}"/> |
44 <mkdir dir="${temp.build.dir}"/> |
45 <tempfile property="prep.dynamic.sysdef.config" suffix=".txt" deleteonexit="false" destdir="${temp.build.dir}"/> |
45 <tempfile property="prep.dynamic.sysdef.config" suffix=".txt" deleteonexit="false" destdir="${temp.build.dir}"/> |
46 <hlm:referenceToFileMacro refid="system.definition.files" output="${prep.dynamic.sysdef.config}"/> |
46 <trycatch property="error.message"> |
|
47 <try> |
|
48 <hlm:referenceToFileMacro refid="system.definition.files" output="${prep.dynamic.sysdef.config}"/> |
|
49 </try> |
|
50 <catch> |
|
51 <propertyregex property="message" input="${error.message}" |
|
52 regexp=":(.*)$" |
|
53 select="\1" casesensitive="false" /> |
|
54 <fail message="Error: ${message}" /> |
|
55 </catch> |
|
56 </trycatch> |
47 <trycatch> |
57 <trycatch> |
48 <try> |
58 <try> |
49 <pathconvert pathsep="," property="ado.quality.dirs.path"> |
59 <pathconvert pathsep="," property="ado.quality.dirs.path"> |
50 <dirset refid="ado.quality.dirs"/> |
60 <dirset refid="ado.quality.dirs"/> |
51 </pathconvert> |
61 </pathconvert> |
52 </try> |
62 </try> |
53 </trycatch> |
63 </trycatch> |
54 <script language="jython" setbeans="false"> |
64 <script language="jython" setbeans="false"> |
55 import os |
65 import idoprep |
56 import ant |
66 idoprep.create_ado_mapping(project.getProperty(r"prep.dynamic.sysdef.config"), project.getProperty(r"ado.mapping.file"), project.getProperty(r"ado.quality.mapping.file"), project.getProperty(r"build.drive"), project.getProperty("ado.quality.dirs.path")) |
57 import shutil |
|
58 import fileutils |
|
59 import ido |
|
60 |
|
61 input = open(project.getProperty(r"prep.dynamic.sysdef.config"), 'r') |
|
62 output = open(project.getProperty(r"ado.mapping.file"), 'w') |
|
63 outputquality = open(project.getProperty(r"ado.quality.mapping.file"), 'w') |
|
64 components = {} |
|
65 for sysdef in input.readlines(): |
|
66 sysdef = sysdef.strip() |
|
67 if len(sysdef) > 0: |
|
68 print "Checking %s" % sysdef |
|
69 os.path.dirname(sysdef) |
|
70 location = ido.get_sysdef_location(sysdef) |
|
71 if location != None: |
|
72 sysdef = os.path.dirname(sysdef).replace('\\','/').replace(':','\\:') |
|
73 component = os.path.normpath(os.path.join(project.getProperty(r"build.drive"), os.environ['EPOCROOT'], location)).replace('\\','/').replace(':','\\:') |
|
74 print "%s=%s\n" % (sysdef, component) |
|
75 output.write("%s=%s\n" % (sysdef, component)) |
|
76 |
|
77 if project.getProperty("ado.quality.dirs.path") == None: |
|
78 outputquality.write("%s=%s\n" % (sysdef, component)) |
|
79 else: |
|
80 for dir in project.getProperty("ado.quality.dirs.path").split(','): |
|
81 if os.path.normpath(dir) == os.path.normpath(os.path.join(project.getProperty(r"build.drive"), os.environ['EPOCROOT'], location)): |
|
82 outputquality.write("%s=%s\n" % (sysdef, component)) |
|
83 outputquality.close() |
|
84 output.close() |
|
85 input.close() |
|
86 </script> |
67 </script> |
87 </target> |
68 </target> |
88 |
69 |
|
70 <!-- Target to generate cenreps using cone tool --> |
|
71 <target name="ido-gen-cenrep"> |
|
72 <for list="${sysdef.configurations.list}" delimiter="," param="sysdef.config"> |
|
73 <sequential> |
|
74 <if> |
|
75 <available file="${compile.log.dir}/${build.id}.@{sysdef.config}_compile.log"/> |
|
76 <then> |
|
77 <hlm:grepMacro filename="${compile.log.dir}/${build.id}.@{sysdef.config}_compile.log" regexp="([^\\]*.confml)$" output="confml.file.list"/> |
|
78 <for list="${confml.file.list}" delimiter="," param="confml.file"> |
|
79 <sequential> |
|
80 <var name="crml.regexp" unset="true"/> |
|
81 <propertyregex property="crml.regexp" input="@{confml.file}" regexp="([^\.]*).confml" select="\1" /> |
|
82 <hlm:conEToolMacro> |
|
83 <arg name="output" value="${post.log.dir}/${build.id}_cenrep.cone.log"/> |
|
84 <arg name="path" value="${build.drive}/epoc32/tools/" /> |
|
85 <arg name="-v" value="5" /> |
|
86 <arg name="-p" value="${build.drive}\epoc32\rom\config\assets\s60" /> |
|
87 <arg name="-o" value="${build.drive}\epoc32\release\winscw\urel\z" /> |
|
88 <arg name="-c" value="root.confml" /> |
|
89 <arg name="-i" value="${crml.regexp}" /> |
|
90 </hlm:conEToolMacro> |
|
91 <hlm:conEToolMacro> |
|
92 <arg name="output" value="${post.log.dir}/${build.id}_cenrep.cone.log"/> |
|
93 <arg name="path" value="${build.drive}/epoc32/tools/" /> |
|
94 <arg name="-v" value="5" /> |
|
95 <arg name="-p" value="${build.drive}\epoc32\rom\config\assets\s60" /> |
|
96 <arg name="-o" value="${build.drive}\epoc32\release\winscw\udeb\z" /> |
|
97 <arg name="-c" value="root.confml" /> |
|
98 <arg name="-i" value="${crml.regexp}" /> |
|
99 </hlm:conEToolMacro> |
|
100 </sequential> |
|
101 </for> |
|
102 </then> |
|
103 </if> |
|
104 </sequential> |
|
105 </for> |
|
106 <copy file="${post.log.dir}/${build.id}_cenrep.cone.log" tofile="${temp.build.dir}/${build.id}_cenrep_includefile.txt" overwrite="true"> |
|
107 <filterchain> |
|
108 <linecontainsregexp> |
|
109 <regexp pattern="^\s*Generating file"/> |
|
110 </linecontainsregexp> |
|
111 </filterchain> |
|
112 </copy> |
|
113 <hlm:metadatarecord database="${metadata.dbfile}"> |
|
114 <hlm:textmetadatainput> |
|
115 <fileset casesensitive="false" file="${post.log.dir}/${build.id}_cenrep.cone.log" /> |
|
116 <metadatafilterset> |
|
117 <metadatafilter priority="error" regex="^ERROR\s+:.*" description="cone error" /> |
|
118 <metadatafilter priority="warning" regex="^WARNING\s+:.*" description="cone warnings" /> |
|
119 <metadatafilter priority="info" regex="^INFO\s+:.*" description="cone info" /> |
|
120 </metadatafilterset> |
|
121 </hlm:textmetadatainput> |
|
122 </hlm:metadatarecord> |
|
123 <hlm:metadataCountSeverity severity="ERROR" log="${build.id}_cenrep.cone.log" db="${metadata.dbfile}" property="cone.error.total"/> |
|
124 <echo>ConE error: ${cone.error.total}</echo> |
|
125 <hlm:generateBuildStatus file="${build.id}_cenrep.cone.log" /> |
|
126 </target> |
89 |
127 |
90 <!-- Target that uses the information from the system.definition.files to prepare the IDO build area. |
128 <!-- Target that uses the information from the system.definition.files to prepare the IDO build area. |
91 It relies on the fact that layer_real_source_path entity is declared in each ADO configuration. |
129 It relies on the fact that layer_real_source_path entity is declared in each ADO configuration. |
92 |
130 |
93 By default it deletes the previous content. If you want to backup what was previoulsy used please |
131 By default it deletes the previous content. If you want to backup what was previoulsy used please |
312 |
347 |
313 <!-- Checks the contents from GRACE release. Mainly used by IDOs. But could be |
348 <!-- Checks the contents from GRACE release. Mainly used by IDOs. But could be |
314 extended to product builds.--> |
349 extended to product builds.--> |
315 <target name="ido-check-latest-release-grace" unless="use.dragonfly"> |
350 <target name="ido-check-latest-release-grace" unless="use.dragonfly"> |
316 <script language="jython" setbeans="false"> |
351 <script language="jython" setbeans="false"> |
317 import re |
|
318 import os |
352 import os |
319 import symrec |
353 import idoprep |
320 import logging |
354 |
321 import traceback |
355 result = idoprep.get_s60_env_details(project.getProperty('s60.grace.server'), project.getProperty('s60.grace.service'), project.getProperty('s60.grace.product'), project.getProperty('s60.grace.release'), project.getProperty('s60.grace.revision'), project.getProperty('s60.grace.cache'), project.getProperty('s60.grace.checkmd5'), project.getProperty('s60.grace.usetickler')) |
322 import ant |
|
323 |
|
324 if not project.getProperty('s60.grace.server'): |
|
325 raise Exception("Property 's60.grace.server' is not defined.") |
|
326 if not project.getProperty('s60.grace.service'): |
|
327 raise Exception("Property 's60.grace.service' is not defined.") |
|
328 if not project.getProperty('s60.grace.product'): |
|
329 raise Exception("Property 's60.grace.product' is not defined.") |
|
330 if not project.getProperty('s60.grace.release'): |
|
331 raise Exception("Property 's60.grace.release' is not defined.") |
|
332 grace = project.getProperty('s60.grace.server') |
|
333 service = project.getProperty('s60.grace.service') |
|
334 product = project.getProperty('s60.grace.product') |
|
335 release = project.getProperty('s60.grace.release') |
|
336 revision = r'(_\d{3})?' |
|
337 if project.getProperty('s60.grace.revision') != None: |
|
338 revision = project.getProperty('s60.grace.revision') |
|
339 |
|
340 # Get the cache filename. |
|
341 cachefilename = project.getProperty('s60.grace.cache') |
|
342 if cachefilename: |
|
343 self.log(str("Using cache file: %s" % cachefilename)) |
|
344 |
|
345 checkmd5 = False |
|
346 if project.getProperty('s60.grace.checkmd5') != None: |
|
347 checkmd5 = str(project.getProperty('s60.grace.checkmd5')).lower() |
|
348 checkmd5 = ((checkmd5 == "true") or (checkmd5 == "1") or (checkmd5 == "on")) |
|
349 |
|
350 branch = os.path.join(grace, service, product) |
|
351 if not os.path.exists(branch): |
|
352 raise Exception("Error occurred: Could not find directory %s" % branch) |
|
353 |
|
354 result = [] |
|
355 for rel in os.listdir(branch): |
|
356 relpath = os.path.join(branch, rel) |
|
357 self.log("Checking: %s" % str(relpath)) |
|
358 res = re.match(r"%s%s$" % (release, revision), rel, re.I) |
|
359 if res != None: |
|
360 self.log("Found: %s" % str(relpath)) |
|
361 result.append(relpath) |
|
362 result.sort(reverse=True) |
|
363 use_tickler = False |
|
364 tickler_validation = str(project.getProperty('s60.grace.usetickler')).lower() |
|
365 if tickler_validation != None: |
|
366 use_tickler = ((tickler_validation == "true") or (tickler_validation == "1")) |
|
367 validresults = [] |
|
368 for rel in result: |
|
369 try: |
|
370 metadata_filename = symrec.find_latest_metadata(str(rel)) |
|
371 if metadata_filename is not None and os.path.exists(metadata_filename): |
|
372 self.log(str("Validating: %s" % metadata_filename)) |
|
373 if (use_tickler): |
|
374 validator = symrec.ValidateTicklerReleaseMetadata(metadata_filename, cachefilename) |
|
375 else: |
|
376 validator = symrec.ValidateReleaseMetadataCached(metadata_filename, cachefilename) |
|
377 if validator.is_valid(checkmd5): |
|
378 self.log(str("%s is valid." % rel)) |
|
379 validresults.append(rel) |
|
380 break |
|
381 else: |
|
382 self.log(str("%s is not a valid release." % rel)) |
|
383 elif metadata_filename is None: |
|
384 self.log(str("Could not find the release metadata file under %s" % rel)) |
|
385 except Exception, e: |
|
386 self.log(str("WARNING: %s: %s" % (rel , e))) |
|
387 self.log(str("%s is not a valid release." % rel)) |
|
388 traceback.print_exc() |
|
389 |
|
390 result = validresults |
|
391 if len(result) == 0: |
|
392 raise Exception("Error finding GRACE release.") |
|
393 print result[0] |
|
394 resultname = os.path.basename(result[0]) |
356 resultname = os.path.basename(result[0]) |
395 vfile = os.path.join(project.getProperty('build.drive') + os.sep, 's60_version.txt') |
357 project.setProperty('s60.getenv.path', str(result[0])) |
396 if (os.path.exists(vfile)): |
358 project.setProperty('s60.getenv.release', str(resultname)) |
397 self.log("Are we still up-to-date compare to %s" % str(vfile)) |
359 version = idoprep.get_version(project.getProperty('build.drive'), resultname) |
398 f = open(str(vfile), 'r') |
360 if version is None or version.strip() != resultname: |
399 version = f.readline() |
|
400 self.log(str("'%s' == '%s'" % (version, resultname))) |
|
401 project.setProperty('s60.getenv.path', str(result[0])) |
|
402 project.setProperty('s60.getenv.release', str(resultname)) |
|
403 if version.strip() != resultname: |
|
404 project.setProperty('s60.getenv.update', "1") |
|
405 f.close() |
|
406 else: |
|
407 self.log("Version file not found getting new environment...") |
|
408 project.setProperty('s60.getenv.path', str(result[0])) |
|
409 project.setProperty('s60.getenv.release', str(resultname)) |
|
410 project.setProperty('s60.getenv.update', "1") |
361 project.setProperty('s60.getenv.update', "1") |
411 </script> |
362 </script> |
412 </target> |
363 </target> |
413 |
364 |
414 <!-- Updates the build area from either GRACE / dragonfly server.--> |
365 <!-- Updates the build area from either GRACE / dragonfly server.--> |
506 try { |
454 try { |
507 java.io.FileInputStream pin = new java.io.FileInputStream(attributes.get("ini")); |
455 java.io.FileInputStream pin = new java.io.FileInputStream(attributes.get("ini")); |
508 java.util.Properties props = new java.util.Properties(); |
456 java.util.Properties props = new java.util.Properties(); |
509 props.load(pin); |
457 props.load(pin); |
510 org.apache.tools.ant.types.Path path = project.createDataType("path"); |
458 org.apache.tools.ant.types.Path path = project.createDataType("path"); |
511 for (java.util.Iterator i = props.stringPropertyNames().iterator(); i.hasNext() ; ) { |
459 for (java.util.Iterator i = props.stringPropertyNames().iterator(); i.hasNext() ; ) { |
512 org.apache.tools.ant.types.Path.PathElement pe = (org.apache.tools.ant.types.Path.PathElement)path.createPathElement(); |
460 org.apache.tools.ant.types.Path.PathElement pe = (org.apache.tools.ant.types.Path.PathElement)path.createPathElement(); |
513 pe.setPath(i.next()); |
461 pe.setPath(i.next()); |
514 } |
462 } |
515 self.log("Creating reference: " + attributes.get("pathid")); |
463 self.log("Creating reference: " + attributes.get("pathid")); |
516 project.addReference(attributes.get("pathid"), path); |
464 project.addReference(attributes.get("pathid"), path); |
517 } catch (Exception e) { |
465 } catch (Exception e) { |
518 throw new org.apache.tools.ant.BuildException(e); |
466 throw new org.apache.tools.ant.BuildException(e); |