Eliminate / replace remaining cPickle references in test scripts.
[scons.git] / doc / user / preface.xml
1 <!--
2
3   __COPYRIGHT__
4
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:
12
13   The above copyright notice and this permission notice shall be included
14   in all copies or substantial portions of the Software.
15
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.
23
24 -->
25
26   <para>
27
28   Thank you for taking the time to read about &SCons;.
29   &SCons; is a next-generation
30   software construction tool,
31   or make tool--that is, a software utility
32   for building software (or other files)
33   and keeping built software up-to-date
34   whenever the underlying input files change.
35
36   </para>
37
38   <para>
39
40   The most distinctive thing about &SCons;
41   is that its configuration files are
42   actually <emphasis>scripts</emphasis>,
43   written in the &Python; programming language.
44   This is in contrast to most alternative build tools,
45   which typically invent a new language to
46   configure the build.
47   &SCons; still has a learning curve, of course,
48   because you have to know what functions to call
49   to set up your build properly,
50   but the underlying syntax used should be familiar
51   to anyone who has ever looked at a Python script.
52
53   </para>
54
55   <para>
56
57   Paradoxically,
58   using Python as the configuration file format
59   makes &SCons;
60   <emphasis>easier</emphasis>
61   for non-programmers to learn
62   than the cryptic languages of other build tools,
63   which are usually invented by programmers for other programmers.
64   This is in no small part due to the
65   consistency and readability that are hallmarks of Python.
66   It just so happens that making a real, live
67   scripting language the basis for the
68   configuration files
69   makes it a snap for more accomplished programmers
70   to do more complicated things with builds,
71   as necessary.
72
73   </para>
74
75   <!--
76
77   <section>
78   <title>Why &SCons;?</title>
79
80     <para>
81
82     &SCons; is a response to a perennial problem:
83     building software is harder than it should be.
84     In a nutshell:  the old, reliable model of the
85     venerable and ubiquitous &Make; program
86     has had a hard time keeping up with
87     how complicated building software has become.
88     The fact that &Make; has kept up as well as it has is impressive,
89     and a testament to how the simplicity.
90     But anyone who has wrestled with &Automake; and &Autoconf;
91     to try to guarantee that a bit of software
92     will build correctly on multiple platforms
93     can tell you that it takes a lot of work to get right.
94
95     </para>
96
97   </section>
98
99   -->
100
101   <section>
102   <title>&SCons; Principles</title>
103
104     <para>
105
106     There are a few overriding principles
107     we try to live up to in designing and implementing &SCons;:
108
109     </para>
110
111     <variablelist>
112
113       <varlistentry>
114       <term>Correctness</term>
115
116       <listitem>
117       <para>
118
119       First and foremost,
120       by default, &SCons; guarantees a correct build
121       even if it means sacrificing performance a little.
122       We strive to guarantee the build is correct
123       regardless of how the software being built is structured,
124       how it may have been written,
125       or how unusual the tools are that build it.
126
127       </para>
128       </listitem>
129       </varlistentry>
130
131       <varlistentry>
132       <term>Performance</term>
133
134       <listitem>
135       <para>
136
137       Given that the build is correct,
138       we try to make &SCons; build software
139       as quickly as possible.
140       In particular, wherever we may have needed to slow
141       down the default &SCons; behavior to guarantee a correct build,
142       we also try to make it easy to speed up &SCons;
143       through optimization options that let you trade off
144       guaranteed correctness in all end cases for
145       a speedier build in the usual cases.
146
147       </para>
148       </listitem>
149       </varlistentry>
150
151       <varlistentry>
152       <term>Convenience</term>
153
154       <listitem>
155       <para>
156
157       &SCons; tries to do as much for you out of the box as reasonable,
158       including detecting the right tools on your system
159       and using them correctly to build the software.
160
161       </para>
162       </listitem>
163       </varlistentry>
164
165     </variablelist>
166
167     <para>
168
169     In a nutshell, we try hard to make &SCons; just
170     "do the right thing" and build software correctly,
171     with a minimum of hassles.
172
173     </para>
174
175   </section>
176
177   <!--
178
179   <section>
180   <title>History</title>
181
182     <para>
183
184     &SCons; originated with a design
185     that was submitted to the Software Carpentry
186     design competition in 2000.
187
188     </para>
189
190     <para>
191
192     &SCons; is the direct descendant
193     of a Perl utility called &Cons;.
194     &Cons; in turn based some of its ideas on &Jam;,
195     a build tool from Perforce Systems.
196
197     </para>
198
199     <para>
200
201     XXX history of SCons
202
203     </para>
204
205   </section>
206
207   -->
208
209   <!--
210
211   <section>
212   <title>Conventions</title>
213
214     <para>
215
216     XXX conventions used in this manual
217
218     </para>
219
220   </section>
221
222   -->
223
224   <section>
225   <title>A Caveat About This Guide's Completeness</title>
226
227   <para>
228
229   One word of warning as you read through this Guide:
230   Like too much Open Source software out there,
231   the &SCons; documentation isn't always
232   kept up-to-date with the available features.
233   In other words,
234   there's a lot that &SCons; can do that
235   isn't yet covered in this User's Guide.
236   (Come to think of it,
237   that also describes a lot of proprietary software, doesn't it?)
238
239   </para>
240
241   <para>
242
243   Although this User's Guide isn't as complete as we'd like it to be,
244   our development process does emphasize
245   making sure that the &SCons; man page is kept up-to-date
246   with new features.
247   So if you're trying to figure out how to do something
248   that &SCons; supports
249   but can't find enough (or any) information here,
250   it would be worth your while to look
251   at the man page to see if the information is covered there.
252   And if you do,
253   maybe you'd even consider contributing
254   a section to the User's Guide
255   so the next person looking for
256   that information won't have to
257   go through the same thing...?
258
259   </para>
260
261   </section>
262
263   <section>
264   <title>Acknowledgements</title>
265
266     <para>
267
268     &SCons; would not exist without a lot of help
269     from a lot of people,
270     many of whom may not even be aware
271     that they helped or served as inspiration.
272     So in no particular order,
273     and at the risk of leaving out someone:
274
275     </para>
276
277     <para>
278
279     First and foremost,
280     &SCons; owes a tremendous debt to Bob Sidebotham,
281     the original author of the classic Perl-based &Cons; tool
282     which Bob first released to the world back around 1996.
283     Bob's work on Cons classic provided the underlying architecture
284     and model of specifying a build configuration
285     using a real scripting language.
286     My real-world experience working on Cons
287     informed many of the design decisions in SCons,
288     including the improved parallel build support,
289     making Builder objects easily definable by users,
290     and separating the build engine from the wrapping interface.
291
292     </para>
293
294     <para>
295
296     Greg Wilson was instrumental in getting
297     &SCons; started as a real project
298     when he initiated the Software Carpentry design
299     competition in February 2000.
300     Without that nudge,
301     marrying the advantages of the Cons classic
302     architecture with the readability of Python
303     might have just stayed no more than a nice idea.
304
305     </para>
306
307     <para>
308
309     The entire &SCons; team have been
310     absolutely wonderful to work with,
311     and &SCons; would be nowhere near as useful a
312     tool without the energy, enthusiasm
313     and time people have contributed over the past few years.
314     The "core team"
315     of Chad Austin, Anthony Roach,
316     Bill Deegan, Charles Crain, Steve Leblanc, Greg Noel,
317     Gary Oberbrunner, Greg Spencer and Christoph Wiedemann
318     have been great about reviewing my (and other) changes
319     and catching problems before they get in the code base.
320     Of particular technical note:
321     Anthony's outstanding and innovative work on the tasking engine
322     has given &SCons; a vastly superior parallel build model;
323     Charles has been the master of the crucial Node infrastructure;
324     Christoph's work on the Configure infrastructure
325     has added crucial Autoconf-like functionality;
326     and Greg has provided excellent support
327     for Microsoft Visual Studio.
328
329     </para>
330
331     <para>
332
333     Special thanks to David Snopek for contributing
334     his underlying "Autoscons" code that formed
335     the basis of Christoph's work with the Configure functionality.
336     David was extremely generous in making
337     this code available to &SCons;,
338     given that he initially released it under the GPL
339     and &SCons; is released under a less-restrictive MIT-style license.
340
341     </para>
342
343     <!--
344
345     <para>
346
347     &SCons; has received contributions
348     from many other people, of course:
349     Matt Balvin (extending long command-line support on Windows),
350     Allen Bierbaum (extensions and fixes to Options),
351     Steve Christensen (help text sorting and function action signature fixes),
352     Michael Cook (avoiding losing signal bits from executed commands),
353     Derrick 'dman' Hudson (),
354     Alex Jacques (work on the Windows scons.bat file),
355     Stephen Kennedy (performance enhancements),
356     Lachlan O'Dea (SharedObject() support for masm
357     and normalized paths for the WhereIs() function),
358     Damyan Pepper (keeping output like Make),
359     Jeff Petkau (significant fixes for CacheDir and other areas),
360     Stefan Reichor (Ghostscript support),
361     Zed Shaw (Append() and Replace() environment methods),
362     Terrel Shumway (build and test fixes, as well as the SCons Wiki)
363     and
364     sam th (dynamic checks for utilities).
365
366     </para>
367
368     -->
369
370     <para>
371
372     Thanks to Peter Miller
373     for his splendid change management system, &Aegis;,
374     which has provided the &SCons; project
375     with a robust development methodology from day one,
376     and which showed me how you could
377     integrate incremental regression tests into
378     a practical development cycle
379     (years before eXtreme Programming arrived on the scene).
380
381     </para>
382
383     <para>
384
385     And last, thanks to Guido van Rossum
386     for his elegant scripting language,
387     which is the basis not only for the &SCons; implementation,
388     but for the interface itself.
389
390     </para>
391
392   </section>
393
394   <section>
395   <title>Contact</title>
396
397     <para>
398
399     The best way to contact people involved with SCons,
400     including the author,
401     is through the SCons mailing lists.
402
403     </para>
404
405     <para>
406
407     If you want to ask general questions about how to use &SCons;
408     send email to &scons-users;.
409
410     </para>
411
412     <para>
413
414     If you want to contact the &SCons; development community directly,
415     send email to &scons-devel;.
416
417     </para>
418
419     <para>
420
421     If you want to receive announcements about &SCons;,
422     join the low-volume &scons-announce; mailing list.
423
424     </para>
425
426   </section>