Add f90 and f95 to the list of Fortran compilers searched by default.
[scons.git] / src / RELEASE.txt
1 # __COPYRIGHT__
2 # __FILE__ __REVISION__ __DATE__ __DEVELOPER__
3
4
5                  SCons - a software construction tool
6
7                             Release Notes
8
9
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.
15
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:
18
19     http://lists.sourceforge.net/lists/listinfo/scons-users
20
21
22
23 RELEASE 0.97 - XXX
24
25   This is a pre-release for testing the eighth beta release of SCons.
26   Please consult the CHANGES.txt file for a list of specific changes
27   since last release.
28
29   Please note the following important changes since release 0.96:
30
31     --  DIRECTORY TREES ARE NO LONGER AUTOMATICALLY SCANNED FOR CHANGES
32
33         Custom builders and Command() calls that accept directories as
34         source arguments no longer scan entire on-disk directory trees
35         by default.  This means that their targets will not be
36         automatically rebuilt if a file changes on disk, and SCons does
37         *not* already know about.  Note that the targets will still be
38         rebuilt correctly if a file changes that SCons already knows
39         about due to a Builder or other call.
40
41         The existing behavior of scanning on-disk directory trees for
42         any changed file can be maintained by passing the new DirScanner
43         global directory scanner as the source_scanner keyword argument
44         to the Builder call:
45
46             bld = Builder("build < $SOURCE > $TARGET",
47                           source_scanner = DirScanner)
48
49         The same keyword argument can also be supplied to any Command()
50         calls that need to scan directory trees on-disk for changed files:
51
52             env.Command("archive.out", "directory",
53                         "archiver -o $TARGET $SOURCE",
54                         source_scanner = DirScanner)
55
56         This change was made because scanning directories by default
57         could cause huge slowdowns if a configurable directory like /usr
58         or /usr/local was passed as the source to a Builder or Command()
59         call, in which case SCons would scan the entire directory tree.
60
61     --  SIGNATURES ARE NOW STORED IN AN SConsignFile() BY DEFAULT,
62         CAUSING LIKELY REBUILDS; SPECIAL NOTE CONCERNING INTERACTION
63         WITH REPOSITORIES
64
65         The default behavior has been changed to store signature
66         information in a single .sconsign.dblite file in the top-level
67         SConstruct file.  This will cause rebuilds on upgrade to 0.97,
68         unless you were already calling the SConsignFile() function in
69         your SConscript files.
70
71         The previous default behavior was to store signature information
72         in a .sconsign file in each directory that contained target
73         files that SCons knew about.  The old behavior may be preserved
74         by specifying:
75
76               SConsignFile(None)
77
78         in any SConscript file.
79
80         If you are using the Repository feature, are not already using
81         the SConsignFile() function in your build, you *must* add
82         SConsignFile(None) to your build to keep interoperating with an
83         existing Repository that uses the old behavior of a .sconsign
84         file in each directory.  Alternatively, you can rebuild the
85         Repository with the new default behavior.
86
87     --  OTHER SIGNATURE CHANGES WILL CAUSE LIKELY REBUILDS AFTER UPGRADE
88
89         This release adds several changes to the signature mechanism that
90         will cause SCons to rebuild most configurations after upgrading
91         (and when switching back to an earlier release from 0.97).
92         These changes are:
93
94           --  NORMALIZED PATHS IN SConsignFile() DATABASES ON WINDOWS
95
96               When using an SConsignFile() database, instead of individual
97               .sconsign files in each directory, the path names are
98               stored in normalized form with / (forward slash) separating
99               the elements.  This may cause rebuilds on Windows systems
100               with hierarchical configurations.
101
102           --  STORED DEPENDENCY PATHS ARE NOW RELATIVE TO THE TARGET
103
104               SCons used to store the paths of all source files and
105               dependencies relative to the top-level SConstruct directory.
106               It now stores them relative to the directory of the
107               associated target file.  This makes it possible to use
108               content signatures to subdivide a dependency tree without
109               causing unnecessary rebuilds due to an intermediate file in
110               one build being treated as a source file in a nother build.
111
112               This a step towards making it possible to write a hierarchy
113               of SConstruct files that allow developers to build just
114               one portion of a tree wherever there's an SConstruct file.
115               (Note that this would still require some specific code at
116               the top of each SConstruct file, but we hope to make this
117               an easier/more naturally supported thing in the future.)
118
119           --  PYTHON FUNCTION ACTION SIGNATURES HAVE CHANGED TO AVOID
120               FUTURE REBUILDS AND REBUILDS BETWEEN PYTHON VERSIONS
121
122               SCons Actions for Python functions use the functions byte
123               code to generate their signature.  The byte code in older
124               versions of Python includes indications of the line numbers
125               at which the function's code appeared in its original
126               source file, which means that changes in the location of
127               an otherwise unmodified Python function would trigger
128               rebuilds.  The line number byte codes are now removed
129               from the signature, which will cause any targets built by
130               Python function Actions (including various pre-supplied
131               SCons Actions) be rebuilt.
132
133           --  REMOVED CONVERSION FROM PRE-0.96 .sconsign FORMATS
134
135               Because this release involves so many other signature
136               changes that cause rebuilds, the support for automatically
137               converting signature information from .sconsign files
138               written by SCons versions prior to 0.96 has been removed.
139
140           --  ORDER OF -o FLAGS ON CERTAIN LINK COMMAND LINES HAS CHANGED
141
142               The -o flag that specifies an output file has been moved on
143               certain linker command lines to place it consistently after
144               the link command itself.  This will cause recompilation
145               of target files created by these changed lines.
146
147     --  F95 AND F90 COMPILERS ARE NOW PREFERRED OVER F77
148
149         SCons now searches for Fortran 95 and Fortran 90 compilers first
150         in preference to Fortran 77.  This may result in a different
151         Fortran compiler being used by default, although as Fortran 95 and
152         Fortran 90 are backwards compatible with Fortran 77, this should
153         not cause problems for standards-compliant Fortran programs.
154         On systems that have multiple versions of Fortran installed,
155         the Fortran 77 compiler may be explicitly selected by specifying
156         it when creating the construction environment:
157
158             env = Environment(tools = ['default', 'f77'])
159
160     --  CACHED Configure() RESULTS ARE STORED IN A DIFFERENT FILE
161
162         The Configure() subsystem now stores its cached results in a
163         different file.  This may cause configuration tests to be re-run
164         the first time after you install 0.97.
165
166     --  setup.py INSTALLS VERSION-NUMBERED SCRIPTS AND DIRS BY DEFAULT
167
168         The setup.py script has been changed to always install SCons in
169         a version-numbered directory (e.g. /usr/local/lib/scons-0.97
170         or D:\Python23\scons-0.97) and with a version-numbered script
171         name (scons-0.97) in addition to the usual installation of an
172         "scons" script name.  A number of new setup.py options allow
173         control over what does or does not get installed, and where.
174         See the README.txt or README files for additional information.
175
176     --  setup.py NOW INSTALLS MAN PAGES ON UNIX AND Linux SYSTEMS
177
178         The SCons setup.py script now installs the "scons.1" and
179         "sconsign.1" man pages on UNIX and Linux systems.  A
180         new --no-install-man
181
182     --  ParseConfig() METHOD ADDS LIBRARY FILE NAMES TO THE $LIBS VARIABLE
183
184         The ParseConfig() method now adds library file names returned
185         by the specified *-config command to the $LIBS construction
186         variable, instead of returning them (the same way it handles
187         the -l option).
188
189     --  ParseConfig() METHOD DOESN'T ADD DUPLICATES TO CONSTRUCTION VARIABLES
190
191         By default, the ParseConfig() method now avoids adding duplicate
192         entries to construction variables.  The old behavior may be
193         specified using a new "unique=0" keyword argument.
194
195     --  WINDOWS %TEMP% and %TMP% VARIABLES ARE PROPAGATED AUTOMATICALLY
196
197         The %TEMP% and %TMP% external environment variables are now
198         propagated automatically to the command execution environment on
199         Windows systems.
200
201     --  VISUAL STUDIO ATL AND MFC DIRECTORIES NOT ADDED BY DEFAULT
202
203         When compiling with Microsoft Visual Studio, SCons no longer
204         adds the ATL and MFC directories to the INCLUDE and LIB
205         environment variables by default.  If you want these directories
206         included in your environment variables, you should now set the
207         $MSVS_USE_MFC_DIRS *construction* variable when initializing
208         your environment:
209
210             env = Environment(MSVS_USE_MFC_DIRS = 1)
211
212     --  BUILDERS RETURN A LIST-LIKE OBJECT, NOT A REGULAR LIST
213
214         Builders calls now return an object that behaves like a list
215         (and which provides some other functionality), not an underlying
216         Python list.  In general, this should not cause any problems,
217         although it introduces a subtle change in the following behavior:
218
219                 obj += env.Object('foo.c')
220
221         If "obj" is a list, Python will no longer update the "obj" in
222         place, because the return value from env.Object() is no longer
223         the same type.  Python will instead allocate a new object and
224         assign the local variable "obj" to it.  If "obj" is defined in
225         an SConscript file that calls another SConscript file containing
226         the above code, "obj" in the first SConscript file will not
227         contain the objects.
228
229         You can guarantee that a list will be updated in place regardless
230         of which SConscript file defines it and which adds to it by
231         using the list append() method as follows:
232
233                 obj.append(env.Object('foo.c'))
234
235     --  OUTPUT OF Configure() SUBSYSTEM CHANGED SLIGHTLY
236
237         The Configure() subsystem now reports tests results as "yes" and
238         "no" instead of "ok" and "failed."  This might interfere with any
239         scripts that automatically parse the Configure() output from SCons.
240
241     --  DEPRECATED GLOBAL FUNCTIONS HAVE BEEN REMOVED
242
243         The following deprecated global functions have been removed:
244         ParseConfig(), SetBuildSignatureType(), SetContentSignatureType(),
245         SetJobs() and GetJobs().
246
247     --  DEPRECATED "validater" KEYWORD HAS BEEN REMOVED
248
249         The deprecated "validater" keyword to the Options.Add() method
250         has been removed.
251
252   Please note the following important changes since release 0.95:
253
254     --  BUILDERS NOW ALWAYS RETURN A LIST OF TARGETS
255
256         All Builder calls (both built-in like Program(), Library(),
257         etc. and customer Builders) now always return a list of target
258         Nodes.   If the Builder only builds one target, the Builder
259         call will now return a list containing that target Node, not
260         the target Node itself as it used to do.
261
262         This change should be invisibile to most normal uses of the
263         return values from Builder calls.  It will cause an error if the
264         SConscript file was performing some direct manipulation of the
265         returned Node value.  For example, an attempt to print the name
266         of a target returned by the Object() Builder:
267
268               target = Object('foo.c')
269               # OLD WAY
270               print target
271
272         Will now need to access the first element in the list returned by
273         the Object() call:
274
275               target = Object('foo.c')
276               # NEW AY
277               print target[0]
278
279         This change was introduced to make the data type returned by Builder
280         calls consistent (always a list), regardless of platform or number
281         of returned targets.
282
283     --  DEFAULT SConsignFile() DATABASE SCHEME HAS CHANGED
284
285         The SConsignFile() function now uses an internally-supplied
286         SCons.dblite module as the default DB scheme for the .sconsign file.
287         If you are using the SConsignFile() function without an explicitly
288         specified dbm_module argument, this will cause all of your targets
289         to be recompiled the first time you use SCons 0.96.  To preserve the
290         previous behavior, specify the "anydbm" module explicitly:
291
292             import anydbm
293             SConsignFile('.sconsign_file_name', anydbm)
294
295     --  INTERNAL .sconsign FILE FORMAT HAS CHANGED
296
297         The internal format of .sconsign files has been changed.  This might
298         cause warnings about "ignoring corrupt .sconsign files" and rebuilds
299         when you use SCons 0.96 for the first time in a tree that was
300         previously built with SCons 0.95 or earlier.
301
302     --  INTERFACE CHANGE OF scan_check FUNCTION TO CUSTOM SCANNERS
303
304         The scan_check function that can be supplied to a custom Scanner now
305         must take two arguments, the Node to be checked and a construction
306         environment.  It previously only used the Node as an argument.
307
308     --  DEFAULT SCANNERS NO LONGER HEED INTERNAL Scanner.add_skey() METHOD
309
310         The internal Scanner.add_skey() method no longer works for the
311         default scanners, which now use construction variables to hold their
312         lists of suffixes.  If you had a custom Tool specification that was
313         reaching into the internals in this way to add a suffix to one of
314         the following scanner, you must now add the suffix to a construction
315         environment through which you plan to call the scanner, as follows:
316
317             CScan.add_skey('.x')       => env.Append(CPPSUFFIXES = ['.x'])
318             DScan.add_skey('.x')       => env.Append(DSUFFIXES = ['.x'])
319             FortranScan.add_skey('.x') => env.Append(FORTRANSUFFIXES = ['.x'])
320
321     --  KEYWORD ARGUMENTS TO Builder() HAVE BEEN REMOVED
322
323         The "node_factory" and "scanner" keyword arguments to the Builder()
324         function have been removed.  In their place, the separate and more
325         flexible "target_factory," "source_factory," "target_scanner" and
326         "source scanner" keywords should be used instead.
327
328     --  ALL-DIGIT FILE "EXTENSIONS" ARE NOW PART OF THE FILE BASENAME
329
330         SCons now treats file "extensions" that contain all digits (for
331         example, "file.123") as part of the file basename, for easier
332         handling of version numbers in the names of shared libraries
333         and other files.  Builders will now add their file extensions to
334         file names specified with all-digit extensions.  If you need to
335         generate a file with an all-digit extension using a Builder that
336         adds a file extension, you can preserve the previous behavior by
337         wrapping the file name in a File() call.
338
339     --  Append()/Prepend() METHODS CHANGED WHEN USING UserList OBJECTS
340
341         The behavior of the env.Append() and env.Prepend() methods has
342         changed when appending a string value to a UserList, or vice versa.
343         They now behave like normal Python addition of a string to
344         a UserList.  Given an initialization and an env.Append() call like:
345
346             env = Environment(VAR1=UserList(['foo']), VAR2='foo')
347             env.Append(VAR1='bar', VAR2=UserList(['bar'])
348
349         The resulting values of $VAR1 and $VAR2 will now be ['foo', 'b',
350         'a', 'r'] and ['f', 'o', 'o', 'bar'], respectively.  This is because
351         Python UserList objects treat strings as sequences of letters when
352         adding them to the value of the UserList.
353
354         The old behavior of yielding $VAR1 and $VAR2 values of ['foo',
355         'bar'] when either variable is a UserList object now requires that
356         the string variables be enclosed in a list:
357
358             env = Environment(VAR1=UserList(['foo']), VAR2=['foo'])
359             env.Append(VAR1='bar', VAR2=UserList(['bar']))
360
361         Note that the SCons behavior when appending to normal lists has
362         *not* changed, and the behavior of all of the default values that
363         SCons uses to initialize all construction variables has *not*
364         changed.  This change *only* affects any cases where you explicitly
365         use UserList objects to initialize or append to a variable.
366
367   Please note the following planned, future changes:
368
369     --  SCANNER NAMES HAVE BEEN DEPRECATED AND WILL BE REMOVED
370
371         Several internal variable names in SCons.Defaults for various
372         pre-made default Scanner objects have been deprecated and will
373         be removed in a future revision.  In their place are several new
374         global variable names that are now part of the publicly-supported
375         interface:
376
377             NEW NAME              DEPRECATED NAME
378             --------              ----------------------------
379             CScanner              SCons.Defaults.CScan
380             DSCanner              SCons.Defaults.DScan
381             SourceFileScanner     SCons.Defaults.ObjSourceScan
382             ProgramScanner        SCons.Defaults.ProgScan
383
384         Of these, only ObjSourceScan was probably used at all, to add
385         new mappings of file suffixes to other scanners for use by the
386         Object() Builder.  This should now be done as follows:
387
388             SourceFileScanner.add_scanner('.x', XScanner)
389
390   SCons is developed with an extensive regression test suite, and a
391   rigorous development methodology for continually improving that suite.
392   Because of this, SCons is of sufficient quality that you can use it
393   for real work.  The "beta" status of the release reflects that we
394   still may change interfaces in future releases, which may require
395   modifications to your SConscript files.  We strive to hold these
396   changes to a minimum.
397
398   Nevertheless, please heed the following disclaimers:
399
400     - Please report any bugs or other problems that you find to our bug
401       tracker at our SourceForge project page:
402
403       http://sourceforge.net/tracker/?func=add&group_id=30337&atid=398971
404
405       We have a reliable bug-fixing methodology already in place and
406       strive to respond to problems relatively quickly.
407
408     - Documentation is spottier than we'd like.  You may need to dive
409       into the source code to figure out how to do something.  Asking
410       questions on the scons-users mailing list is also welcome.  We
411       will be addressing the documentation in upcoming releases, but
412       would be more than glad to have your assistance in correcting this
413       problem... :-)
414
415       In particular, the "SCons Design" documentation on the SCons web
416       site is currently out of date, as we made significant changes to
417       portions of the interface as we figured out what worked and what
418       didn't during implementation.
419
420     - There may be performance issues.  Improving SCons performance
421       is an ongoing priority.  If you still find the performance
422       unacceptable, we would very much like to hear from you and learn
423       more about your configuration so we can optimize the right things.
424
425     - Error messages don't always exist where they'd be helpful.
426       Please let us know about any errors you ran into that would
427       have benefitted from a (more) descriptive message.
428
429   KNOWN PROBLEMS IN THIS RELEASE:
430
431     For a complete list of known problems, consult the SCons bug tracker
432     page at SourceForge:
433
434         http://sourceforge.net/tracker/?atid=398971&group_id=30337&func=browse
435
436     - Support for parallel builds (-j) does not work on WIN32 systems
437       prior to *official* Python release 2.2 (not 2.2 pre-releases).
438
439       Prior to Python 2.2, there is a bug in Python's Win32
440       implementation such that when a thread spawns an external command,
441       it blocks all threads from running.  This breaks the SCons
442       multithreading architecture used to support -j builds.
443
444       We have included a patch file, os_spawnv_fix.diff, that you can
445       use if you you want to fix your version of Python to support
446       parallel builds in SCons.
447
448     - Again, the "SCons Design" documentation on the SCons web
449       site is currently out of date.  Take what you read there with a
450       grain of salt.
451
452     - On Win32 systems, you must put a space between the redirection
453       characters < and >, and the specified files (or construction
454       variable expansions):
455
456         command < $SOURCE > $TARGET
457
458       If you don't supply a space (for example, "<$SOURCE"), SCons will
459       not recognize the redirection.
460
461     - MSVC .res files are not rebuilt when icons change.
462
463     - The -c option does not clean up .sconsign files or directories
464       created as part of the build, and also does not clean up
465       SideEffect files (for example, Visual Studio .pdb files).
466
467     - Switching content signatures from "MD5" to "timestamp" and back
468       again can cause unusual errors.  These errors can be cleared up by
469       removing all .sconsign files.
470
471     - When using multiple Repositories, changing the name of an include
472       file can cause an old version of the file to be used.
473
474     - There is currently no way to force use of a relative path (../*)
475       for directories outside the top-level SConstruct file.
476
477     - The Jar() Builder will, on its second or subsequent invocation,
478       package up the .sconsign files that SCons uses to track signatures.
479       You can work around this by using the SConsignFile() function
480       to collect all of the .sconsign information into a single file
481       outside of the directory being packaged by Jar().
482
483     - SCons does not currently have a way to detect that an intermediate
484       file has been corrupted from outside and should be rebuilt.
485
486     - Unicode characters in path names do not work in all circumstances.
487
488     - A stray source file in a BuildDir can prevent targets from being
489       (re)built when they should.
490
491     - SCons does not automatically rebuild LaTeX files when the file
492       has an undefined reference on the first build.
493
494     - Use of --implicit-cache with TargetSignatures('content') can,
495       for some changes, not rebuild a file when necessary.
496
497     - SCons does not currently automatically check out SConstruct or
498       SConscript files from SCCS, RCS or BitKeeper.
499
500     - No support yet for the following planned command-line options:
501
502          -d -e -l --list-actions --list-derived --list-where
503          -o --override -p -r -R -w --write-filenames
504          -W --warn-undefined-variables
505
506
507
508 Thank you for your interest, and please let us know how we can help
509 improve SCons for your needs.
510
511 Steven Knight
512 knight at baldmt dot com
513 http://www.baldmt.com/~knight/
514
515 With plenty of help from the SCons Development team:
516         Chad Austin
517         Charles Crain
518         Steve Leblanc
519         Gary Oberbrunner
520         Anthony Roach
521         Greg Spencer
522         Christoph Wiedemann
523