1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-16 22:14:23 +03:00
inform7/docs/supervisor-module/P-wtmd.html

131 lines
9.5 KiB
HTML
Raw Normal View History

2020-05-03 18:34:53 +03:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>What This Module Does</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="index.html"><span class="selectedlink">supervisor</span></a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../if-module/index.html">if</a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul><h2>Shared Modules</h2><ul>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../html-module/index.html">html</a></li>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'What This Module Does' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#P">Preliminaries</a></li><li><b>What This Module Does</b></li></ul></div>
<p class="purpose">An overview of the supervisor module's role and abilities.</p>
<ul class="toc"><li><a href="P-wtmd.html#SP1">&#167;1. Prerequisites</a></li><li><a href="P-wtmd.html#SP2">&#167;2. The Supervisor and its Parent</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. Prerequisites. </b>The supervisor module is a part of the Inform compiler toolset. It is
presented as a literate program or "web". Before diving in:
</p>
<ul class="items"><li>(a) It helps to have some experience of reading webs: see <a href="../../../inweb/docs/index.html" class="internal">inweb</a> for more.
</li><li>(b) The module is written in C, in fact ANSI C99, but this is disguised by the
fact that it uses some extension syntaxes provided by the <a href="../../../inweb/docs/index.html" class="internal">inweb</a> literate
programming tool, making it a dialect of C called InC. See <a href="../../../inweb/docs/index.html" class="internal">inweb</a> for
full details, but essentially: it's C without predeclarations or header files,
and where functions have names like <span class="extract"><span class="extract-syntax">Tags::add_by_name</span></span> rather than just <span class="extract"><span class="extract-syntax">add_by_name</span></span>.
</li><li>(c) This module uses other modules drawn from the <a href="../compiler.html" class="internal">compiler</a>, and also
uses a module of utility functions called <a href="../../../inweb/docs/foundation-module/index.html" class="internal">foundation</a>.
For more, see <a href="../../../inweb/docs/foundation-module/P-abgtf.html" class="internal">A Brief Guide to Foundation (in foundation)</a>.
</li></ul>
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. The Supervisor and its Parent. </b>The <a href="index.html" class="internal">supervisor</a> module is part of both <a href="../inform7/index.html" class="internal">inform7</a> and <a href="../inbuild/index.html" class="internal">inbuild</a>, and acts
as a build manager. To compile an Inform project is not so atomic a task as
it sounds, because the project may need resources which themselves need to be
built first, and so on. <a href="index.html" class="internal">supervisor</a> takes charge of this, issuing
instructions as needed. It does so either "externally", by issuing shell
commands, or "internally", by calling functions in other modules resident in
the current compiler tool.
</p>
<p class="commentary">When included in <a href="../inform7/index.html" class="internal">inform7</a>, the Supervisor is given a single task which
is always the same: build the current Inform 7 project. (See <a href="../core-module/1-mr.html" class="internal">Main Routine (in core)</a>.)
But when included in <a href="../inbuild/index.html" class="internal">inbuild</a>, a much wider range of tasks can be asked for,
as specified at the command line. (See <a href="../inbuild/1-mn.html" class="internal">Main (in inbuild)</a>.) In this discussion,
"the parent" means the tool which is using <a href="index.html" class="internal">supervisor</a>, and might be either
<a href="../inform7/index.html" class="internal">inform7</a> or <a href="../inbuild/index.html" class="internal">inbuild</a>.
</p>
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. </b><a href="index.html" class="internal">supervisor</a> has a relationship with its parent tool which involves to and
fro: it's not as simple as single one-time call from the parent to <a href="index.html" class="internal">supervisor</a>
saying "now build this".
</p>
<ul class="items"><li>(1) <a href="index.html" class="internal">supervisor</a> has to be started and stopped at each end of the parent's
run, by calling <a href="1-sm.html#SP3" class="internal">SupervisorModule::start</a> and <a href="1-sm.html#SP3" class="internal">SupervisorModule::end</a>.
The former calls <a href="1-ic.html#SP3" class="internal">Supervisor::start</a> in turn, and that activates a number of
subsystems with further calls. But all modules do something like this.
</li><li>(2) More unusually, when the parent is creating its command-line options, it
should call <a href="1-ic.html#SP4" class="internal">Supervisor::declare_options</a> to add more. This allows all tools
containing the Supervisor to offer a unified set of command-line options to
configure it. (Compare <a href="../inform7/M-rc.html" class="internal">Reference Card (in inform7)</a> and <a href="../inbuild/M-rc.html" class="internal">Reference Card (in inbuild)</a>
to see the effect.) When the parent is given a command-line switch that
it doesn't recognise, it should call <a href="1-ic.html#SP8" class="internal">Supervisor::option</a> to handle that; and
when the command line has been fully processed, it should call
<a href="1-ic.html#SP9" class="internal">Supervisor::optioneering_complete</a>.
</li><li>(3) The parent can now, if it chooses, make calls into <a href="index.html" class="internal">supervisor</a> to set
up additional dependencies. But eventually it will call <a href="1-ic.html#SP11" class="internal">Supervisor::go_operational</a>.
The Supervisor is now ready for use!
</li></ul>
<p class="commentary">There is no single "go" button: instead, the Supervisor provides a suite
of functions to call, each acting on a "copy" &mdash; an instance of some software
at a given filing system location. When <a href="../inform7/index.html" class="internal">inform7</a> is the parent, it follows
the call to <a href="1-ic.html#SP11" class="internal">Supervisor::go_operational</a> with a single call to <a href="2-cps.html#SP10" class="internal">Copies::build</a>
on the copy representing the current Inform 7 project. But when <a href="../inbuild/index.html" class="internal">inbuild</a>
is the parent, a variety of other functions may be made.
</p>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprevoff">&#10094;</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresschapter"><a href="1-sm.html">1</a></li><li class="progresschapter"><a href="2-gnr.html">2</a></li><li class="progresschapter"><a href="3-bg.html">3</a></li><li class="progresschapter"><a href="4-em.html">4</a></li><li class="progresschapter"><a href="5-es.html">5</a></li><li class="progresschapter"><a href="6-st.html">6</a></li><li class="progresschapter"><a href="7-ed.html">7</a></li><li class="progressnext"><a href="1-sm.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>