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