buildframework/helium/tools/common/default_config.ant.xml
changeset 628 7c4a911dc066
child 645 b8d81fa19e7d
equal deleted inserted replaced
588:c7c26511138f 628:7c4a911dc066
       
     1 <?xml version="1.0" encoding="UTF-8"?>
       
     2 <!-- 
       
     3 ============================================================================ 
       
     4 Name        : default_config.ant.xml 
       
     5 Part of     : Helium 
       
     6 
       
     7 Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     8 All rights reserved.
       
     9 This component and the accompanying materials are made available
       
    10 under the terms of the License "Eclipse Public License v1.0"
       
    11 which accompanies this distribution, and is available
       
    12 at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
    13 
       
    14 Initial Contributors:
       
    15 Nokia Corporation - initial contribution.
       
    16 
       
    17 Contributors:
       
    18 
       
    19 Description:
       
    20 
       
    21 ============================================================================
       
    22 -->
       
    23 <project name="default_config" xmlns:hlm="http://www.nokia.com/helium">
       
    24     <description>
       
    25     Default Helium configuration.
       
    26     </description>
       
    27     
       
    28     <!-- The path where Helium-specific outputs are written to.
       
    29     @type string
       
    30     @scope private
       
    31     -->
       
    32     <property name="helium.build.dir" location="${helium.dir}/build"/>
       
    33    
       
    34     <!-- Location of generated logging config.
       
    35     @type string
       
    36     @scope private
       
    37     -->
       
    38     <property name="logging.output.file" location="${cache.dir}/logging.${env.PID}.conf" />
       
    39     <fmpp sourceFile="${helium.dir}/config/logging.conf.ftl" outputFile="${logging.output.file}" quiet="true">
       
    40         <data expandProperties="yes">
       
    41             ant: antProperties()
       
    42         </data>
       
    43     </fmpp>
       
    44      
       
    45     <!-- Properties
       
    46     ======================================================================-->
       
    47     <!-- Used to specify which team configuration is being used. These configuration files are under /mc/mc_build/teams.
       
    48     @type string
       
    49     -->
       
    50     <property name="team" value="${env.TEAM}"/>
       
    51 
       
    52     <!-- See if 'bn' is defined as a shortcut for build.number. -->
       
    53     <if>
       
    54         <isset property="bn"/>
       
    55         <then>
       
    56             <!-- Build number
       
    57             @type integer
       
    58             @scope public
       
    59             -->
       
    60             <property name="build.number" value="${bn}"/>
       
    61         </then>
       
    62     </if>
       
    63     
       
    64     <!-- If build.drive not define then search the next free drive -->
       
    65     <if>
       
    66         <and>
       
    67             <not>
       
    68                 <isset property="build.drive"/>
       
    69             </not>    
       
    70             <os family="windows"/>
       
    71         </and>
       
    72         <then>
       
    73             <!-- used to track if build.drive has predefined or not
       
    74             @type flag
       
    75             @scope private
       
    76             -->
       
    77             <property name="build.drive.notdefined" value="true"/> 
       
    78             <exec osfamily="windows" executable="python" failonerror="true" outputproperty="build.drive">
       
    79                 <arg line="-m searchnextdrive"/>               
       
    80             </exec>
       
    81             <if>
       
    82                 <equals arg1="${build.drive}" arg2="Error: No free drive!"/>
       
    83                 <then>            
       
    84                     <fail message="ERROR: Failed to assign build drive, please check you are not running out of drives." />    
       
    85                 </then>
       
    86             </if>
       
    87             <mkdir dir="${env.TEMP}/helium/temp_drive"/>
       
    88             <exec osfamily="windows" executable="subst" failonerror="false">
       
    89                 <arg value="${build.drive}" />
       
    90                 <arg value="${env.TEMP}/helium/temp_drive" />
       
    91             </exec>
       
    92             <script language="jython" setbeans="false">
       
    93                 <![CDATA[
       
    94 import os
       
    95 import java.lang.Runtime
       
    96 import java.lang.Thread
       
    97 class UnsubstListener(java.lang.Thread):
       
    98     def run(self):
       
    99         java.lang.Runtime.getRuntime().exec("subst /d " + project.getProperty("build.drive"))
       
   100 if os.sep == '\\':
       
   101     java.lang.Runtime.getRuntime().addShutdownHook(UnsubstListener())
       
   102               ]]>
       
   103             </script>
       
   104             <echo> Using build drive ${build.drive} </echo>
       
   105         </then>
       
   106     </if>
       
   107     
       
   108     <!-- For unix os prep.build.dir is equivalent to build.drive -->
       
   109     <condition property="prep.build.dir" value="${build.drive}">
       
   110         <and>
       
   111             <isset property="build.drive"/>
       
   112             <os family="unix"/>
       
   113         </and>
       
   114     </condition>
       
   115     
       
   116     <!--* @property core.build.version
       
   117     This Defaults to the ${major.version}.${minor.version} combo and is available so that 1 number can be used (dot can be removed)
       
   118     @type string
       
   119     @scope private
       
   120     -->
       
   121     
       
   122     <!-- Set core build version depending the value set for ${major.version}.${minor.version} -->
       
   123     <condition property="core.build.version" value="${major.version}.${minor.version}" else="${env.USERNAME}">
       
   124         <and>
       
   125             <isset property="major.version"/>
       
   126             <isset property="minor.version"/>
       
   127         </and>
       
   128     </condition>
       
   129     
       
   130     <!--* @property read.build.int
       
   131     If defined, indicates that the build number should be read from an incrementing text file.
       
   132     @type string
       
   133     @scope public
       
   134     -->
       
   135     <!--* @property build.tag
       
   136     If defined, defines the prefix for the build number when it is read from an incrementing text file.
       
   137     @type string
       
   138     @scope public
       
   139     -->
       
   140     <if>
       
   141         <and>
       
   142             <isset property="read.build.int"/>
       
   143             <not>
       
   144                 <isset property="build.number"/>
       
   145             </not>
       
   146         </and>
       
   147         <then>
       
   148             <if>
       
   149                 <isset property="build.tag"/>
       
   150                 <then>
       
   151                     <property name="build.tag.ext" value="${build.tag}."/>
       
   152                 </then>
       
   153                 <else>
       
   154                     <property name="build.tag.ext" value=""/>
       
   155                     <property name="build.tag" value=""/>
       
   156                 </else>
       
   157             </if>
       
   158             <!-- Use an internal directory to store text files for assigning build number information. -->
       
   159             <!-- The directory where the build integer database text files are stored.
       
   160             @type string
       
   161             @scope private
       
   162             -->
       
   163             <property name="build.int.db.dir" location="${publish.root.dir}/internal/build_int_db"/>
       
   164             <mkdir dir="${build.int.db.dir}"/>
       
   165             <property name="build.int.db.file" value="${build.int.db.dir}/${build.name}_${core.build.version}_${build.tag}_build_int_db.txt"/>
       
   166             <if>
       
   167                 <available file="${build.int.db.file}"/>
       
   168                 <then>
       
   169                     <echo>Reading from existing build number property file.</echo>
       
   170                     <property file="${build.int.db.file}"/>
       
   171                     <echo>Build int = ${build.int}</echo>
       
   172                     <!-- Read the comments in the file too, for history information. -->
       
   173                     <loadfile property="build.int.db.file.comments" srcFile="${build.int.db.file}">
       
   174                         <filterchain>
       
   175                             <linecontains>
       
   176                                 <contains value="# history: "/>
       
   177                             </linecontains>
       
   178                         </filterchain>
       
   179                     </loadfile>
       
   180                     <!-- Set the property in case nothing was found. -->
       
   181                     <property name="build.int.db.file.comments" value=""/>
       
   182                     <echo>History comments:
       
   183 ${build.int.db.file.comments}</echo>
       
   184                     <!-- Build number
       
   185                     @type integer
       
   186                     @scope public
       
   187                     -->
       
   188                     <property name="build.number" value="${build.tag.ext}${build.int}"/>
       
   189                     <echo>Writing incremented build int back to file.</echo>
       
   190                     <propertyfile file="${build.int.db.file}" comment="build.int database file">
       
   191                         <entry key="build.int" type="int" default="001" operation="+" pattern="000"/>
       
   192                     </propertyfile>
       
   193                     <tstamp>
       
   194                         <format property="build.int.db.file.tstamp" pattern="dd/MM/yyyy-HH:mm:ss"/>
       
   195                     </tstamp>
       
   196                     <concat destfile="${build.int.db.file}" append="true">
       
   197 ${build.int.db.file.comments}
       
   198 # history: ${env.COMPUTERNAME};${env.USERNAME};${build.int.db.file.tstamp};${build.int}
       
   199                     </concat>
       
   200                 </then>
       
   201                 <else>
       
   202                     <echo>Build number property file not found. Creating a new one.</echo>
       
   203                     <property name="new.build.int" value="001"/>
       
   204                     <!-- Build number
       
   205                     @type integer
       
   206                     @scope public
       
   207                     -->
       
   208                     <property name="build.number" value="${build.tag.ext}${new.build.int}"/>
       
   209                     <echo>Build number = ${build.number}</echo>
       
   210                     <propertyfile file="${build.int.db.file}" comment="build.int database file">
       
   211                         <entry key="build.int" type="int" default="001" operation="+" pattern="000"/>
       
   212                     </propertyfile>
       
   213                 </else>
       
   214             </if>
       
   215         </then>
       
   216     </if>
       
   217 
       
   218 
       
   219     <!-- Define a number of properties that should be consistent amongst all builds. They can be overridden
       
   220     within any config or team Ant file though. -->
       
   221     <!-- A general label for this type of build. Currently if not defined, product.name will be used to set this property, but this will likely be removed in future.
       
   222     @type string
       
   223     @editable required
       
   224     -->
       
   225     <property name="build.name" value="helium"/>
       
   226     
       
   227     <!--* @property build.version
       
   228     Version of the build.
       
   229     @type string
       
   230     @scope private
       
   231     -->
       
   232     <!-- Set build version depending the value set to core.build.version and build.number -->
       
   233     <condition property="build.version" value="${core.build.version}.${build.number}" else="${env.USERNAME}">
       
   234         <and>
       
   235             <isset property="core.build.version"/>
       
   236             <isset property="build.number"/>
       
   237         </and>
       
   238     </condition>
       
   239     
       
   240     
       
   241     <!-- A unique ID for the build.
       
   242     @type string
       
   243     @scope private
       
   244     -->
       
   245     <property name="build.id" value="${build.name}_${build.version}"/>
       
   246     <!-- The general type of the build. This is used for checking the tools environment. Potential values include core, ido, product.
       
   247     @type string
       
   248     -->
       
   249     <property name="build.type" value="core"/>
       
   250     <condition property="epocroot" value="${env.EPOCROOT}" else="${env.EPOCROOT}/">
       
   251         <matches pattern="^.*[\\/]$" string="${env.EPOCROOT}" />
       
   252     </condition>
       
   253     <!-- The data model XML file for the Ant configuration.
       
   254     @type string
       
   255     @scope private
       
   256     -->
       
   257     <property name="data.model.file" location="${helium.dir}/config/helium_data_model.xml"/>
       
   258     <!-- The data model XML file for the Ant configuration parsed.
       
   259     @type string
       
   260     @scope private
       
   261     -->
       
   262     <property name="data.model.parsed" location="${helium.build.dir}/datamodel.out"/>
       
   263     <condition property="data.model.xsl" value="${helium.dir}/extensions/nokia/config/helium_nokia_data_model.xsl" else="${helium.dir}/config/helium_data_model.xsl">
       
   264         <available file="${helium.dir}/extensions/nokia/config/helium_nokia_data_model.xsl"/>
       
   265     </condition>
       
   266     <!-- Location of helium database
       
   267     @type string
       
   268     @scope private
       
   269     -->
       
   270     <property name="database.file" location="${basedir}/build/database.xml"/>
       
   271     <!-- Directory where CCM operations will be performed.
       
   272     @type string
       
   273     -->
       
   274     <property name="ccm.base.dir" location="${ccm.home.dir}\${minor.version}"/>
       
   275     <!-- This is the directory where the build area is prepared. Once created it is substed to the build.drive.
       
   276     @type string
       
   277     @scope private
       
   278     -->
       
   279     <property name="prep.build.dir" location="${prep.root.dir}/${build.id}"/>
       
   280     <!-- This is the directory where build output is placed.
       
   281     @type string
       
   282     @scope private
       
   283     -->
       
   284     
       
   285     <!-- If build.drive not define then prep.buil.dir is the value for build.drive for unix os -->
       
   286     <condition property="build.drive" value="${prep.build.dir}">
       
   287         <and>
       
   288             <not>
       
   289                 <isset property="build.drive"/>
       
   290             </not>    
       
   291             <os family="unix"/>
       
   292         </and>
       
   293     </condition>
       
   294     
       
   295     <property name="build.output.dir" location="${build.drive}/output"/>
       
   296     <!-- This is where the diamonds output XML files are stored.
       
   297     @type string
       
   298     @scope private
       
   299     -->
       
   300     <property name="diamonds.build.output.dir" location="${build.output.dir}/diamonds"/>
       
   301     <!-- This is the directory where sisfiles are placed.
       
   302     @type string
       
   303     @scope private
       
   304     -->
       
   305     <property name="build.sisfiles.dir" location="${build.output.dir}/sisfiles"/>
       
   306     <!-- This is the directory where build area is archived after the build has finished.
       
   307     @type string
       
   308     @scope private
       
   309     -->
       
   310     <property name="zips.build.dir" location="${build.output.dir}/build_area/engineering_english"/>
       
   311     <!-- This is the directory where build area is archived after the localisation.
       
   312     @type string
       
   313     @scope private
       
   314     -->
       
   315     <property name="zips.loc.dir" location="${build.output.dir}/build_area/localised"/>
       
   316     <!-- The directory where subcon zips are stored.
       
   317     @type string
       
   318     @scope private
       
   319     -->
       
   320     <property name="subcon.zips.dir" location="${build.output.dir}/build_area/subcon"/>
       
   321     <!-- This is the directory where flash files are archived.
       
   322     @type string
       
   323     @scope private
       
   324     -->
       
   325     <property name="zips.flashfiles.dir" location="${build.output.dir}/zips_flashfiles"/>
       
   326     <!-- This is where the build logs are stored.
       
   327     @type string
       
   328     @scope private
       
   329     -->
       
   330     <property name="build.log.dir" location="${build.output.dir}/logs"/>
       
   331     <!-- This is where the signal related files are stored.
       
   332     @type string
       
   333     @scope private
       
   334     -->
       
   335     <property name="build.signal.status.dir" location="${build.log.dir}/signals"/>
       
   336     <!-- This is the email template path where it updates the build status based on metadata database contents. The default file could (email_status_orm.html.ftl under tools\common\template\log)be used as the base and any additional info could be added
       
   337     @type string
       
   338     -->
       
   339     <property name="build.status.email.template" location="${helium.dir}/tools/common/templates/log/email_status_orm.html.ftl" />
       
   340     <!-- Location of build metadata database.
       
   341     @type string
       
   342     @scope private
       
   343     -->
       
   344     <condition property="metadata.dbfile" value="${build.log.dir}/${build.id}_metadata_db" else="${build.log.dir}/${build.id}${env.PID}_metadata_db">
       
   345         <isset property="build.number"/>
       
   346     </condition>
       
   347     
       
   348     <!-- Directory to store temporary files generated during the process.
       
   349     @type string
       
   350     @scope private
       
   351     -->
       
   352     <property name="temp.build.dir" location="${build.output.dir}/temp_build_files"/>
       
   353     <!-- The 'failonerror' attribute for exec tasks.
       
   354     @type boolean
       
   355     @scope public
       
   356     -->
       
   357     <property name="failonerror" value="false"/>
       
   358     <!-- Maximum allowable errors in a build.
       
   359     @type number
       
   360     -->
       
   361     <property name="build.errors.limit" value="0"/>
       
   362     <!-- Unsubsted drive after build finished. If not defined then helium should left the drive as subst. Set the value as "yes" if you want to unsubst after build finished.
       
   363     @type string
       
   364     -->
       
   365     <property name="unsubst.after.build" value="no"/>
       
   366     <!-- display warnings at build startup if required properties are not defined.
       
   367     @type string
       
   368     @scope private
       
   369     -->
       
   370     <property name="validate.properties.at.startup" value="yes"/>
       
   371     <!-- A unique name for the WA Sources ZIP file.
       
   372     @type string
       
   373     @scope private
       
   374     -->
       
   375     <property name="zip.wa.file" value="${build.drive}/output/src/${build.id}_sources.zip"/>
       
   376     <!-- The location and name of the target times log file. Default value is: ${build.log.dir}/${build.id}_targetTimesLog.csv
       
   377     @type string
       
   378     -->
       
   379     <property name="target.times.log.file" value="${build.log.dir}/${build.id}_targetTimesLog.csv"/>
       
   380 
       
   381     <!-- Cache related properties. -->
       
   382     <!-- Directory where Helium can store files on a temporary basis for a user per build.
       
   383     @type string
       
   384     @scope private
       
   385     -->
       
   386     <property name="build.cache.dir" location="${cache.dir}/${build.id}"/>
       
   387     <!-- Directory where Helium can store log files on a temporary basis for a user per build.
       
   388     @type string
       
   389     @scope private
       
   390     -->
       
   391     <property name="build.cache.log.dir" location="${build.cache.dir}/logs"/>
       
   392     <mkdir dir="${build.cache.log.dir}"/>
       
   393     
       
   394     <!-- Path location for the memory tracing data captured by the TracingLogger.
       
   395     @type string
       
   396     @scope private
       
   397     -->
       
   398     <property name="tracing.csv.file" location="${build.cache.dir}/logs/${build.id}_traces.csv"/>
       
   399     
       
   400     <!-- Publish dir configuration. Defines subdir first and next toplevel properties. -->
       
   401     <!-- Subdir part of the publish dir, relative to publish.root.dir
       
   402     @type string
       
   403     -->
       
   404     <property name="publish.subdir" value="${build.name}/builds/${core.build.version}/${build.id}"/>
       
   405     <!-- Subdir part of the publish release dir, relative to publish.root.dir
       
   406     @type string
       
   407     @scope private
       
   408     -->
       
   409     <property name="publish.release.subdir" value="${build.name}/releases/${core.build.version}/${build.id}"/>
       
   410     <!-- Directory where the build is published (includes build.id)
       
   411     @type string
       
   412     -->
       
   413     <property name="publish.dir" location="${publish.root.dir}/${publish.subdir}"/>
       
   414     <!-- The directory where the release of this build is published to on the local network.
       
   415     @type string
       
   416     @scope private
       
   417     -->
       
   418     <property name="publish.release.dir" location="${publish.root.dir}/${publish.release.subdir}"/>
       
   419     <condition property="is.published" else="false">
       
   420         <or>
       
   421             <istrue value="${publish.enabled}"/>
       
   422             <isset property="publish"/>
       
   423         </or>
       
   424     </condition>
       
   425     
       
   426     <!-- The directory where flash images of build can be found
       
   427     @type string
       
   428     @scope private
       
   429     -->
       
   430     <property name="release.images.dir" value="${build.output.dir}/release_flash_images"/>
       
   431     <!-- Defines location of binaries created in build. Used in check-capability target while generating capability scan report.
       
   432     @type string
       
   433     @scope private
       
   434     -->
       
   435     <property name="binary.root" value="${build.drive}/epoc32/release/armv5/urel" />
       
   436     <!-- Location of python library
       
   437     @type string
       
   438     @scope private
       
   439     -->
       
   440     <property name="python.dir" value="${helium.dir}/external/python/lib"/>
       
   441     <!-- @type string
       
   442     @scope private
       
   443     -->
       
   444     <property name="python.tools" value="${helium.dir}/external/python/bin"/>
       
   445 
       
   446     <!-- EBS is selected as the default build system, but ec for Electric Cloud could be used. -->
       
   447     <!-- This specifies which build system is used. Default for this is ebs You can use ec for Electric Cloud..
       
   448     @type string
       
   449     -->
       
   450     <property name="build.system" value="ebs"/>
       
   451     <!-- Path for the output XML file generated by genxml used as input to EBS or EC.
       
   452     @type string
       
   453     @scope private
       
   454     -->
       
   455     <property name="genxml.output.file" location="${temp.build.dir}/${build.id}.${sysdef.configuration}.xml" />
       
   456     <!-- The path of the generated canonical System Definition file that contains all the input System Definition file content.
       
   457     @type string
       
   458     @scope private
       
   459     -->
       
   460     <property name="canonical.sysdef.file" value="${build.output.dir}/build/canonical_system_definition.xml"/>
       
   461     <!-- @type string
       
   462     @scope private
       
   463     -->
       
   464     <property name="build.system.${build.system}" value="Not used"/>
       
   465     <!-- This is the file where build summary is stored.
       
   466     @type string
       
   467     @scope private
       
   468     -->
       
   469     <property name="build.summary.file" location="${build.log.dir}/summary/${build.id}_summary.log.xml"/>
       
   470     <property name="error.summary.file" location="${build.log.dir}/summary/${build.id}_error_summary.log.xml"/>
       
   471     <!-- Defines name of the log file.
       
   472     @type string
       
   473     @scope private
       
   474     -->
       
   475     <property name="build.log" value="${build.log.dir}/${build.id}_main.ant.log"/>
       
   476 
       
   477     <!-- Path where ant XML files dynamically downloaded from jar file.
       
   478     @type string
       
   479     @scope private
       
   480     -->
       
   481     <property name="antlib.import.module.path" location="${helium.dir}/tools/hlm-antlib-imports"/>
       
   482     
       
   483     <!-- Following are temporarily defined here until global tools available-->
       
   484     <!-- This specifies the directory where Electric Cloud history files are stored. Currently defined in helium.ant.xml and mapped related to publish.root.dir
       
   485     @type string
       
   486     @scope private
       
   487     -->
       
   488     <property name="ec.history.dir" location="${publish.root.dir}\${product.family}\ec_history"/>
       
   489     <!-- Version of build
       
   490     @type string
       
   491     -->
       
   492     <property name="release.label" value="${build.version}"/>
       
   493     <!-- mode is either serial / parallel - default is parallel
       
   494     @type string
       
   495     -->
       
   496     <property name="ec.mode" value="parallel" />
       
   497     <!-- Setting this to "1" will force xml2mak to generate only warnings (instead of errors) for duplicate components in the component list
       
   498     @type string
       
   499     @scope private
       
   500     -->
       
   501     <property name="ec.allow.duplicates" value="0" />
       
   502     <!-- Defines log file where to record archiving of engineering english area.
       
   503     @type string
       
   504     @scope private
       
   505     -->
       
   506     <property name="zip.ee.log.file" location="${build.log.dir}/${build.id}_ee_zip.log" />
       
   507     <!-- The path to the localization zipping log file.
       
   508     @type string
       
   509     @scope private
       
   510     -->
       
   511     <property name="zip.localised.log.file" location="${build.log.dir}/${build.id}_localised_zip.log" />
       
   512     <!-- Defines log file where to record archiving of subcon environment.
       
   513     @type string
       
   514     @scope private
       
   515     -->
       
   516     <property name="zip.subcon.log.file" value="${build.log.dir}/${build.id}_subcon_zip.log" />
       
   517     <!-- The log file name for zipping subcon_roms.
       
   518     @type string
       
   519     @scope private
       
   520     -->
       
   521     <property name="zip.subcon_roms.log.file" location="${build.log.dir}/${build.id}_subcon_roms_zip.log" />
       
   522     <!-- The log file name for zipping trace_roms.
       
   523     @type string
       
   524     @scope private
       
   525     -->
       
   526     <property name="zip.trace_roms.log.file" location="${build.log.dir}/${build.id}_trace_roms_zip.log" />
       
   527     <!-- target to be executed in case of exceptions (mainly to generate the summary and raise signal).
       
   528     @type string
       
   529     @scope private
       
   530     -->
       
   531     <property name="exceptions.target" value="hlm-exception-handler"/>
       
   532     <!-- The tools dependencies Ivy settings configuration file.
       
   533     @type string
       
   534     -->
       
   535     <property name="tools.ivy.config.file" location="${helium.dir}/config/ivy/tools_ivy_settings.xml" />
       
   536     
       
   537     <!-- A file where persistent properties for a build should be stored.
       
   538     @type string
       
   539     @scope private
       
   540     -->
       
   541     <property name="build.property.cache.file" location="${diamonds.build.output.dir}/build_properties_cache.txt" />
       
   542     
       
   543     <!-- Level of ant logging.
       
   544     @type string
       
   545     -->
       
   546     <property name="ant.loglevel" value="verbose"/>
       
   547     
       
   548     <!-- Default number of threads is 2 * NUMBER_OF_PROCESSORS, but this can be overridden by defining the
       
   549     property manually. -->
       
   550     <if>
       
   551         <not>
       
   552             <isset property="number.of.threads"/>
       
   553         </not>
       
   554         <then>
       
   555             <if>
       
   556                 <isset property="env.NUMBER_OF_PROCESSORS"/>
       
   557                 <then>
       
   558                     <math result="number.of.threads" operand1="${env.NUMBER_OF_PROCESSORS}" operation="*" operand2="2" datatype="int"/>
       
   559                 </then>
       
   560                 <else>
       
   561                     <!-- how many parallel threads can run
       
   562                     @type string
       
   563                     @scope public
       
   564                     -->
       
   565                     <property name="number.of.threads" value="2"/>
       
   566                 </else>
       
   567             </if>
       
   568         </then>
       
   569     </if>
       
   570     
       
   571     <!--* @property product.family
       
   572     In product builds defines the product family that the build product belong to.
       
   573     @type string
       
   574     @editable required
       
   575     @scope public
       
   576     -->
       
   577     
       
   578     <!--* @property product.list
       
   579     In product builds defines the list of products that are build in the configuration. Property is used in rom image creation, localisation release notes creation and data packaging.
       
   580     @type string
       
   581     @editable required
       
   582     @scope public
       
   583     -->
       
   584      
       
   585     <!--* @property diamonds.build.tags
       
   586     
       
   587     @type string
       
   588     @editable optional
       
   589     @scope public
       
   590     -->
       
   591 
       
   592 </project>
       
   593 
       
   594