2 # __FILE__ __REVISION__ __DATE__ __DEVELOPER__
5 SCons - a software construction tool
10 This is a beta release of SCons, a tool for building software (and other
11 files). SCons is implemented in Python, and its "configuration files"
12 are actually Python scripts, allowing you to use the full power of a
13 real scripting language to solve build problems. You do not, however,
14 need to know Python to use SCons effectively.
16 So that everyone using SCons can help each other learn how to use it
17 more effectively, please sign up for the scons-users mailing list at:
19 http://lists.sourceforge.net/lists/listinfo/scons-users
25 This is the seventh beta release of SCons. Please consult the
26 CHANGES.txt file for a list of specific changes since last release.
28 Please note the following important changes since release 0.95:
30 - All Builder calls (both built-in like Program(), Library(),
31 etc. and customer Builders) now always return a list of target
32 Nodes. If the Builder only builds one target, the Builder
33 call will now return a list containing that target Node, not
34 the target Node itself as it used to do.
36 This change should be invisibile to most normal uses of the
37 return values from Builder calls. It will cause an error if the
38 SConscript file was performing some direct manipulation of the
39 returned Node value. For example, an attempt to print the name
40 of a target returned by the Object() Builder:
42 target = Object('foo.c')
46 Will now need to access the first element in the list returned by
49 target = Object('foo.c')
53 This change was introduced to make the data type returned by Builder
54 calls consistent (always a list), regardless of platform or number
57 - The SConsignFile() function now uses an internally-supplied
58 SCons.dblite module as the default DB scheme for the .sconsign file.
59 If you are using the SConsignFile() function without an explicitly
60 specified dbm_module argument, this will cause all of your targets
61 to be recompiled the first time you use SCons 0.96. To preserve the
62 previous behavior, specify the "anydbm" module explicitly:
65 SConsignFile('.sconsign_file_name', anydbm)
67 - The internal format of .sconsign files has been changed. This might
68 cause warnings about "ignoring corrupt .sconsign files" and rebuilds
69 when you use SCons 0.96 for the first time in a tree that was
70 previously built with SCons 0.95 or earlier.
72 - The scan_check function that can be supplied to a custom Scanner now
73 must take two arguments, the Node to be checked and a construction
74 environment. It previously only used the Node as an argument.
76 - The internal Scanner.add_skey() method no longer works for the
77 default scanners, which now use construction variables to hold their
78 lists of suffixes. If you had a custom Tool specification that was
79 reaching into the internals in this way to add a suffix to one of
80 the following scanner, you must now add the suffix to a construction
81 environment through which you plan to call the scanner, as follows:
83 CScan.add_skey('.x') => env.Append(CPPSUFFIXES = ['.x'])
84 DScan.add_skey('.x') => env.Append(DSUFFIXES = ['.x'])
85 FortranScan.add_skey('.x') => env.Append(FORTRANSUFFIXES = ['.x'])
87 - The "node_factory" and "scanner" keyword arguments to the Builder()
88 function have been removed. In their place, the separate and more
89 flexible "target_factory," "source_factory," "target_scanner" and
90 "source scanner" keywords should be used instead.
92 - SCons now treats file "extensions" that contain all digits (for
93 example, "file.123") as part of the file basename, for easier
94 handling of version numbers in the names of shared libraries
95 and other files. Builders will now add their file extensions to
96 file names specified with all-digit extensions. If you need to
97 generate a file with an all-digit extension using a Builder that
98 adds a file extension, you can preserve the previous behavior by
99 wrapping the file name in a File() call.
101 - The behavior of the env.Append() and env.Prepend() methods has
102 changed when appending a string value to a UserList, or vice versa.
103 They now behave like normal Python addition of a string to
104 a UserList. Given an initialization and an env.Append() call like:
106 env = Environment(VAR1=UserList(['foo']), VAR2='foo')
107 env.Append(VAR1='bar', VAR2=UserList(['bar'])
109 The resulting values of $VAR1 and $VAR2 will now be ['foo', 'b',
110 'a', 'r'] and ['f', 'o', 'o', 'bar'], respectively. This is because
111 Python UserList objects treat strings as sequences of letters when
112 adding them to the value of the UserList.
114 The old behavior of yielding $VAR1 and $VAR2 values of ['foo',
115 'bar'] when either variable is a UserList object now requires that
116 the string variables be enclosed in a list:
118 env = Environment(VAR1=UserList(['foo']), VAR2=['foo'])
119 env.Append(VAR1='bar', VAR2=UserList(['bar']))
121 Note that the SCons behavior when appending to normal lists has
122 *not* changed, and the behavior of all of the default values that
123 SCons uses to initialize all construction variables has *not*
124 changed. This change *only* affects any cases where you explicitly
125 use UserList objects to initialize or append to a variable.
127 Please note the following important changes since release 0.94:
129 - The internal Python function used by the Zip Builder in Python
130 releases 1.6 or later now compresses the resulting .zip file
131 by default. The old behavior of creating an uncompressed file
132 may be preserved by setting the new ZIPCOMPRESSION construction
133 variable to 0 (or zipfile.ZIP_STORED, if you import the
134 underlying zipfile module).
136 - The "overrides" keyword argument to calls to the Builder() function
137 used to create new Builder objects has been deprecated and will
138 be removed in a future release. The items in an "overrides"
139 dictionary should now be specified as keyword arguments:
141 # Old way, "overrides" is a dictionary:
142 Builder(action = 'cp $TDIR/$TARGET $SDIR/$SOURCE',
143 overrides = {'TDIR' : dir1, 'SDIR' : dir2})
145 # New way, items are specified as keyword arguments:
146 Builder(action = 'cp $TDIR/$TARGET $SDIR/$SOURCE',
147 TDIR = dir1, SDIR = dir2)
149 - The meaning of some of the values of the "mode" argument to
150 the SCons.Util.scons_subst() and SCons.Util.scons_subst_list()
151 functions have been swapped. The wrapper Environment.subst() and
152 Environment.subst_list() methods remain completely unchanged, so
153 this should have no external effect. (We've listed the change here
154 because it might cause a problem if you're reaching into the SCons
155 internals and calling either of these SCons.Util functions directly.)
157 Please note the following FUTURE changes that you may wish to prepare
160 - When compiling with Microsoft Visual Studio, SCons currently adds
161 the ATL and MFC directories to the INCLUDE and LIB environment
162 variables by default. This default behavior will be changed in
163 a future release; the current plan is to change it for the 0.97
164 release (next release).
166 Whether or not the ATL and MFC directories are added to these
167 environment variables is now controlled by a new MSVS_USE_MFC_DIRS
168 *construction* variable. Setting this variable to a non-zero
169 value when you initialize an Environment will ensure that these
170 directories will be included in your external path(s) even when
171 the default behavior changes:
173 env = Environment(MSVS_USE_MFC_DIRS = 1)
175 The MSVS_USE_MFC_DIRS variable may, of course, be set to 0 (or
176 None) to prevent SCons from adding the ATL and MFC directories to
177 the INCLUDE and LIB environment variables.
179 SCons is developed with an extensive regression test suite, and a
180 rigorous development methodology for continually improving that suite.
181 Because of this, SCons is of sufficient quality that you can use it
182 for real work. The "beta" status of the release reflects that we
183 still may change interfaces in future releases, which may require
184 modifications to your SConscript files. We strive to hold these
185 changes to a minimum.
187 Nevertheless, please heed the following disclaimers:
189 - Please report any bugs or other problems that you find to our bug
190 tracker at our SourceForge project page:
192 http://sourceforge.net/tracker/?func=add&group_id=30337&atid=398971
194 We have a reliable bug-fixing methodology already in place and
195 strive to respond to problems relatively quickly.
197 - Documentation is spottier than we'd like. You may need to dive
198 into the source code to figure out how to do something. Asking
199 questions on the scons-users mailing list is also welcome. We
200 will be addressing the documentation in upcoming releases, but
201 would be more than glad to have your assistance in correcting this
204 In particular, the "SCons Design" documentation on the SCons web
205 site is currently out of date, as we made significant changes to
206 portions of the interface as we figured out what worked and what
207 didn't during implementation.
209 - There may be performance issues. Improving SCons performance
210 is an ongoing priority. If you still find the performance
211 unacceptable, we would very much like to hear from you and learn
212 more about your configuration so we can optimize the right things.
214 - Error messages don't always exist where they'd be helpful.
215 Please let us know about any errors you ran into that would
216 have benefitted from a (more) descriptive message.
218 KNOWN PROBLEMS IN THIS RELEASE:
220 For a complete list of known problems, consult the SCons bug tracker
223 http://sourceforge.net/tracker/?atid=398971&group_id=30337&func=browse
225 - Support for parallel builds (-j) does not work on WIN32 systems
226 prior to *official* Python release 2.2 (not 2.2 pre-releases).
228 Prior to Python 2.2, there is a bug in Python's Win32
229 implementation such that when a thread spawns an external command,
230 it blocks all threads from running. This breaks the SCons
231 multithreading architecture used to support -j builds.
233 We have included a patch file, os_spawnv_fix.diff, that you can
234 use if you you want to fix your version of Python to support
235 parallel builds in SCons.
237 - Again, the "SCons Design" documentation on the SCons web
238 site is currently out of date. Take what you read there with a
241 - If a file is specified to be built in multiple ways, the last
242 processed builder specification overwrites all other builders,
245 - On Win32 systems, you must put a space between the redirection
246 characters < and >, and the specified files (or construction
247 variable expansions):
249 command < $SOURCE > $TARGET
251 If you don't supply a space (for example, "<$SOURCE"), SCons will
252 not recognize the redirection.
254 - People have reported problems with SCons not stopping a build when
255 an interrupt (CTRL+C) is received. A fix was checked in to 0.11
256 that should fix this behavior on many systems, but there are
257 issues with the underlying Python os.system() call that suggest
258 this fix does not work on all systems or in all circumstances.
259 We're working to try to find a universal solution.
261 - Modifying a construction environment in a subsidiary SConscript
262 file modifies the global environment.
264 - MSVC .res files are not rebuilt when icons change.
266 - The -c option does not clean up .sconsign files or directories
267 created as part of the build, and also does not clean up
268 SideEffect files (for example, Visual Studio .pdb files).
270 - Switching content signatures from "MD5" to "timestamp" and back
271 again can cause unusual errors. These errors can be cleared up by
272 removing all .sconsign files.
274 - When using multiple Repositories, changing the name of an include
275 file can cause an old version of the file to be used.
277 - There is currently no way to force use of a relative path (../*)
278 for directories outside the top-level SConstruct file.
280 - The Jar() Builder will, on its second or subsequent invocation,
281 package up the .sconsign files that SCons uses to track signatures.
282 You can work around this by using the SConsignFile() function
283 to collect all of the .sconsign information into a single file
284 outside of the directory being packaged by Jar().
286 - SCons does not currently have a way to detect that an intermediate
287 file has been corrupted from outside and should be rebuilt.
289 - Unicode characters in path names do not work in all circumstances.
291 - A stray source file in a BuildDir can prevent targets from being
292 (re)built when they should.
294 - SCons does not automatically rebuild LaTeX files when the file
295 has an undefined reference on the first build.
297 - SideEffect() files are not retrieved properly from a CacheDir(),
298 and can lead to a stack trace.
300 - Use of --implicit-cache with TargetSignatures('content') can,
301 for some changes, not rebuild a file when necessary.
303 - SCons does not currently automatically check out SConstruct or
304 SConscript files from SCCS, RCS or BitKeeper.
306 - The Command() global function (specified without a construction
307 environment) is broken.
309 - No support yet for the following planned command-line options:
311 -d -e -l --list-actions --list-derived --list-where
312 -o --override -p -r -R -w --write-filenames
313 -W --warn-undefined-variables
317 Thank you for your interest, and please let us know how we can help
318 improve SCons for your needs.
321 knight at baldmt dot com
322 http://www.baldmt.com/~knight/
324 With plenty of help from the SCons Development team: