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 - The SConsignFile() function now uses an internally-supplied
31 SCons.dblite module as the default DB scheme for the .sconsign file.
32 If you are using the SConsignFile() function without an explicitly
33 specified dbm_module argument, this will cause all of your targets
34 to be recompiled the first time you use SCons 0.96. To preserve the
35 previous behavior, specify the "anydbm" module explicitly:
38 SConsignFile('.sconsign_file_name', anydbm)
40 - The internal Scanner.add_skey() method longer works for the default
41 scanners, which now use construction variables to hold their lists
42 of suffixes. If you had a custom Tool specification that was
43 reaching into the internals in this way to add a suffix to one of
44 the following scanner, you must now add the suffix to a construction
45 environment through which you plan to call the scanner, as follows:
48 CScan.add_skey('.x') => env.Append(CPPSUFFIXES = ['.x'])
49 DScan.add_skey('.x') => env.Append(DSUFFIXES = ['.x'])
50 FortranScan.add_skey('.x') => env.Append(FORTRANSUFFIXES = ['.x'])
52 - The behavior of the env.Append() and env.Prepend() methods has
53 changed when appending a string value to a UserList, or vice versa.
54 They now behave like normal Python addition of a string to
55 a UserList. Given an initialization and an env.Append() call like:
57 env = Environment(VAR1=UserList(['foo']), VAR2='foo')
58 env.Append(VAR1='bar', VAR2=UserList(['bar'])
60 The resulting values of $VAR1 and $VAR2 will now be ['foo', 'b',
61 'a', 'r'] and ['f', 'o', 'o', 'bar'], respectively. This is because
62 Python UserList objects treat strings as sequences of letters when
63 adding them to the value of the UserList.
65 The old behavior of yielding $VAR1 and $VAR2 values of ['foo',
66 'bar'] when either variable is a UserList object now requires that
67 the string variables be enclosed in a list:
69 env = Environment(VAR1=UserList(['foo']), VAR2=['foo'])
70 env.Append(VAR1='bar', VAR2=UserList(['bar']))
72 Note that the SCons behavior when appending to normal lists has
73 *not* changed, and the behavior of all of the default values that
74 SCons uses to initialize all construction variables has *not*
75 changed. This change *only* affects any cases where you explicitly
76 use UserList objects to initialize or append to a variable.
78 Please note the following important changes since release 0.94:
80 - The internal Python function used by the Zip Builder in Python
81 releases 1.6 or later now compresses the resulting .zip file
82 by default. The old behavior of creating an uncompressed file
83 may be preserved by setting the new ZIPCOMPRESSION construction
84 variable to 0 (or zipfile.ZIP_STORED, if you import the
85 underlying zipfile module).
87 - The "overrides" keyword argument to calls to the Builder() function
88 used to create new Builder objects has been deprecated and will
89 be removed in a future release. The items in an "overrides"
90 dictionary should now be specified as keyword arguments:
92 # Old way, "overrides" is a dictionary:
93 Builder(action = 'cp $TDIR/$TARGET $SDIR/$SOURCE',
94 overrides = {'TDIR' : dir1, 'SDIR' : dir2})
96 # New way, items are specified as keyword arguments:
97 Builder(action = 'cp $TDIR/$TARGET $SDIR/$SOURCE',
98 TDIR = dir1, SDIR = dir2)
100 - The meaning of some of the values of the "mode" argument to
101 the SCons.Util.scons_subst() and SCons.Util.scons_subst_list()
102 functions have been swapped. The wrapper Environment.subst() and
103 Environment.subst_list() methods remain completely unchanged, so
104 this should have no external effect. (We've listed the change here
105 because it might cause a problem if you're reaching into the SCons
106 internals and calling either of these SCons.Util functions directly.)
108 Please note the following FUTURE changes that you may wish to prepare
111 - When compiling with Microsoft Visual Studio, SCons currently adds
112 the ATL and MFC directories to the INCLUDE and LIB environment
113 variables by default. This default behavior will be changed in
114 a future release; the current plan is to change it for the 0.97
115 release (next release).
117 Whether or not the ATL and MFC directories are added to these
118 environment variables is now controlled by a new MSVS_USE_MFC_DIRS
119 *construction* variable. Setting this variable to a non-zero
120 value when you initialize an Environment will ensure that these
121 directories will be included in your external path(s) even when
122 the default behavior changes:
124 env = Environment(MSVS_USE_MFC_DIRS = 1)
126 The MSVS_USE_MFC_DIRS variable may, of course, be set to 0 (or
127 None) to prevent SCons from adding the ATL and MFC directories to
128 the INCLUDE and LIB environment variables.
130 SCons is developed with an extensive regression test suite, and a
131 rigorous development methodology for continually improving that suite.
132 Because of this, SCons is of sufficient quality that you can use it
133 for real work. The "beta" status of the release reflects that we
134 still may change interfaces in future releases, which may require
135 modifications to your SConscript files. We strive to hold these
136 changes to a minimum.
138 Nevertheless, please heed the following disclaimers:
140 - Please report any bugs or other problems that you find to our bug
141 tracker at our SourceForge project page:
143 http://sourceforge.net/tracker/?func=add&group_id=30337&atid=398971
145 We have a reliable bug-fixing methodology already in place and
146 strive to respond to problems relatively quickly.
148 - Documentation is spottier than we'd like. You may need to dive
149 into the source code to figure out how to do something. Asking
150 questions on the scons-users mailing list is also welcome. We
151 will be addressing the documentation in upcoming releases, but
152 would be more than glad to have your assistance in correcting this
155 In particular, the "SCons Design" documentation on the SCons web
156 site is currently out of date, as we made significant changes to
157 portions of the interface as we figured out what worked and what
158 didn't during implementation.
160 - There may be performance issues. Improving SCons performance
161 is an ongoing priority. If you still find the performance
162 unacceptable, we would very much like to hear from you and learn
163 more about your configuration so we can optimize the right things.
165 - Error messages don't always exist where they'd be helpful.
166 Please let us know about any errors you ran into that would
167 have benefitted from a (more) descriptive message.
169 KNOWN PROBLEMS IN THIS RELEASE:
171 For a complete list of known problems, consult the SCons bug tracker
174 http://sourceforge.net/tracker/?atid=398971&group_id=30337&func=browse
176 - Support for parallel builds (-j) does not work on WIN32 systems
177 prior to *official* Python release 2.2 (not 2.2 pre-releases).
179 Prior to Python 2.2, there is a bug in Python's Win32
180 implementation such that when a thread spawns an external command,
181 it blocks all threads from running. This breaks the SCons
182 multithreading architecture used to support -j builds.
184 We have included a patch file, os_spawnv_fix.diff, that you can
185 use if you you want to fix your version of Python to support
186 parallel builds in SCons.
188 - Again, the "SCons Design" documentation on the SCons web
189 site is currently out of date. Take what you read there with a
192 - If a file is specified to be built in multiple ways, the last
193 processed builder specification overwrites all other builders,
196 - On Win32 systems, you must put a space between the redirection
197 characters < and >, and the specified files (or construction
198 variable expansions):
200 command < $SOURCE > $TARGET
202 If you don't supply a space (for example, "<$SOURCE"), SCons will
203 not recognize the redirection.
205 - People have reported problems with SCons not stopping a build when
206 an interrupt (CTRL+C) is received. A fix was checked in to 0.11
207 that should fix this behavior on many systems, but there are
208 issues with the underlying Python os.system() call that suggest
209 this fix does not work on all systems or in all circumstances.
210 We're working to try to find a universal solution.
212 - Modifying a construction environment in a subsidiary SConscript
213 file modifies the global environment.
215 - MSVC .res files are not rebuilt when icons change.
217 - The -c option does not clean up .sconsign files or directories
218 created as part of the build, and also does not clean up
219 SideEffect files (for example, Visual Studio .pdb files).
221 - Switching content signatures from "MD5" to "timestamp" and back
222 again can cause unusual errors. These errors can be cleared up by
223 removing all .sconsign files.
225 - When using multiple Repositories, changing the name of an include
226 file can cause an old version of the file to be used.
228 - There is currently no way to force use of a relative path (../*)
229 for directories outside the top-level SConstruct file.
231 - The Jar() Builder will, on its second or subsequent invocation,
232 package up the .sconsign files that SCons uses to track signatures.
233 You can work around this by using the SConsignFile() function
234 to collect all of the .sconsign information into a single file
235 outside of the directory being packaged by Jar().
237 - SCons does not currently have a way to detect that an intermediate
238 file has been corrupted from outside and should be rebuilt.
240 - Unicode characters in path names do not work in all circumstances.
242 - A stray source file in a BuildDir can prevent targets from being
243 (re)built when they should.
245 - SCons does not automatically rebuild LaTeX files when the file
246 has an undefined reference on the first build.
248 - SideEffect() files are not retrieved properly from a CacheDir(),
249 and can lead to a stack trace.
251 - Use of --implicit-cache with TargetSignatures('content') can,
252 for some changes, not rebuild a file when necessary.
254 - SCons does not currently automatically check out SConstruct or
255 SConscript files from SCCS, RCS or BitKeeper.
257 - The Command() global function (specified without a construction
258 environment) is broken.
260 - No support yet for the following planned command-line options:
262 -d -e -l --list-actions --list-derived --list-where
263 -o --override -p -r -R -w --write-filenames
264 -W --warn-undefined-variables
268 Thank you for your interest, and please let us know how we can help
269 improve SCons for your needs.
272 knight at baldmt dot com
273 http://www.baldmt.com/~knight/
275 With plenty of help from the SCons Development team: