3 <!ENTITY % scons SYSTEM "../scons.mod">
7 <section id="sect-intro"
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>Introduction</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.
40 More than twenty years after its creation, the classic UNIX &Make;
41 utility and its descendants are still the dominant way in which
42 software is built. &Make; has maintained this position despite the
43 fact that the intervening years have revealed many
44 shortcomings of the &Make; model for building software:
53 The use of timestamps to decide when a file has been updated is
54 imprecise and prone to error, especially across distributed file
63 Builds of typical large software systems still take hours, if not
64 days, despite the tremendous advances in CPU and disk speeds over
73 &Make; maintains static definitions of dependencies in its
74 &Makefiles;. Much effort has been put into
75 utilities (<application>mkdepend</application>, <application>gcc
76 -M</application>) and schemes (<filename>Makefile.d</filename>
77 files) to try to keep &Makefile; dependencies up-to-date,
78 but these only confirm that &Make;'s static dependencies are
87 The standard recursive use of &Make; for build hierarchies leads
88 to incomplete dependency graphs, which must be overcome by
89 manually changing the order in which directories are built, or
90 through the use of multiple build passes.
99 One need only look at the plethora of helper and wrapper utilities
100 (automake, easymake, imake, jmake, makeLib, maketool, mkmed, shake,
101 SMake, TMAKE) and complete alternatives to &Make; (Ant, bake, bau,
102 bras, Cake, Cons, Cook, Jam, jmk, jus, makeme, mash, MK, nmake, Odin,
103 VMake) that have been created over the years to realize that vanilla
104 &Make; is not satisfying everyone's build requirements. So why Yet
110 <title>Enter Software Carpentry</title>
114 Most of the build tools just mentioned
115 were written by programmers and for
116 programmers. The fact that most programmer-friendly
117 utilities do a poor job of fulfilling the needs
118 of non-programmers prompted Greg Wilson to
119 organize the Software Carpentry competition in January 2000.
120 Software Carpentry was an
121 open design contest with the express goal of producing a set of
122 next-generation utilities, including a build tool, that would be
126 but also to computer <emphasis>users</emphasis>
127 such as physical scientists.
133 The key to this usability would be that all of
134 these utilities, including the build tool, would be
136 This provided the catalyst for actually
138 that had been floating around one of the more
139 intriguing &Make; alternatives,
140 a Perl utility called &Cons;.
141 What if the friendlier syntax of Python
142 could be married to the
143 architectural advantages of &Cons;?
149 The resulting merged design, at that time named &ScCons;,
150 won the Software Carpentry build tool competition. CodeSourcery (by
151 then the administrators of the competition) ultimately decided not to
152 fund development of the build tool, but the seed had been planted and the
153 design had taken root.
164 It helps to know something about &Cons;.
165 &Cons; was first released in 1996 by Bob Sidebotham,
166 then an employee of Fore Systems,
167 and it has a number of
168 distinctive features that set it apart from most &Make;-alikes:
177 &Cons; "configuration files" are not Yet Another
178 invented mini-language, but are actually <emphasis>Perl
179 scripts</emphasis>, which means the full power and flexibility of
180 a real scripting language can be applied to build problems.
188 &Cons; builds everything from a single process at the top of the
189 source tree, with a global view of the dependencies.
197 &Cons; scans files automatically for dependencies such as
198 files specified on <literal>#include</literal> lines.
206 &Cons; decides if a file was out-of-date by using MD5 checksums of
207 the contents of files, not timestamps.
216 Despite all of these intriguing architectural features, the great
217 strength of &Cons;—being written in Perl—was also one of
218 its weaknesses, turning away many potential users due to the
219 (real or perceived) steep learning curve of Perl.
226 <title>&SCons;</title>
230 Through the &ScCons; contest entry,
231 &SCons; is the direct descendant of the &Cons; architecture,
233 under active, supported development with a growing body of
234 users. Its first release was 13 December 2001, under the simple and
235 non-restrictive MIT license, and from the outset, the goal of the
236 members of the &SCons; project has been to deliver a stable, reliable
237 tool that can be used for industrial-strength software builds.
243 The rest of this paper will give an overview of the &SCons; design
244 (including its architecture and interface), describe the development
245 methodology used, and discuss future directions for &SCons;.