Merge pull request #4668 from adamscott/template-pool-to-scons_pool
[scons.git] / doc / design / issues.xml
blobca88dfc13ab3e7b57ebffcb711e915df57a93dfc
1 <?xml version='1.0'?>
2 <!DOCTYPE sconsdoc [
3     <!ENTITY % scons SYSTEM "../scons.mod">
4     %scons;
5 ]>
7 <chapter id="chap-issues"
8          xmlns="http://www.scons.org/dbxsd/v1.0"
9          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10          xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd">
11 <title>Other Issues</title>
13 <!--
15   __COPYRIGHT__
17   Permission is hereby granted, free of charge, to any person obtaining
18   a copy of this software and associated documentation files (the
19   "Software"), to deal in the Software without restriction, including
20   without limitation the rights to use, copy, modify, merge, publish,
21   distribute, sublicense, and/or sell copies of the Software, and to
22   permit persons to whom the Software is furnished to do so, subject to
23   the following conditions:
25   The above copyright notice and this permission notice shall be included
26   in all copies or substantial portions of the Software.
28   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
29   KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
30   WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32   LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33   OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36 -->
37  <para>
39    No build tools is perfect.
40    Here are some &SCons; issues that
41    do not yet have solutions.
43  </para>
45  <section>
46  <title>Interaction with SC-config</title>
48    <para>
50    The SC-config tool will be used in the &SCons; installation
51    process to generate an appropriate default construction environment
52    so that building most software works "out of the box" on the
53    installed platform.  The SC-config tool will find reasonable default
54    compilers (C, C++, Fortran), linkers/loaders, library archive tools,
55    etc. for specification in the default &SCons; construction
56    environment.
58    </para>
60  </section>
62  <section>
63  <title>Interaction with test infrastructures</title>
65    <para>
67    &SCons; can be configured to use SC-test (or some other test tool)
68    to provide controlled, automated testing of software.  The &Link;
69    method could link a <filename>test</filename> subdirectory to a build
70    subdirectory:
72    </para>
74     <programlisting>
75         Link('test', 'build')
76         SConscript('test/SConscript')</programlisting>
78    <para>
80    Any test cases checked in with the source code will be linked
81    into the <filename>test</filename> subdirectory and executed.  If
82    &SConscript; files and test cases are written with this in mind, then
83    invoking:
85    </para>
87     <programlisting>
88         % sccons test</programlisting>
90    <para>
92    Would run all the automated test cases that depend on any changed
93    software.
95    </para>
98    <!--
100          YYY    integrate with SC-test to provide sanity check on new tools
101                 "discovery testing" of new tools
102                 results recorded in a central database
103                 central database can be somewhere else on web
105    -->
107  </section>
109  <section>
110  <title>Java dependencies</title>
112    <para>
114    Java dependencies are difficult for an external dependency-based
115    construction tool to accomodate.  Determining Java class dependencies
116    is more complicated than the simple pattern-matching of C or C++
117    <literal>#include</literal> files.  From the point of view of an
118    external build tool, the Java compiler behaves "unpredictably"
119    because it may create or update multiple output class files and
120    directories as a result of its internal class dependencies.
122    </para>
124    <para>
126    An obvious &SCons; implementation would be to have the &Scanner;
127    object parse output from <command>Java -depend -verbose</command> to
128    calculate dependencies, but this has the distinct disadvantage of
129    requiring two separate compiler invocations, thereby slowing down
130    builds.
132    </para>
134  </section>
136  <section>
137  <title>Limitations of digital signature calculation</title>
139    <para>
141    In practice, calculating digital signatures of a file's contents is a
142    more robust mechanism than time stamps for determining what needs
143    building.  However:
145    </para>
147    <orderedlist numeration="arabic">
149     <listitem>
150     <para>
152      Developers used to the time stamp model of &Make; can initially
153      find digital signatures counter-intuitive.  The assumption that:
155      <programlisting>
156         % touch file.c</programlisting>
158      will cause a rebuild of <filename>file</filename> is strong...
160     </para>
161     </listitem>
163     <listitem>
164     <para>
166      Abstracting dependency calculation into a single digital signature
167      loses a little information:  It is no longer possible to tell
168      (without laborious additional calculation) which input file dependency
169      caused a rebuild of a given target file.  A feature that could
170      report, "I'm rebuilding file X because it's out-of-date with respect
171      to file Y," would be good, but an digital-signature implementation of
172      such a feature is non-obvious.
174     </para>
175     </listitem>
177    </orderedlist>
179  </section>
181  <section>
182  <title>Remote execution</title>
184    <para>
186    The ability to use multiple build systems through remote execution
187    of tools would be good.  This should be implementable through the
188    &Job; class.  Construction environments would need modification
189    to specify build systems.
191    </para>
193  </section>
195  <section>
196  <title>Conditional builds</title>
198    <para>
200    The ability to check run-time conditions as suggested on the
201    sc-discuss mailing list ("build X only if: the machine is idle /
202    the file system has Y megabytes free space") would also be good,
203    but is not part of the current design.
205    </para>
207  </section>
209 </chapter>