5 Permission is hereby granted, free of charge, to any person obtaining
6 a copy of this software and associated documentation files (the
7 "Software"), to deal in the Software without restriction, including
8 without limitation the rights to use, copy, modify, merge, publish,
9 distribute, sublicense, and/or sell copies of the Software, and to
10 permit persons to whom the Software is furnished to do so, subject to
11 the following conditions:
13 The above copyright notice and this permission notice shall be included
14 in all copies or substantial portions of the Software.
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
17 KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18 WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 This document assumes that you already know how &SCons;
29 and that you want to learn how to work on the code.
34 <title>&SCons; Principles</title>
38 There are a few overriding principles
39 we try to live up to in designing and implementing &SCons:
46 <term>Correctness</term>
52 by default, &SCons; guarantees a correct build
53 even if it means sacrificing performance a little.
54 We strive to guarantee the build is correct
55 regardless of how the software being built is structured,
56 how it may have been written,
57 or how unusual the tools are that build it.
64 <term>Performance</term>
69 Given that the build is correct,
70 we try to make &SCons; build software
71 as quickly as possible.
72 In particular, wherever we may have needed to slow
73 down the default &SCons; behavior to guarantee a correct build,
74 we also try to make it easy to speed up &SCons;
75 through optimization options that let you trade off
76 guaranteed correctness in all end cases for
77 a speedier build in the usual cases.
84 <term>Convenience</term>
89 &SCons; tries to do as much for you out of the box as reasonable,
90 including detecting the right tools on your system
91 and using them correctly to build the software.
101 In a nutshell, we try hard to make &SCons; just
102 "do the right thing" and build software correctly,
103 with a minimum of hassles.
110 <title>Acknowledgements</title>
114 &SCons; would not exist without a lot of help
115 from a lot of people,
116 many of whom may not even be aware
117 that they helped or served as inspiration.
118 So in no particular order,
119 and at the risk of leaving out someone:
126 &SCons; owes a tremendous debt to Bob Sidebotham,
127 the original author of the classic Perl-based &Cons; tool
128 which Bob first released to the world back around 1996.
129 Bob's work on Cons classic provided the underlying architecture
130 and model of specifying a build configuration
131 using a real scripting language.
132 My real-world experience working on Cons
133 informed many of the design decisions in SCons,
134 including the improved parallel build support,
135 making Builder objects easily definable by users,
136 and separating the build engine from the wrapping interface.
142 Greg Wilson was instrumental in getting
143 &SCons; started as a real project
144 when he initiated the Software Carpentry design
145 competition in February 2000.
147 marrying the advantages of the Cons classic
148 architecture with the readability of Python
149 might have just stayed no more than a nice idea.
155 Thanks to Peter Miller
156 for his splendid change management system, &Aegis;,
157 which has provided the &SCons; project
158 with a robust development methodology from day one,
159 and which showed me how you could
160 integrate incremental regression tests into
161 a practical development cycle
162 (years before eXtreme Programming arrived on the scene).
168 And last, thanks to Guido van Rossum
169 for his elegant scripting language,
170 which is the basis not only for the &SCons; implementation,
171 but for the interface itself.