doc/api/python/imaker.api-pysrc.html
author Simon Howkins <simonh@symbian.org>
Thu, 10 Dec 2009 12:01:59 +0000
changeset 825 1de547e13d13
parent 432 f2ddfa555b0f
permissions -rw-r--r--
Updates to make the build environment check more reasonable: Mercurial v1.3 permitted The Java compiler is not a showstopping issue 7-zip can be installed in any location Update to Helium 5 Helium can be installed in PDT 1.*, not necessarily 1.0 Raptor installation path not significant Update to Raptor 2.9.* The Raptor patch to update the bundled version of python is no longer relevant BRAG calculations updated to ignore items not being in the system path, as this just doesn't matter. Overall effect is that the build environment check should pass on a machine that is able to do a build!

<?xml version="1.0" encoding="ascii"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>imaker.api</title>
  <link rel="stylesheet" href="epydoc.css" type="text/css" />
  <script type="text/javascript" src="epydoc.js"></script>
</head>

<body bgcolor="white" text="black" link="blue" vlink="#204080"
      alink="#204080">
<!-- ==================== NAVIGATION BAR ==================== -->
<table class="navbar" border="0" width="100%" cellpadding="0"
       bgcolor="#a0c0ff" cellspacing="0">
  <tr valign="middle">

  <!-- Tree link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Index link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Help link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>

      <th class="navbar" width="100%"></th>
  </tr>
</table>
<table width="100%" cellpadding="0" cellspacing="0">
  <tr valign="top">
    <td width="100%">
      <span class="breadcrumbs">
        <a href="imaker-module.html">Package&nbsp;imaker</a> ::
        Module&nbsp;api
      </span>
    </td>
    <td>
      <table cellpadding="0" cellspacing="0">
        <!-- hide/show private -->
        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
        <tr><td align="right"><span class="options"
            >[<a href="frames.html" target="_top">frames</a
            >]&nbsp;|&nbsp;<a href="imaker.api-pysrc.html"
            target="_top">no&nbsp;frames</a>]</span></td></tr>
      </table>
    </td>
  </tr>
</table>
<h1 class="epydoc">Source Code for <a href="imaker.api-module.html">Module imaker.api</a></h1>
<pre class="py-src">
<a name="L1"></a><tt class="py-lineno"> 1</tt>  <tt class="py-line"><tt class="py-comment">#============================================================================ </tt> </tt>
<a name="L2"></a><tt class="py-lineno"> 2</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#Name        : api.py </tt> </tt>
<a name="L3"></a><tt class="py-lineno"> 3</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#Part of     : Helium </tt> </tt>
<a name="L4"></a><tt class="py-lineno"> 4</tt>  <tt class="py-line"><tt class="py-comment"></tt> </tt>
<a name="L5"></a><tt class="py-lineno"> 5</tt>  <tt class="py-line"><tt class="py-comment">#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).</tt> </tt>
<a name="L6"></a><tt class="py-lineno"> 6</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#All rights reserved.</tt> </tt>
<a name="L7"></a><tt class="py-lineno"> 7</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#This component and the accompanying materials are made available</tt> </tt>
<a name="L8"></a><tt class="py-lineno"> 8</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#under the terms of the License "Eclipse Public License v1.0"</tt> </tt>
<a name="L9"></a><tt class="py-lineno"> 9</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#which accompanies this distribution, and is available</tt> </tt>
<a name="L10"></a><tt class="py-lineno">10</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#at the URL "http://www.eclipse.org/legal/epl-v10.html".</tt> </tt>
<a name="L11"></a><tt class="py-lineno">11</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#</tt> </tt>
<a name="L12"></a><tt class="py-lineno">12</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#Initial Contributors:</tt> </tt>
<a name="L13"></a><tt class="py-lineno">13</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#Nokia Corporation - initial contribution.</tt> </tt>
<a name="L14"></a><tt class="py-lineno">14</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#</tt> </tt>
<a name="L15"></a><tt class="py-lineno">15</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#Contributors:</tt> </tt>
<a name="L16"></a><tt class="py-lineno">16</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#</tt> </tt>
<a name="L17"></a><tt class="py-lineno">17</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#Description:</tt> </tt>
<a name="L18"></a><tt class="py-lineno">18</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#===============================================================================</tt> </tt>
<a name="L19"></a><tt class="py-lineno">19</tt>  <tt class="py-line"><tt class="py-comment"></tt> </tt>
<a name="L20"></a><tt class="py-lineno">20</tt>  <tt class="py-line"><tt class="py-docstring">""" This module is an helper to interface iMaker. """</tt> </tt>
<a name="L21"></a><tt class="py-lineno">21</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
<a name="L22"></a><tt class="py-lineno">22</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> </tt>
<a name="L23"></a><tt class="py-lineno">23</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Package pathaddition=pathaddition-module.html"><a title="pathaddition" class="py-name" href="#" onclick="return doclink('link-0', 'pathaddition', 'link-0');">pathaddition</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Method fileutils.AbstractScanner.match()=fileutils.AbstractScanner-class.html#match,Module pathaddition.match=pathaddition.match-module.html"><a title="fileutils.AbstractScanner.match
pathaddition.match" class="py-name" href="#" onclick="return doclink('link-1', 'match', 'link-1');">match</a></tt> </tt>
<a name="L24"></a><tt class="py-lineno">24</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Module fileutils=fileutils-module.html"><a title="fileutils" class="py-name" href="#" onclick="return doclink('link-2', 'fileutils', 'link-2');">fileutils</a></tt> </tt>
<a name="L25"></a><tt class="py-lineno">25</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">tempfile</tt> </tt>
<a name="L26"></a><tt class="py-lineno">26</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">subprocess</tt> </tt>
<a name="L27"></a><tt class="py-lineno">27</tt>  <tt class="py-line"> </tt>
<a name="IMakerConfigScanner"></a><div id="IMakerConfigScanner-def"><a name="L28"></a><tt class="py-lineno">28</tt> <a class="py-toggle" href="#" id="IMakerConfigScanner-toggle" onclick="return toggle('IMakerConfigScanner');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="imaker.api.IMakerConfigScanner-class.html">IMakerConfigScanner</a><tt class="py-op">(</tt><tt class="py-base-class">fileutils</tt><tt class="py-op">.</tt><tt class="py-base-class">AbstractScanner</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
</div><div id="IMakerConfigScanner-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="IMakerConfigScanner-expanded"><a name="L29"></a><tt class="py-lineno">29</tt>  <tt class="py-line">    <tt class="py-docstring">""" Specialize the abstract filescanner to support detection of the configuration. """</tt> </tt>
<a name="IMakerConfigScanner.scan"></a><div id="IMakerConfigScanner.scan-def"><a name="L30"></a><tt class="py-lineno">30</tt> <a class="py-toggle" href="#" id="IMakerConfigScanner.scan-toggle" onclick="return toggle('IMakerConfigScanner.scan');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="imaker.api.IMakerConfigScanner-class.html#scan">scan</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
</div><div id="IMakerConfigScanner.scan-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="IMakerConfigScanner.scan-expanded"><a name="L31"></a><tt class="py-lineno">31</tt>  <tt class="py-line">        <tt class="py-docstring">""" Implement scanning of relevant configuration. """</tt> </tt>
<a name="L32"></a><tt class="py-lineno">32</tt>  <tt class="py-line">        <tt class="py-name">handle</tt> <tt class="py-op">=</tt> <tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt class="py-name">Popen</tt><tt class="py-op">(</tt><tt class="py-string">"imaker help-config"</tt><tt class="py-op">,</tt> <tt class="py-name">shell</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-name">stdout</tt><tt class="py-op">=</tt><tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt class="py-name">PIPE</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt>  </tt>
<a name="L33"></a><tt class="py-lineno">33</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">handle</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">splitlines</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
<a name="L34"></a><tt class="py-lineno">34</tt>  <tt class="py-line">            <tt class="py-name">line</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
<a name="L35"></a><tt class="py-lineno">35</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-3" class="py-name" targets="Method fileutils.AbstractScanner.is_included()=fileutils.AbstractScanner-class.html#is_included,Function imaker.ant.is_included()=imaker.ant-module.html#is_included"><a title="fileutils.AbstractScanner.is_included
imaker.ant.is_included" class="py-name" href="#" onclick="return doclink('link-3', 'is_included', 'link-3');">is_included</a></tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> \ </tt>
<a name="L36"></a><tt class="py-lineno">36</tt>  <tt class="py-line">                <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Method fileutils.AbstractScanner.is_excluded()=fileutils.AbstractScanner-class.html#is_excluded,Function imaker.ant.is_excluded()=imaker.ant-module.html#is_excluded"><a title="fileutils.AbstractScanner.is_excluded
imaker.ant.is_excluded" class="py-name" href="#" onclick="return doclink('link-4', 'is_excluded', 'link-4');">is_excluded</a></tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
<a name="L37"></a><tt class="py-lineno">37</tt>  <tt class="py-line">                <tt class="py-keyword">yield</tt> <tt class="py-name">line</tt> </tt>
<a name="L38"></a><tt class="py-lineno">38</tt>  <tt class="py-line">        <tt class="py-name">handle</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name" targets="Method build.model.BOM.close()=build.model.BOM-class.html#close,Method build.model.SessionCreator.close()=build.model.SessionCreator-class.html#close,Method buildtools.AbstractOutputWriter.close()=buildtools.AbstractOutputWriter-class.html#close,Method ccm.AbstractSession.close()=ccm.AbstractSession-class.html#close,Method ccm.Session.close()=ccm.Session-class.html#close,Method ccm.SessionPool.close()=ccm.SessionPool-class.html#close,Method ccm.extra.CachedSessionProvider.close()=ccm.extra.CachedSessionProvider-class.html#close,Method ccm.extra.SessionProvider.close()=ccm.extra.SessionProvider-class.html#close,Method log2xml.LogWriter.close()=log2xml.LogWriter-class.html#close,Method preparation.PreparationBuilder.close()=preparation.PreparationBuilder-class.html#close,Method sysdef.io.FlashImageSizeWriter.close()=sysdef.io.FlashImageSizeWriter-class.html#close"><a title="build.model.BOM.close
build.model.SessionCreator.close
buildtools.AbstractOutputWriter.close
ccm.AbstractSession.close
ccm.Session.close
ccm.SessionPool.close
ccm.extra.CachedSessionProvider.close
ccm.extra.SessionProvider.close
log2xml.LogWriter.close
preparation.PreparationBuilder.close
sysdef.io.FlashImageSizeWriter.close" class="py-name" href="#" onclick="return doclink('link-5', 'close', 'link-5');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
</div></div><a name="L39"></a><tt class="py-lineno">39</tt>  <tt class="py-line">         </tt>
<a name="scan_configs"></a><div id="scan_configs-def"><a name="L40"></a><tt class="py-lineno">40</tt> <a class="py-toggle" href="#" id="scan_configs-toggle" onclick="return toggle('scan_configs');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="imaker.api-module.html#scan_configs">scan_configs</a><tt class="py-op">(</tt><tt class="py-param">includes</tt><tt class="py-op">,</tt> <tt class="py-param">excludes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
</div><div id="scan_configs-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="scan_configs-expanded"><a name="L41"></a><tt class="py-lineno">41</tt>  <tt class="py-line">    <tt class="py-docstring">""" Use iMaker to scan the available buildable configurations. """</tt> </tt>
<a name="L42"></a><tt class="py-lineno">42</tt>  <tt class="py-line">    <tt class="py-name">scanner</tt> <tt class="py-op">=</tt> <tt id="link-6" class="py-name" targets="Class imaker.api.IMakerConfigScanner=imaker.api.IMakerConfigScanner-class.html"><a title="imaker.api.IMakerConfigScanner" class="py-name" href="#" onclick="return doclink('link-6', 'IMakerConfigScanner', 'link-6');">IMakerConfigScanner</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
<a name="L43"></a><tt class="py-lineno">43</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">inc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">includes</tt><tt class="py-op">:</tt> </tt>
<a name="L44"></a><tt class="py-lineno">44</tt>  <tt class="py-line">        <tt class="py-name">scanner</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name" targets="Method fileutils.AbstractScanner.add_include()=fileutils.AbstractScanner-class.html#add_include"><a title="fileutils.AbstractScanner.add_include" class="py-name" href="#" onclick="return doclink('link-7', 'add_include', 'link-7');">add_include</a></tt><tt class="py-op">(</tt><tt class="py-name">inc</tt><tt class="py-op">)</tt> </tt>
<a name="L45"></a><tt class="py-lineno">45</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">exc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">excludes</tt><tt class="py-op">:</tt> </tt>
<a name="L46"></a><tt class="py-lineno">46</tt>  <tt class="py-line">        <tt class="py-name">scanner</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name" targets="Method fileutils.AbstractScanner.add_exclude()=fileutils.AbstractScanner-class.html#add_exclude"><a title="fileutils.AbstractScanner.add_exclude" class="py-name" href="#" onclick="return doclink('link-8', 'add_exclude', 'link-8');">add_exclude</a></tt><tt class="py-op">(</tt><tt class="py-name">exc</tt><tt class="py-op">)</tt> </tt>
<a name="L47"></a><tt class="py-lineno">47</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">r</tt> <tt class="py-keyword">for</tt> <tt class="py-name">r</tt> <tt class="py-keyword">in</tt> <tt class="py-name">scanner</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Method archive.scanners.AbldWhatScanner.scan()=archive.scanners.AbldWhatScanner-class.html#scan,Method archive.scanners.FileSystemScanner.scan()=archive.scanners.FileSystemScanner-class.html#scan,Method archive.scanners.InputFileScanner.scan()=archive.scanners.InputFileScanner-class.html#scan,Method archive.scanners.Scanner.scan()=archive.scanners.Scanner-class.html#scan,Method comments.CommentParser.scan()=comments.CommentParser-class.html#scan,Method fileutils.AbstractScanner.scan()=fileutils.AbstractScanner-class.html#scan,Method fileutils.FileScanner.scan()=fileutils.FileScanner-class.html#scan,Method imaker.api.IMakerConfigScanner.scan()=imaker.api.IMakerConfigScanner-class.html#scan"><a title="archive.scanners.AbldWhatScanner.scan
archive.scanners.FileSystemScanner.scan
archive.scanners.InputFileScanner.scan
archive.scanners.Scanner.scan
comments.CommentParser.scan
fileutils.AbstractScanner.scan
fileutils.FileScanner.scan
imaker.api.IMakerConfigScanner.scan" class="py-name" href="#" onclick="return doclink('link-9', 'scan', 'link-9');">scan</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
</div><a name="L48"></a><tt class="py-lineno">48</tt>  <tt class="py-line"> </tt>
<a name="targets_for_config"></a><div id="targets_for_config-def"><a name="L49"></a><tt class="py-lineno">49</tt> <a class="py-toggle" href="#" id="targets_for_config-toggle" onclick="return toggle('targets_for_config');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="imaker.api-module.html#targets_for_config">targets_for_config</a><tt class="py-op">(</tt><tt class="py-param">config</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
</div><div id="targets_for_config-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="targets_for_config-expanded"><a name="L50"></a><tt class="py-lineno">50</tt>  <tt class="py-line">    <tt class="py-docstring">""" Return the list of target supported by the provided configuration of iMaker. """</tt> </tt>
<a name="L51"></a><tt class="py-lineno">51</tt>  <tt class="py-line">    <tt id="link-10" class="py-name" targets="Method buildtools.Command.cmd()=buildtools.Command-class.html#cmd"><a title="buildtools.Command.cmd" class="py-name" href="#" onclick="return doclink('link-10', 'cmd', 'link-10');">cmd</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"imaker -f %s help-target-*-list"</tt> <tt class="py-op">%</tt> <tt class="py-name">config</tt> </tt>
<a name="L52"></a><tt class="py-lineno">52</tt>  <tt class="py-line">    <tt class="py-op">(</tt><tt class="py-name">_</tt><tt class="py-op">,</tt> <tt class="py-name">handle</tt><tt class="py-op">,</tt> <tt class="py-name">child_stderr</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">popen3</tt><tt class="py-op">(</tt><tt id="link-11" class="py-name"><a title="buildtools.Command.cmd" class="py-name" href="#" onclick="return doclink('link-11', 'cmd', 'link-10');">cmd</a></tt><tt class="py-op">)</tt> </tt>
<a name="L53"></a><tt class="py-lineno">53</tt>  <tt class="py-line">    <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
<a name="L54"></a><tt class="py-lineno">54</tt>  <tt class="py-line">    <tt class="py-keyword">print</tt> <tt class="py-name">child_stderr</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
<a name="L55"></a><tt class="py-lineno">55</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">handle</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">splitlines</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
<a name="L56"></a><tt class="py-lineno">56</tt>  <tt class="py-line">        <tt class="py-name">line</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
<a name="L57"></a><tt class="py-lineno">57</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">line</tt> <tt class="py-op">==</tt> <tt class="py-string">""</tt> <tt class="py-keyword">or</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">"Total duration"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
<a name="L58"></a><tt class="py-lineno">58</tt>  <tt class="py-line">            <tt class="py-keyword">continue</tt> </tt>
<a name="L59"></a><tt class="py-lineno">59</tt>  <tt class="py-line">        <tt class="py-name">result</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Method ccm.Folder.append()=ccm.Folder-class.html#append,Method ccm.Task.append()=ccm.Task-class.html#append"><a title="ccm.Folder.append
ccm.Task.append" class="py-name" href="#" onclick="return doclink('link-12', 'append', 'link-12');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
<a name="L60"></a><tt class="py-lineno">60</tt>  <tt class="py-line">    <tt class="py-name">handle</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name"><a title="build.model.BOM.close
build.model.SessionCreator.close
buildtools.AbstractOutputWriter.close
ccm.AbstractSession.close
ccm.Session.close
ccm.SessionPool.close
ccm.extra.CachedSessionProvider.close
ccm.extra.SessionProvider.close
log2xml.LogWriter.close
preparation.PreparationBuilder.close
sysdef.io.FlashImageSizeWriter.close" class="py-name" href="#" onclick="return doclink('link-13', 'close', 'link-5');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
<a name="L61"></a><tt class="py-lineno">61</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">result</tt> </tt>
</div><a name="L62"></a><tt class="py-lineno">62</tt>  <tt class="py-line"> </tt>
<a name="L63"></a><tt class="py-lineno">63</tt>  <tt class="py-line"> </tt>
<a name="get_product_dir"></a><div id="get_product_dir-def"><a name="L64"></a><tt class="py-lineno">64</tt> <a class="py-toggle" href="#" id="get_product_dir-toggle" onclick="return toggle('get_product_dir');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="imaker.api-module.html#get_product_dir">get_product_dir</a><tt class="py-op">(</tt><tt class="py-param">product</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
</div><div id="get_product_dir-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="get_product_dir-expanded"><a name="L65"></a><tt class="py-lineno">65</tt>  <tt class="py-line">    <tt class="py-docstring">""" Return the PRODUCT_DIR variable from iMaker. """</tt> </tt>
<a name="L66"></a><tt class="py-lineno">66</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-14" class="py-name" targets="Function imaker.api.get_variable()=imaker.api-module.html#get_variable"><a title="imaker.api.get_variable" class="py-name" href="#" onclick="return doclink('link-14', 'get_variable', 'link-14');">get_variable</a></tt><tt class="py-op">(</tt><tt class="py-string">"PRODUCT_DIR"</tt><tt class="py-op">,</tt> <tt id="link-15" class="py-name" targets="Variable symrec.ReleaseMetadata.product=symrec.ReleaseMetadata-class.html#product"><a title="symrec.ReleaseMetadata.product" class="py-name" href="#" onclick="return doclink('link-15', 'product', 'link-15');">product</a></tt><tt class="py-op">=</tt><tt id="link-16" class="py-name"><a title="symrec.ReleaseMetadata.product" class="py-name" href="#" onclick="return doclink('link-16', 'product', 'link-15');">product</a></tt><tt class="py-op">)</tt> </tt>
</div><a name="L67"></a><tt class="py-lineno">67</tt>  <tt class="py-line"> </tt>
<a name="L68"></a><tt class="py-lineno">68</tt>  <tt class="py-line">     </tt>
<a name="get_variable"></a><div id="get_variable-def"><a name="L69"></a><tt class="py-lineno">69</tt> <a class="py-toggle" href="#" id="get_variable-toggle" onclick="return toggle('get_variable');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="imaker.api-module.html#get_variable">get_variable</a><tt class="py-op">(</tt><tt class="py-param">variable</tt><tt class="py-op">,</tt> <tt class="py-param">target</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">product</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">config</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">default</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
</div><div id="get_variable-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="get_variable-expanded"><a name="L70"></a><tt class="py-lineno">70</tt>  <tt class="py-line">    <tt class="py-docstring">""" Get variable value from iMaker. """</tt> </tt>
<a name="L71"></a><tt class="py-lineno">71</tt>  <tt class="py-line">    <tt class="py-name">cmdline</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
<a name="L72"></a><tt class="py-lineno">72</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-17" class="py-name"><a title="symrec.ReleaseMetadata.product" class="py-name" href="#" onclick="return doclink('link-17', 'product', 'link-15');">product</a></tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
<a name="L73"></a><tt class="py-lineno">73</tt>  <tt class="py-line">        <tt class="py-name">cmdline</tt> <tt class="py-op">=</tt> <tt class="py-string">"-p%s"</tt> <tt class="py-op">%</tt> <tt id="link-18" class="py-name"><a title="symrec.ReleaseMetadata.product" class="py-name" href="#" onclick="return doclink('link-18', 'product', 'link-15');">product</a></tt> </tt>
<a name="L74"></a><tt class="py-lineno">74</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">config</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
<a name="L75"></a><tt class="py-lineno">75</tt>  <tt class="py-line">        <tt class="py-name">cmdline</tt> <tt class="py-op">+=</tt> <tt class="py-string">" -f %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">config</tt> </tt>
<a name="L76"></a><tt class="py-lineno">76</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">target</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
<a name="L77"></a><tt class="py-lineno">77</tt>  <tt class="py-line">        <tt class="py-name">cmdline</tt> <tt class="py-op">+=</tt> <tt class="py-string">" %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">target</tt> </tt>
<a name="L78"></a><tt class="py-lineno">78</tt>  <tt class="py-line">     </tt>
<a name="L79"></a><tt class="py-lineno">79</tt>  <tt class="py-line">    <tt class="py-name">logdir</tt> <tt class="py-op">=</tt> <tt class="py-name">tempfile</tt><tt class="py-op">.</tt><tt class="py-name">mkdtemp</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
<a name="L80"></a><tt class="py-lineno">80</tt>  <tt class="py-line">    <tt class="py-keyword">print</tt> <tt class="py-string">"imaker %s print-%s WORKDIR=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">cmdline</tt><tt class="py-op">,</tt> <tt class="py-name">variable</tt><tt class="py-op">,</tt> <tt class="py-name">logdir</tt><tt class="py-op">)</tt> </tt>
<a name="L81"></a><tt class="py-lineno">81</tt>  <tt class="py-line">    <tt class="py-op">(</tt><tt class="py-name">_</tt><tt class="py-op">,</tt> <tt class="py-name">handle</tt><tt class="py-op">,</tt> <tt class="py-name">child_stderr</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">popen3</tt><tt class="py-op">(</tt><tt class="py-string">"imaker %s print-%s WORKDIR=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">cmdline</tt><tt class="py-op">,</tt> <tt class="py-name">variable</tt><tt class="py-op">,</tt> <tt class="py-name">logdir</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
<a name="L82"></a><tt class="py-lineno">82</tt>  <tt class="py-line">    <tt class="py-keyword">print</tt> <tt class="py-name">child_stderr</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
<a name="L83"></a><tt class="py-lineno">83</tt>  <tt class="py-line">    <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
<a name="L84"></a><tt class="py-lineno">84</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">handle</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">splitlines</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
<a name="L85"></a><tt class="py-lineno">85</tt>  <tt class="py-line">        <tt class="py-name">line</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
<a name="L86"></a><tt class="py-lineno">86</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">line</tt> <tt class="py-op">==</tt> <tt class="py-string">""</tt> <tt class="py-keyword">or</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">"Total duration"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
<a name="L87"></a><tt class="py-lineno">87</tt>  <tt class="py-line">            <tt class="py-keyword">continue</tt> </tt>
<a name="L88"></a><tt class="py-lineno">88</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">variable</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
<a name="L89"></a><tt class="py-lineno">89</tt>  <tt class="py-line">            <tt class="py-name">result</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name"><a title="ccm.Folder.append
ccm.Task.append" class="py-name" href="#" onclick="return doclink('link-19', 'append', 'link-12');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
<a name="L90"></a><tt class="py-lineno">90</tt>  <tt class="py-line">    <tt class="py-name">handle</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="build.model.BOM.close
build.model.SessionCreator.close
buildtools.AbstractOutputWriter.close
ccm.AbstractSession.close
ccm.Session.close
ccm.SessionPool.close
ccm.extra.CachedSessionProvider.close
ccm.extra.SessionProvider.close
log2xml.LogWriter.close
preparation.PreparationBuilder.close
sysdef.io.FlashImageSizeWriter.close" class="py-name" href="#" onclick="return doclink('link-20', 'close', 'link-5');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
<a name="L91"></a><tt class="py-lineno">91</tt>  <tt class="py-line">    <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt id="link-21" class="py-name"><a title="fileutils.AbstractScanner.match
pathaddition.match" class="py-name" href="#" onclick="return doclink('link-21', 'match', 'link-1');">match</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s\s*=\s*`(.*)'"</tt> <tt class="py-op">%</tt> <tt class="py-name">variable</tt><tt class="py-op">,</tt> <tt class="py-string">"\n"</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">DOTALL</tt><tt class="py-op">)</tt> </tt>
<a name="L92"></a><tt class="py-lineno">92</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">result</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
<a name="L93"></a><tt class="py-lineno">93</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
<a name="L94"></a><tt class="py-lineno">94</tt>  <tt class="py-line">    <tt class="py-keyword">assert</tt> <tt class="py-op">(</tt><tt class="py-name">result</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
<a name="L95"></a><tt class="py-lineno">95</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">default</tt> </tt>
</div><a name="L96"></a><tt class="py-lineno">96</tt>  <tt class="py-line"> </tt><script type="text/javascript">
<!--
expandto(location.href);
// -->
</script>
</pre>
<br />
<!-- ==================== NAVIGATION BAR ==================== -->
<table class="navbar" border="0" width="100%" cellpadding="0"
       bgcolor="#a0c0ff" cellspacing="0">
  <tr valign="middle">

  <!-- Tree link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Index link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>

  <!-- Help link -->
      <th>&nbsp;&nbsp;&nbsp;<a
        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>

      <th class="navbar" width="100%"></th>
  </tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%%">
  <tr>
    <td align="left" class="footer">
    Generated by Epydoc 3.0beta1 on Wed Sep 09 13:44:23 2009
    </td>
    <td align="right" class="footer">
      <a href="http://epydoc.sourceforge.net">http://epydoc.sourceforge.net</a>
    </td>
  </tr>
</table>

<script type="text/javascript">
  <!--
  // Private objects are initially displayed (because if
  // javascript is turned off then we want them to be
  // visible); but by default, we want to hide them.  So hide
  // them unless we have a cookie that says to show them.
  checkCookie()
  // -->
</script>
  
</body>
</html>