1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-27 16:51:06 -07:00
emacs/mps/manual/html/design/version-library.html
Richard Brooksby e940ea3732 Updated manual html
Copied from Perforce
 Change: 182591
 ServerID: perforce.ravenbrook.com
2013-06-06 20:59:14 +01:00

208 lines
No EOL
14 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>46. Library version mechanism &mdash; Memory Pool System 1.111.0 documentation</title>
<link rel="stylesheet" href="../_static/mps.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '1.111.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<link rel="copyright" title="Copyright" href="../copyright.html" />
<link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" />
<link rel="up" title="Old design" href="old.html" />
<link rel="next" title="47. Software versions" href="version.html" />
<link rel="prev" title="45. General MPS types" href="type.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="version.html" title="47. Software versions"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="type.html" title="45. General MPS types"
accesskey="P">previous</a> |</li>
<li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> &raquo;</li>
<li><a href="old.html" accesskey="U">Old design</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<span class="target" id="design-version-library"></span><div class="section" id="library-version-mechanism">
<span id="index-0"></span><h1>46. Library version mechanism<a class="headerlink" href="#library-version-mechanism" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<span id="design.mps.version-library"></span><h2>46.1. Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.version-library.intro"></span><a class="mpstag reference internal" href="#design.mps.version-library.intro">.intro:</a> This describes the design of a mechanism to be used to
determine the version (that is, product, version, and release) of an
MPS library.</p>
</div>
<div class="section" id="readership">
<h2>46.2. Readership<a class="headerlink" href="#readership" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.version-library.readership"></span><a class="mpstag reference internal" href="#design.mps.version-library.readership">.readership:</a> Any MPS developer.</p>
</div>
<div class="section" id="source">
<h2>46.3. Source<a class="headerlink" href="#source" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.version-library.source"></span><a class="mpstag reference internal" href="#design.mps.version-library.source">.source:</a> Various requirements demand such a mechanism. See
<a class="reference external" href="https://info.ravenbrook.com/project/mps/import/2001-11-05/mmprevol/request/epcore/160021">request.epcore.160021</a>: There is no way to tell which version and
release of the MM one is using.</p>
</div>
<div class="section" id="overview">
<h2>46.4. Overview<a class="headerlink" href="#overview" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.version-library.overview"></span><a class="mpstag reference internal" href="#design.mps.version-library.overview">.overview:</a> See design.mps.version for discussion and design of
versions of other aspects of the software. This document concentrates
on a design for determining which version of the library one has
linked with. There are two aspects to the design, allowing humans to
determine the version of an MPS library, and allowing programs to
determine the version of an MPS library. Only the former is currently
designed (a method for humans to determine which version of an MPS
library is being used).</p>
<p><span class="target" id="design.mps.version-library.overview.impl"></span><a class="mpstag reference internal" href="#design.mps.version-library.overview.impl">.overview.impl:</a> The overall design is to have a distinctive string
compiled into the library binary. Various programs and tools will be
able to extract the string and display it. The string will identify
the version of the MPS begin used.</p>
</div>
<div class="section" id="architecture">
<h2>46.5. Architecture<a class="headerlink" href="#architecture" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.version-library.arch.structure"></span><a class="mpstag reference internal" href="#design.mps.version-library.arch.structure">.arch.structure:</a> The design consists of three components:</p>
<ol class="arabic simple">
<li><span class="target" id="design.mps.version-library.arch.string"></span><a class="mpstag reference internal" href="#design.mps.version-library.arch.string">.arch.string:</a> A string embedded into any delivered library
binaries (which will encode the necessary information).</li>
<li><span class="target" id="design.mps.version-library.arch.proc"></span><a class="mpstag reference internal" href="#design.mps.version-library.arch.proc">.arch.proc:</a> A process by which the string is modified
appropriately whenever releases are made.</li>
<li><span class="target" id="design.mps.version-library.arch.tool"></span><a class="mpstag reference internal" href="#design.mps.version-library.arch.tool">.arch.tool:</a> A tool and its documentation (it is expected that
standard tools can be used). The tool will be used to extract the
version string from a delivered library or an executable linked
with the library.</li>
</ol>
<p><span class="target" id="design.mps.version-library.arch.not-here"></span><a class="mpstag reference internal" href="#design.mps.version-library.arch.not-here">.arch.not-here:</a> Only the string component
(arch.string) is directly described here. The other
components are described elsewhere. (where?)</p>
<p>The string will contain information to identify the following items:</p>
<ol class="arabic simple">
<li><span class="target" id="design.mps.version-library.arch.string.platform"></span><a class="mpstag reference internal" href="#design.mps.version-library.arch.string.platform">.arch.string.platform:</a> the platform being used.</li>
<li><span class="target" id="design.mps.version-library.arch.string.product"></span><a class="mpstag reference internal" href="#design.mps.version-library.arch.string.product">.arch.string.product:</a> the name of the product.</li>
<li><span class="target" id="design.mps.version-library.arch.string.variety"></span><a class="mpstag reference internal" href="#design.mps.version-library.arch.string.variety">.arch.string.variety:</a> the variety of the product.</li>
<li><span class="target" id="design.mps.version-library.arch.string.version"></span><a class="mpstag reference internal" href="#design.mps.version-library.arch.string.version">.arch.string.version:</a> the version and release of the product.</li>
</ol>
</div>
<div class="section" id="implementation">
<h2>46.6. Implementation<a class="headerlink" href="#implementation" title="Permalink to this headline"></a></h2>
<p><span class="target" id="design.mps.version-library.impl.file"></span><a class="mpstag reference internal" href="#design.mps.version-library.impl.file">.impl.file:</a> The string itself is a declared C object in the file
<tt class="docutils literal"><span class="pre">version.c</span></tt> (impl.c.version). It consists of a concatenation of
various strings which are defined in other modules.</p>
<p><span class="target" id="design.mps.version-library.impl.variety"></span><a class="mpstag reference internal" href="#design.mps.version-library.impl.variety">.impl.variety:</a> The string containing the name of the variety is the
expansion of the macro <tt class="xref c c-macro docutils literal"><span class="pre">MPS_VARIETY_STRING</span></tt> defined by <tt class="docutils literal"><span class="pre">config.h</span></tt>
(impl.h.config).</p>
<p><span class="target" id="design.mps.version-library.impl.product"></span><a class="mpstag reference internal" href="#design.mps.version-library.impl.product">.impl.product:</a> The string containing the name of the product is the
expansion of the macro <tt class="xref c c-macro docutils literal"><span class="pre">MPS_PROD_STRING</span></tt> defined by <tt class="docutils literal"><span class="pre">config.h</span></tt>
(impl.h.config).</p>
<p><span class="target" id="design.mps.version-library.impl.platform"></span><a class="mpstag reference internal" href="#design.mps.version-library.impl.platform">.impl.platform:</a> The string containing the name of the platform is
the expansion of the macro <a class="reference internal" href="../topic/platform.html#MPS_PF_STRING" title="MPS_PF_STRING"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_PF_STRING</span></tt></a> defined by <tt class="docutils literal"><span class="pre">mpstd.h</span></tt>
(impl.h.mpstd).</p>
<p><span class="target" id="design.mps.version-library.impl.date"></span><a class="mpstag reference internal" href="#design.mps.version-library.impl.date">.impl.date:</a> The string contains the date and time of compilation by
using the <tt class="docutils literal"><span class="pre">__DATE__</span></tt> and <tt class="docutils literal"><span class="pre">__TIME__</span></tt> macros defined by ISO C
§6.8.8.</p>
<p><span class="target" id="design.mps.version-library.impl.version"></span><a class="mpstag reference internal" href="#design.mps.version-library.impl.version">.impl.version:</a> The string contains the version and release of the
product. This is by the expansion of the macro <tt class="xref c c-macro docutils literal"><span class="pre">MPS_RELEASE</span></tt> which
is defined in this module (<tt class="docutils literal"><span class="pre">version.c</span></tt>).</p>
<p><span class="target" id="design.mps.version-library.impl.usage"></span><a class="mpstag reference internal" href="#design.mps.version-library.impl.usage">.impl.usage:</a> To make a release, the <tt class="xref c c-macro docutils literal"><span class="pre">MPS_RELEASE</span></tt> macro (see
impl.c.version.release) is edited to contain the release name (for
example, <tt class="docutils literal"><span class="pre">&quot;release.epcore.brisling&quot;</span></tt>), and then changed back
immediately after the release checkpoint is made.</p>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/logo.png" alt="Logo"/>
</a></p>
<h3><a href="../index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">46. Library version mechanism</a><ul>
<li><a class="reference internal" href="#introduction">46.1. Introduction</a></li>
<li><a class="reference internal" href="#readership">46.2. Readership</a></li>
<li><a class="reference internal" href="#source">46.3. Source</a></li>
<li><a class="reference internal" href="#overview">46.4. Overview</a></li>
<li><a class="reference internal" href="#architecture">46.5. Architecture</a></li>
<li><a class="reference internal" href="#implementation">46.6. Implementation</a></li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="type.html"
title="previous chapter">45. General MPS types</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="version.html"
title="next chapter">47. Software versions</a></p><h4>Downloads</h4>
<p class="topless">
<a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br>
<a href="http://www.ravenbrook.com/project/mps/release/">All MPS Kit releases</a>
</p>
<h4>Issues</h4>
<p class="topless">
<a href="http://www.ravenbrook.com/project/mps/issue/?action=list&amp;view=status%3dopen&amp;display=Job:Priority:Title&amp;sort=Priority">Known issues</a><br>
<a href="http://www.ravenbrook.com/project/mps/issue/?action=fixed&release_fixed=1.111.0">Issues fixed in release 1.111.0</a>
</p><h4>Contact us</h4>
<p class="topless"><a href="mailto:mps-questions@ravenbrook.com">mps-questions@ravenbrook.com</a></p>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="version.html" title="47. Software versions"
>next</a> |</li>
<li class="right" >
<a href="type.html" title="45. General MPS types"
>previous</a> |</li>
<li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> &raquo;</li>
<li><a href="old.html" >Old design</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">Copyright</a> 2013, Ravenbrook Limited.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>