3 <!ENTITY % scons SYSTEM "../scons.mod">
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>
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.
39 No build tools is perfect.
40 Here are some &SCons; issues that
41 do not yet have solutions.
46 <title>Interaction with SC-config</title>
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
63 <title>Interaction with test infrastructures</title>
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
76 SConscript('test/SConscript')</programlisting>
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
88 % sccons test</programlisting>
92 Would run all the automated test cases that depend on any changed
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
110 <title>Java dependencies</title>
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.
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
137 <title>Limitations of digital signature calculation</title>
141 In practice, calculating digital signatures of a file's contents is a
142 more robust mechanism than time stamps for determining what needs
147 <orderedlist numeration="arabic">
152 Developers used to the time stamp model of &Make; can initially
153 find digital signatures counter-intuitive. The assumption that:
156 % touch file.c</programlisting>
158 will cause a rebuild of <filename>file</filename> is strong...
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.
182 <title>Remote execution</title>
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.
196 <title>Conditional builds</title>
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.