buildframework/helium/tools/preparation/ido-prep.ant.xml
changeset 179 d8ac696cc51f
parent 1 be27ed110b50
child 217 0f5e3a7fb6af
equal deleted inserted replaced
1:be27ed110b50 179:d8ac696cc51f
    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
   173 
   211 
   174     <!--
   212     <!--
   175       Internal target that set an intermediate property to disable codescanner execution.
   213       Internal target that set an intermediate property to disable codescanner execution.
   176     -->
   214     -->
   177     <target name="ido-codescanner-skip">
   215     <target name="ido-codescanner-skip">
   178         <if>
   216         <condition property="do.skip.codescanner" value="1">
   179             <istrue value="${skip.codescanner}"/>
   217             <istrue value="${skip.codescanner}"/>
   180             <then>
   218         </condition>
   181                 <property name="do.skip.codescanner" value="1"/>
       
   182             </then>
       
   183         </if>
       
   184     </target>
   219     </target>
   185 
   220 
   186     <!--
   221     <!--
   187         This targets run the codescanner application on each discovered ADO.
   222         This targets run the codescanner application on each discovered ADO.
   188         The location of the output is defined byt '''ido.codescanner.output.dir''' property.
   223         The location of the output is defined byt '''ido.codescanner.output.dir''' property.
   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.-->
   416         <runtarget target="ido-update-build-area-dragonfly"/>
   367         <runtarget target="ido-update-build-area-dragonfly"/>
   417     </target>
   368     </target>
   418 
   369 
   419     <!-- Creates the build area by getting the contents from GRACE release.-->    
   370     <!-- Creates the build area by getting the contents from GRACE release.-->    
   420     <target name="ido-update-build-area-grace" if="s60.getenv.update" depends="ido-check-latest-release" unless="use.dragonfly">
   371     <target name="ido-update-build-area-grace" if="s60.getenv.update" depends="ido-check-latest-release" unless="use.dragonfly">
   421         <!-- We must update the build area so let's get rid of the old one. -->
       
   422         <hlm:unsubst drive="${build.drive}" failonerror="false"/>
       
   423         
       
   424         <!-- Just get S60 for IDOs -->
   372         <!-- Just get S60 for IDOs -->
   425         <echo>Location of the new S60 release:${s60.getenv.path}</echo>
   373         <echo>Location of the new S60 release:${s60.getenv.path}</echo>
   426         <tstamp>
   374         <tstamp>
   427             <format property="getenv.tstamp" pattern="yyyyMMddHHmmss"/>
   375             <format property="getenv.tstamp" pattern="yyyyMMddHHmmss"/>
   428         </tstamp>
   376         </tstamp>
   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);