Eliminate / replace remaining cPickle references in test scripts.
[scons.git] / www / index.html
1 <html>
2 <head>
3 </head>
4 <body>
5
6 <div class="h2 app" style="border-left: 0px" id="customcontent">
7
8 <h2>What is SCons?</h2>
9
10 <p>SCons is a next-generation, 
11 cross-platform, build tool.
12 Think of SCons as an improved
13 substitute for the classic
14 <tt>Make</tt> utility
15 with integrated functionality
16 similar to <tt>autoconf</tt>/<tt>automake</tt>
17 and compiler caches such as <tt>ccache</tt>.
18 </p>
19
20 <p>
21 Unlike build tools that invent their own mini-language
22 or wedge a scripting language onto some other
23 configuration file syntax,
24 SCons configuration files
25 are actually Python scripts.
26 The ability to script your build
27 gives you a tremendous amount of flexibility
28 to solve complicated build problems
29 in surprisingly small amounts of maintainable code.
30 </p>
31
32 <p>
33 In short, SCons is an easier, more reliable
34 and more flexible way to build software.
35 </p>
36
37 <!--
38
39 <h2><b>Goal</b></h2>
40
41 <p>The primary goal of The SCons Project
42 is to become the premiere enterprise-quality tool for
43 building cross-platform, multi-language software projects
44 by offering unparalleled <b>reliability</b> and <b>flexibility</b>
45 to software buildmasters and developers.
46 </p>
47
48 <p>
49 Yeah, yeah, every project has similar lofty mom-and-apple-pie goals,
50 blah, blah, blah...
51 So why is SCons any different?
52 Fair question.
53 If you go to our public home page at
54 <a href="http://www.scons.org/">http://www.scons.org</a>
55 you'll get the usual lists of
56 supported features and platforms, testimonials, etc.
57 But you're presumably at <emphasis>this</emphasis>
58 project page because you're interested in digging a little deeper.
59 So here are the <emphasis>philosophical viewpoints</emphasis>
60 that we think contribute to SCons being
61 a really distinctive software build tool:
62 </p>
63
64 <ul>
65
66 <li>
67 <strong>Software builds are getting more complicated, not less</strong>
68 <p>
69 The proliferation of programming languages and technologies
70 have led to increasingly difficult demands being
71 placed on traditional software build tools Make.
72 EVen if you stick to one language--a well-worn
73 and mature one like C, for example--the
74 differences between the various C tool chains
75 and how they behave on various platforms
76 make it a real challenge
77 to keep your software builds simple and reliable.
78 </p>
79 <p>
80 Consequently, SCons is a build tool
81 </p>
82 </li>
83
84 <li>
85 <strong>Effective software building is not a language design issue</strong>
86 <p>
87 There are a lot of build tools out there,
88 and it seems like a new one pops up every week
89 as someone gets the urge to fix some particularly
90 bad build problem that they're facing.
91 Most build tools have, historically,
92 invented some special configuration file format
93 to express dependencies and actions.
94 The problem is that by the time you take care of all
95 of the different ways people 
96 you really want to have the flexibility
97 that a scripting language gives:
98 loops, conditionals, real data structures, etc.
99 (It's interesting to note that the Ant community is
100 working hard on adding more scriptability to their
101 XML-based Ant files,
102 and James Duncan Davidson, Ant's creator,
103 is on record as saying that he'd use a scripting
104 language if he were doing it over again.)
105 </p>
106 <p>
107 </p>
108 <p>
109 Note that SCons is not completely pure in this regard.
110 </p>
111 </li>
112
113 <li>
114 <strong>You want to encapsulate software build complexity
115 so most developers don't even have to think about it</strong>
116 <pp>
117 XXX
118 </pp>
119 </li>
120
121 <li>
122 <strong>Overall, a reliable build that takes a little longer is
123 cheaper than a fast build that you can't rely on</strong>
124 <p>
125 This one is sometimes tough to swallow,
126 because we all want the build to be as quick as possible
127 when we're in that tight edit-build-debug development cycle.
128 The problem is that if you take shortcuts in how your
129 build tool manages the dependencies,
130 you waste time chasing phantom problems
131 that simply go away because you finally give up
132 and do a <tt>make clean; make</tt>.
133 </p>
134 </li>
135
136 <li>
137 <strong>Building software in multiple side-by-side variants is crucial
138 in a multi-platform world</strong>
139 <pp>
140 XXX
141 </pp>
142 </li>
143
144 </ul>
145
146 -->
147
148 <h2><b>SCons Features</b></h2>
149
150 <ul>
151
152 <li>
153 <strong>Configuration files are Python scripts</strong>
154 <p>
155 This provides much more flexibility for solving
156 difficult build problems
157 than traditional build tools.
158 </p>
159 </li>
160
161 <li>
162 <strong>Reliable, automatic dependency analysis</strong>
163 <p>
164 C, C++ and Fortran are scanned for dependencies,
165 eliminating the need for a separate <tt>make depend</tt> step
166 or a <tt>make clean</tt> to get all of the dependencies.
167 Avoids the time waste from debugging phantom problems
168 that mysteriously disappear after you
169 <tt>make clean; make</tt>.
170 Easily extended to scan for other languages or file types.
171 </p>
172 </li>
173
174 <li>
175 <strong>Built-in support for multiple languages</strong>
176 <p>
177 C, C++, D, Java, Fortran, Yacc, Lex, Qt and SWIG.
178 Can also build TeX and LaTeX documents.
179 Easily extended for other languages or file types.
180 </p>
181 </li>
182
183 <li>
184 <strong>Cross-platform</strong>
185 <p>
186 Known to work on Linux,
187 other POSIX systems (AIX, *BSD, HP/UX, IRIX, Solaris),
188 Windows (NT, 2000, XP),
189 Mac OS X,
190 and OS/2.
191 </p>
192 </li>
193
194 <li>
195 <strong>Fetch files from SCM systems or central directory trees</strong>
196 <p>
197 Built-in support for SCCS, RCS, CVS, BitKeeper and Perforce.
198 On-disk directory trees can be searched for source files
199 or pre-built target files.
200 </p>
201 </li>
202
203 <li>
204 <strong>Support for Microsoft Visual Studio .NET and 2005</strong>
205 <p>
206 Generates <tt>.dsp</tt> and <tt>.dsw</tt> files,
207 or <tt>.sln</tt> and <tt>.vcproj</tt> files,
208 from the same build configuration used to build on all platforms.
209 Allows Windows developers to do all the productive
210 point-and-click debugging they're used to
211 without having to maintain a separate build configuration
212 just for Windows.
213 </p>
214 </li>
215
216 <li>
217 <strong>Reliable detection of file changes using MD5 signatures</strong>
218 <p>
219 Use of traditional file timestamps instead of MD5 can be configured.
220 </p>
221 </li>
222
223 <li>
224 <strong>Parallel builds</strong>
225 <p>
226 Keeps up to N jobs running simultaneously regardless
227 of directory hierarchy.
228 </p>
229 </li>
230
231 <li>
232 <strong>Global view of dependencies</strong>
233 <p>
234 Simplifies builds by eliminating multiple passes
235 or reording targets to build everything correctly.
236 </p>
237 </li>
238
239 <li>
240 <strong>Multi-platform configuration (like <tt>Autoconf</tt>)</strong>
241 <p>
242 Support for finding <tt>#include</tt> files,
243 libraries, functions and <tt>typedef</tt> declarations.
244 </p>
245 </li>
246
247 <li>
248 <strong>Shared built-file cache</strong>
249 <p>
250 Speeds up multiple builds by allowing developers
251 to share pre-built targets
252 (like <tt>ccache</tt>, but for any type of target file,
253 not just C/C++ compilation).
254 </p>
255 </li>
256
257 </ul>
258
259 <!--
260
261 <h2></h2>
262
263 <p>What are the high-level assumptions or ground rules for the project?
264 </p>
265
266 <p>For example:
267 </p>
268
269 <ul>
270 <li> we will use programming language X on operating system Y for now.
271
272 <li>We will, or will not, consider certain functional areas like
273 internationalization, high security, concurrency, etc.  The list of
274 functional areas will depend on what you are trying to do.
275
276 <li>Try to keep this part short.
277 </ul>
278
279 -->
280
281 <h2>Future</h2>
282
283 See the <a href="roadmap.html">Roadmap</a> page.
284
285 </div>
286
287 </body>
288 </html>